非压缩的bcd码表示的两位十进制运算

博客详细介绍了非压缩BCD码的乘除法算法。乘法算法通过将二位BCD码看作四步操作组合,模拟乘法计算过程,得出结果的个位、十位、百位和千位。除法算法则采用模拟方法,通过多次aad调整运算得到最终结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;x*y/t并把结果存入u , u+1, u+2, u+3
data segment
x dw 2 dup(?)
y dw 2 dup(?)
t db 1 dup(?)
u db 1 dup(?)
z dw 2 dup(?)
i dw 2 dup(?)
j dw 2 dup(?)
k db 1 dup(?)
m db 1 dup(?)
n db 1 dup(?)
data ends
code segment
assume cs:code , ds:data
start:
mov ax, data
mov ds, ax

mov x, 0908h
mov y, 0302h
mov t, 06h

mov cx, x
mov dx, y

mov al, cl
mov bl, dl
mul bl;x第一位相乘的结果
aam
mov z, ax;空出ax

mov al, ch
mul bl
aam

mov bx, z
mov bl, bh
mov bh, 0
add ax, bx
aaa
;*********************
mov i, ax
mov al, dh
mov bl, cl
mul bl;x第二位相乘的结果
aam

mov bx, i
add ax, bx
aaa
mov i, ax
;**********************
mov al, ch
mov bl, dh
mul bl;x第三位相乘的结果
aam

mov bx, i
mov bl, bh
mov bh, 0
add ax, bx
aaa
mov j, ax
;**********************
;除法
mov al, ah
mov ah, 0

aad
div t
mov k, al;
mov bh, ah
mov ax, j
mov ah, bh

aad
div t
mov u, al;保存结果2
mov bh, ah
mov ax, i
mov ah, bh

aad
div t
mov n, al;
mov bh, ah
mov ax, z
mov ah, bh

aad
div t
mov m, al

mov al, m
mov ds:[0], al
mov al, n
mov ds:[1], al
mov al, u
mov ds:[2], al
mov al, k
mov ds:[3], al

mov ah, 4ch
int 21h

code ends
end start


算法具体:

1. 其中对与第一道题目的算法,完全是自己琢磨出来的,算法的基本思想是这样的:对于一位的非压缩的BCD码我们可以很容易的得到结果,而对于二位BCD码,我们可以将其看作是四步这样的操作的组合,模拟乘法的计算过程:(所用变量不是程序的变量)

1. aam调整个位的乘积结果,然后将结果存入一个数i,待用

2. 再将乘数的个位和被乘数高位按aam调整相乘,存入j,调出i的高8位,存入寄存器的低8位,对其调入的寄存器的高8位赋0,然后和jaaa调整相加,存回j

3. 取乘数的高位和被乘数的低位,相乘,也一样做aam调整,存入k,将j的和k相加,结果存入k。做aaa调整。

4. 将乘数的高8位和被乘数的高位相乘,做aam调整,存入m,然后将k的高8位存入寄存器的低8位,对其调入的寄存器的高8位赋0,然后和madd相加作aaa调整,结果存入m。至此,我们可以知道,ik的低8位保存的是结果的个位和十位,而m保存的是百位和千位。

以上是乘法的算法,下面是除法,也是同样的道理,我们用模拟方法:

1. m的低8位的值,和t(除数)aad调整的除法,结果存入一个变量u,余数传入AH用于下一个运算。

2. 然后从m的低8位存入AL。进行运算,作aad调整。值存入v,余数传入AH用于下一个运算。

3. 然后从k的低8位存入AL。进行aad调整运算。值存入w,余数传入AH用于下一个运算。

4. 然后从i的低8位存入AL。进行aad调整运算。值存入x。得到结果uvwx组成的一组非压缩的BCD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值