分组装麻烦

sip*_*cup 0 x86 assembly

我正在研究一个简单的程序,它将两个数字相加并给出它们的平均值.我的麻烦在于分裂.我设置bl = 2并用它来分成具有正确整数的ax寄存器但是,我似乎无法得到正确的答案.例如,当我将8除以2时,我在al寄存器中得到1c.

mov dl, bl    
add dx, 30h; two user entered numbers add together and converted
mov ah, 2h
int 21h

;mov dx, 0h  
mov ax, dx ; 
mov bl, 2
div bl ; al, ah for results 
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 7

你添加30hdx,所以你要划分38h,而不是8.并且38h / 2 == 1Ch.

作为旁注,在你除以2的幂(例如2,4,8,16等)的特殊情况下,你可以通过向右移动log2(除数)位来做到这一点.在这种情况下shr ax, 1(或者sar ax, 1如果你想ax作为有符号数字).