与剩余部分划分(x86程序集)

时间:2014-03-14 10:55:55

标签: assembly x86 division tasm

有人能告诉我这段代码中的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

并且它不起作用

2 个答案:

答案 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是没有办法的 - 整数除法永远不会产生非整数结果。