0

我正在使用 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           

如何在不关闭错误的情况下逐字分割双字?

4

1 回答 1

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
于 2013-01-11T06:51:16.633 回答