搜索

在单片机片内30H开始存放了10个4字节无符号二进制数,请编程求这10个数的和。

例如,(30H 31H 32H 33H)存放了第一个数,30H是数的低位字节,33H是数的高位字节                (34H 35H 36H 37H)存放了下一个数,34H是数的低位字节,37H是数的高位字节                依次类推。
头像
1687 次浏览2020.03.17 提问
10

专业回答

头像
2020.03.17 回答

假设是10个0x44332211相加

;30H开始存10个32位的数字0x44332211 十进制为1144201745

;10个0x44332211和为11,442,017,450,,即0x2 A9FF 54AA

mov 30h,#0x11;

mov 31h,#0x22

mov 32h,#0x33

mov 33h,#0x44

mov 34h,#0x11

mov 35h,#0x22

mov 36h,#0x33

mov 37h,#0x44

mov 38h,#0x11

mov 39h,#0x22

mov 3ah,#0x33

mov 3bh,#0x44

mov 3ch,#0x11

mov 3dh,#0x22

mov 3eh,#0x33

mov 3fh,#0x44

mov 40h,#0x11

mov 41h,#0x22

mov 42h,#0x33

mov 43h,#0x44

mov 44h,#0x11

mov 45h,#0x22

mov 46h,#0x33

mov 47h,#0x44

mov 48h,#0x11

mov 49h,#0x22

mov 4ah,#0x33

mov 4bh,#0x44

mov 4ch,#0x11

mov 4dh,#0x22

mov 4eh,#0x33

mov 4fh,#0x44

mov 50h,#0x11

mov 51h,#0x22

mov 52h,#0x33

mov 53h,#0x44

mov 54h,#0x11

mov 55h,#0x22

mov 56h,#0x33

mov 57h,#0x44

MOV 5AH,#30H //标记加数存储地址30H

MOV 5BH,#60H //和存放地址60H。若和超过4个字节,自动向前借一个字节

MOV 60H,#0 //清空和数存放位置

MOV 61H,#0

MOV 62H,#0

MOV 63H,#0

MOV R1,5BH //和存储位置给R1

mov r0,5AH

mov    r4,5AH

MOV R2,#4 //4个字节

loop1: MOV R3,#10 //10个加数数字

Loop2: MOV A,@r0 //和数第R2字节与加数第R2字节。结果给和数第R2字节

ADD A,@R1

MOV @R1,A //计算的进位与和数R2-1字节相加

INC R1

MOV A,@R1

ADDC A,#0

MOV @R1,A

DEC r1

MOV A,R0 //找下一个加数R2字节存储位置,准备计算下一个

ADD A,#0x04

MOV R0,A

djnz R3,loop2 //跳转指令。R3减一看10个加数的第R2位是否都计算完成。没有计算完成则回loop2计算计算

INC R4

mov a,R4

mov R0,a

INC R1

djnz R2,Loop1 //第R2计算完成跳,R2减一,开始计算更高位。值到4

end

抢首赞
置顶