有人能告诉我这段代码中的div bl指令有什么问题吗?我试图划分10/20,结果应该是0.5。 a(DB)和b(DB)
mov al, b; b==10
mov bl, a; a==20
div bl ;
mov bh, ah
现在我得到10分啊,但第二个问题是我需要解决(3 * a-b / a)所以
mov ah,a; a=20
mov al,3
mul ah
mov cx,ax; cx=60
mov al,b
mov ah,0
mov bl,a
div bl
mov bx, ax
sub cx,bx
并且它不起作用
答案 0 :(得分:1)
DIV用于整数除法。 10/20为0,余数为10.
8位除法使用AH:AL(或AX)作为源寄存器,将结果放在AL中,其余部分放在AH中。 (你似乎已经 AH 未初始化了。)
0.5的固定点表示是可能的,通过首先乘以源' 10'按分数计算。
e.g。
Base 10:
10 * 1000 = 10,000 = "10000 / 1000" = "ten"
10000 / 20 = 500 = " 500 / 1000" = "zero point five"
Base 16:
10 * 256 = 10 << 8 = 0x0A00 = 10*256 / 256 = "ten"
0x0A00 / 20 = 0x0080 = 128 / 256 = "zero point five"
答案 1 :(得分:0)
首先,div bl
会划分ax
个内容,您只需设置al
。结果将al
设置为0(有效),ah
设置为10(余数)。结果变为0.5
是没有办法的 - 整数除法永远不会产生非整数结果。