编写程序。设被乘数存放于片内RAM的addr1(低位字节)和addr2(高位字节),乘数存放于adddr3(低位字节)和addr4(高位字节),运算结果和数存于addr1、 addr2、 adddr3和addr4中。假定皆为无符号数。 【参考例题】:设被加数存放于片内RAM的addr1(低位字节)和addr2(高位字节),加数存放于adddr3(低位字节)和addr4(高位字节),运算结果和数存于addr1、 addr2和 adddr3中。其程序段如下: START: PUSH ACC ;将A中内容进栈保护 MOV R0,#addr1 ;将addr1地址值送R0 MOV R1,#addr3 ;将addr3地址值送R1 MOV A,@R0 ;被加数低字节内容送A ADD A,@R1 ;低字节数相加 MOV @R0,A ;低字节数和存addr1中 INC R0 ;指向被加数高位字节 INC R1 ;指向加数高位字节 MOV A,@R0 ;被加数高位字节送A ADDC A,@R1 ;高字节数相加 MOV @R0,A ;高字节数和存addr2中 JC Set1 ;若最高字节相加有进位,则转Set1 MOV addr3,#00H ;addr3清零 SJMP Over Set1: MOV addr3,#01H ;最高进位存入addr3 Over: POP ACC ;恢复A原内容 这里将A原内容进栈保护,如果原R0和R1内容有用,则亦须进栈保护。将上述题目给出代码
时间: 2023-06-02 15:06:19 浏览: 230
在RAM中执行程序代码
5星 · 资源好评率100%
#addr1 ;将被加数低位地址存入R0 MOV R1, #addr2 ;将被加数高位地址存入R1 MOV R2, #adddr3 ;将加数低位地址存入R2 MOV R3, #addr4 ;将加数高位地址存入R3
MOV A, @R0 ;将被加数低位存入A ADD A, @R2 ;将加数低位加入A
MOV @R0, A ;将计算结果存入被加数低位地址 INC R0 ;被加数低位地址加1 JC CARRY ;如有进位,跳转CARRY INC R1 ;被加数高位地址加1 JMP OVERFLOW ;跳转到结束 CARRY: MOV A, @R1 ;将被加数高位存入A ADD A, #1 ;加上进位 MOV @R1, A ;将结果存入被加数高位地址 OVERFLOW: POP ACC ;恢复A中的值 RET ;返回程序的调用点
对于乘法运算,程序段应该如下:
START: PUSH ACC ;将A中内容进栈保护 MOV R0, #addr1 ;将被乘数低位地址存入R0 MOV R1, #addr2 ;将被乘数高位地址存入R1 MOV R2, #adddr3 ;将乘数低位地址存入R2 MOV R3, #addr4 ;将乘数高位地址存入R3
MOV A, @R0 ;将被乘数低位存入A MUL AB, @R2 ;将乘数低位与被乘数低位相乘 MOV @R1, B ;将乘积高位存入被乘数高位地址
MOV A, @R0 ;将被乘数低位存入A MUL AB, @R3 ;将乘数高位与被乘数低位相乘 ADD A, B ;将上一步计算结果加入A
MOV @R2, A ;将计算结果存入乘数低位地址
MOV A, @R1 ;将被乘数高位存入A MUL AB, @R2 ;将乘积低位与被乘数高位相乘 ADD A, B ;将上一步计算结果加入A
MOV @R1, A ;将计算结果存入被乘数高位地址
POP ACC ;恢复A中的值 RET ;返回程序的调用点
阅读全文