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

单片机 用汇编语言编写三个字节数的相加的程序,要用堆栈保护,急!!!!!,第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. . 恢复现场,恢复工作寄存器,状态寄存器值等中断中用到的寄存器。

首先:R1+R4

R2+R5

两个值都大于单字节最大值FF导致存储在单字节寄存器中溢出,导致高字节的数据丢失。

其次:楼主在将R1、R2存放到中间寄存器的时候中间寄存器A应该为16位寄存器才不会丢失高字节的数据。

具体的程序编写,相信楼主经过提示一定能自行解决,这样提高也是最大的。

简单,不用循环结构。

MOV A, 40H

ADD A, 43H

MOV 50H,A

MOV A, 41H

ADDC A, 44H

MOV 51H,A

MOV A, 42H

ADDC A, 45H

MOV 52H,A

MOV 20H.0,C


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7767334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存