我正在使用Windows 7,但我也尝试使用dosbox上的代码
我想知道如何在16位模式下逐字逐句划分
我用fasm。并制作.com文件
以下代码正确运行 但它只是在dx高于0
时关闭仿真窗口org 100h
mov dx, 0
mov ax, 10
mov bx, 10
div bx
add ax, '0'
int 29h
mov ax, 00h
int 16h
mov ax, 4c00h
int 21h
如果我改变代码,如下所示.. 它在dx高于0xf时关闭 我不知道为什么。
org 100h
mov dx, 0xf
mov ax, 10
div word [divby]
add ax, '0'
int 29h
mov ax, 00h
int 16h
mov ax, 4c00h
int 21h
divby:
dw 0x10
如何在不关闭错误的情况下逐字逐句划分?
答案 0 :(得分:3)
当dx:ax / bx不能适合ax(或者当一个除以零)时,会发生“关闭”或除去溢出异常。
假设aa中有一个“大”值:bb:cc:dd,那么除以bx就必须执行以下步骤:
lea si,[aa]
lea di,[result]
mov dx,0
mov cx,4
again:
lodsw ;; load ax
div bx
stosw ;; store result of division
loop again
;; at this point dx will contain the remainder of the big_int % bx