单片机 用汇编语言编写三个字节数的相加的程序,要用堆栈保护,急!!!!!

2025-05-21 23:30:55
推荐回答(2个)
回答1:

堆栈保护?用中断来做三个字节数的相加是吧?我只能给你说下此程序的整个流程。
1. 进行现场保护,保存工作寄存器,状态寄存器值等中断中用到的寄存器。
2. 将求和用的寄存器(至少4个字节)清零;
3. 将最低字节被加数送入工作寄存器,加数最低字节与工作寄存器相加,结果存在工作寄存器;
4.工作寄存器内容送入和的最低字节,如有进位和的第2字节加1;
5. .将第2字节被加数送入工作寄存器,和的第2字节与工作寄存器相加,结果存在和的第2字节, 如有进位,和的第3字节加1;
6. 将第2字节加数送入工作寄存器,和的第2字节与工作寄存器相加,结果存在和的第2字节,.如有进位和的第3字节加1;
7..将第3字节被加数送入工作寄存器,和的第3字节与工作寄存器相加,结果存在和的第3字节, 如有进位,和的第4字节加1;
8. 将第3字节加数送入工作寄存器,和的第3字节与工作寄存器相加,结果存在和的第3字节,.如有进位和的第4字节加1;
9. . 恢复现场,恢复工作寄存器,状态寄存器值等中断中用到的寄存器。

回答2:

DATA SEGMENT
NUM DW 3456H,2612H,7000H
DATA ENDS
STACK SEGMENT
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET NUM
PUSH [SI]
PUSH [SI+2]
PUSH [SI+4]
CALL ACCUMU
CALL DISPLAY
MOV AH,4CH
INT 21H
ACCUMU PROC
MOV BP,SP
MOV AX,0
ADD AX,[BP+2]
ADD AX,[BP+4]
ADD AX,[BP+6]
MOV BX,AX
RET 3
ACCUMU ENDP
DISPLAY PROC
MOV CX,10H
LP:MOV DL,'0'
RCL BX,1
JNC LP1
MOV DL,'1'
LP1:MOV AH,2
INT 21H
LOOP LP
RET
DISPLAY ENDP
CODE ENDS
END START
以上程序的功能是将2个字类型的数据相加,使用堆栈传递参数