51单片机,使用keil软件,4字节加法或减法子程序

51单片机,使用keil软件,4字节加法或减法子程序,第1张

四个字节加上四个字节,和应该是4~5个字节。

本程序,需要三个地址指针,但是一般只有两个(R0和R1)可以用;如果换用工作区,就比较麻烦了。下面使用B充当“和”的地址指针,RESULT + 4单元,充当加数2的地址指针。

程序如下:

RESULT equ 30H 和数的地址

ORG 0000H

实验数据如下:

MOV 20H, #22H 加数1

MOV 21H, #33H

MOV 22H, #44H

MOV 23H, #0F3H

MOV 24H, #12H 加数2

MOV 25H, #34H

MOV 26H, #56H

MOV 27H, #78H

MOV R0, #20H 给定地址

MOV R1, #24H

LCALL _4_JIA_4 调用加法子程序

NOP

SJMP$

_4_JIA_4:

MOV RESULT + 4, R1 保存加数2地址

MOV B, #RESULT 保存和的地址

CLR C

MOV R2, #4

LOOP:

MOV A,@R0

INC R0

MOV R1, RESULT + 4

ADDC A,@R1 加上加数2

INC R1

MOV RESULT + 4, R1

MOV R1, B

MOV @R1, A 保存和数

INC R1

MOV B, R1

DJNZ R2, LOOP

CLR A

ADDC A,#0

MOV RESULT + 4, A 保存第五字节

RET

减法子程序,与上面的加法子程序雷同,只要把ADDC换成SUBB即可改为减法子程序。请楼主自行改写。

BHADD:

MOV A,31H

MOV B,#10

MUL AB

ADD A,30H

MOV R2,A

MOV A,32H

MOV B,#100

MUL AB

ADD A,R2

MOV R2,A

XCH A,B

ADDC A,#0

MOV R3,A

MOV A,33H

MOV B,#10

MUL AB

MOV B,#100

MUL AB

ADD A,R2

MOV R2,A

XCH A,B

ADDC A,R3

XCH A,R3

以上将30H~33H十进制转换为十六进制

MOV A,R2

ADD A,40H

MOV 40H,A

XCH A,R3

ADDC A,41H

MOV 41H,A

XCH A,42H

ADDC A,#0

MOV 42H,A

MOV A,43H

ADDC A,#0

MOV 43H,A

RET

不仅仅51单片机,所有计算机都是一样的实现机理。

都是通过硬件实现的,通过硬件的逻辑门实现,具体逻辑门很多,常见的有大家熟知的“与”,“或”,“异或”等等,这些逻辑门进行组合,实现了更加强大的功能,比如加法器,累加器,等等,你去百度一下“逻辑门”“门电路”“加法器”就知道咯大概了。

在逻辑门中,1,和0就是高电平和低电平。比如是1+0,它则是这样实现的:将某个逻辑门的引脚(你可以想象为某跟电线)设置为高电平,将另一个引脚设置为低电平,然后通过一些电路(这就是逻辑门了),他会得到高电平(即1)。同理如果是2+3(都会先转换成二进制数)呢?多几个引脚,多几次处理不就ok了么!你上面的12A4H和0FE7H是16进制数,硬件计算时会利用逻辑门先将他们转换成二进制数。如果你想了解是怎么转换成二进制数则可以百度一下AD转换。好了,就这样啦!

顺便说句,没事得给点分,要不一般是没人愿意为你做详细解答的!


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存