单片机做减法c语言,8位单片机怎么实现32位加减法

你说的实现32位加减法指的是双字节的运算吧.

;双字节减法子程序

;参数:R6R5,R4R3

;返回:R2R3

DSUB: MOV A,R5

CLR C

SUBB A,R3

MOV R3,A

MOV A,R6

SUBB A,R4

MOV R2,A

RET

;双字节加法子程序

;参数:R6R5,R4R3

;返回:R2R3

LADD: MOV A,R5

ADD A,R3

MOV R5,A

MOV A,R6

ADDC A,R4

MOV R6,A

MOV A,R5

MOV R3,A

MOV A,R6

MOV R2,A

RET

;双字节乘法子程序

;参数:R6R5,R4R3

;返回:R2R1R4R3

DMUL: MOV A,R5;

MOV B,R3

MUL AB;R5*R3

XCH A,R3;低位→R7,R7→A准备乘数

MOV R1,B;高位暂存R1

MOV B,R6

MUL AB;R6*R3

ADD A,R1;乘积低位加上一乘积高位暂存R4

MOV R4,A

CLR A;清A

ADDC A,B;高位加低位来的进位存R5

MOV R1,A

MOV A,R4

MOV B,R5

MUL AB;R5*R4

ADD A,R1;第三次乘积低位加R5暂存R6

XCH A,R4

XCH A,B

ADDC A,R1;第三次乘积高位加R5存R5

MOV R1,A

MOV FO,C;保存进位位

MOV A,R6

MUL AB;R6*R4

ADD A,R1;第四次乘积低位加R5存R5

MOV R1,A

CLR A

MOV ACC.0,C

MOV C,FO

ADDC A,B;第四次乘积高位加低位来的进位后存于R4

MOV R2,A

RET

;双字节除法程序

;参数:R2R1R4R3,R6R5

;返回:R4R3(商),R2R1(余数)

DDIV: MOV A,R1

CLR C

SUBB A,R5

MOV A,R2

SUBB A,R6

JNC DIV1;被除数高位字节大于除数,转溢出处理

MOV B,DIV1;无溢出执行除法,置循环次数

MOV B,#16;被除数向左移一位,低位送零

DDIV2: CLR C

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV A,R1

RLC A

MOV R1,A

XCH A,R2

RLC A

XCH A,R2

MOV FO,C;保护移出的最高位

CLR C

SUBB A,R5;高位移出位为1,够减转DV2

MOV A,R2

SUBB A,R6

JB FO,DV2

JC DV3

DV2: MOV R2,A;回送减法结果

MOV A,R0

MOV R1,A

INC R7;商上一

DV3: DJNZ B,DV2;不够减,循环次数-1

CLR FO;正常执行无溢出,FO=0

RET

DIV1: SETB FO;置溢出标志

RET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值