📄 汇编除法有小数.txt
字号:
;----------------------------单字节除法运算,约到小数点后面两位小数-----------------------
;--------------------------------------------------------------------------------------
;-------------------------入口条件:被除数在R7,除数在R6,商在R1,小数在R0-------------------
;--------------------------------------------------------------------------------------
quotient equ 70h
decimal equ 71h
org 0000h
ajmp main
org 0030h
main: mov sp,#3fh
mov r7,#100 ;十进制为96 1100000b
mov r6,#35 ;十进制为65 1000001b
clr a
mov r1,a ;存商 应为1
mov r0,a ;存小数 应为48
mov a,r7
mov b,r6
div ab
mov quotient,a ;存商1
;;;;;;;;;;;;;;;;;;;;;计算小数部分;;;;;;;;;;;;;;;;;;;;;;
mov r2,#0 ;高位
mov r3,#10
mov r6,#0 ;高位
mov r7,#100
acall mul_10 ;此时R2=R3=0,R4=03,R5=C0,3C0=960;扩大了十倍.
mov r6,#0
mov r7,#35
acall div_1
mov r1,quotient
acall htod
anl a,#0fh
mov r0,a
sjmp $
;;;;;;;;;;;;;;;;;;;;;乘法运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
mul_10:
MULD: MOV A,R3
MOV B,R7
MUL AB
MOV R4,B ;
MOV R5,A
MOV A,R3 ;患扑鉘3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;焕奂硬糠只?
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;患扑鉘2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;焕奂硬糠只?
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;患扑鉘2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;焕奂硬糠只?
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;除法运算;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口条件:被除数在 R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
div_1:
DIVD: CLR C ;比较被除数和除数
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
jc DVD1
SETB OV ;溢出
jmp $
DVD1: MOV B,#10H ;计算双字节商
DVD2: CLR C ;部分商和余数同时左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;计算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;结果判断
JC DVD3
MOV R2,A ;够减,存放新的余数
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)
MOV A,R4 ;将商移到R2 R3中
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV ;设立成功标志
ret
;;;;;;;;;;;;;;;;;;;;十六进制转十进制;;;;;;;;;;;;;;;;;;;
;入口条件:待转换的单字节十六进制整数在累加器A中。
;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源:PSW、A、B、R3 堆栈需求: 2字节
htod:
MOV B,#100 ;分离出百位,存放在R3中
DIV AB
MOV R3,A
MOV A,#10 ; 余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
ORL A,B ; 将十位和个位拼装成BCD码
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -