单片机 用汇编语言编写三个字节数的相加的程序,要用堆栈保护,急!!!!!
2个回答
展开全部
堆栈保护?用中断来做三个字节数的相加是吧?我只能给你说下此程序的整个流程。
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. . 恢复现场,恢复工作寄存器,状态寄存器值等中断中用到的寄存器。
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. . 恢复现场,恢复工作寄存器,状态寄存器值等中断中用到的寄存器。
展开全部
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个字类型的数据相加,使用堆栈传递参数
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个字类型的数据相加,使用堆栈传递参数
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询