关于dosbox运行的问题
code segmentstart: mov ax, data
mov ds, ax
mov ax, table
mov es, ax
mov bx, 0
mov di, 0
mov si, 0
mov cx, 21
s: mov al,
mov es:, al
mov al,
mov es:, al
mov al,
mov es:, al
mov al,
mov es:, al
mov ax,
mov dx,
mov es:, ax
mov es:, dx
mov ax,
mov es:, ax
mov ax,
mov dx,
div word ptr ds:
mov es:, ax
add bx, 4h
add si, 2h
add di, 10h
loop s
mov ax, 4c00H
int 21H
code ends
end start
这是汇编语言第8章实验七的代码,当我用dosbox跟踪运行的时候,发现:本该用p命令结束loop循环,却发生了意外
https://fishc.com.cn/forum.php?mod=image&aid=117926&size=300x300&key=96d94a70336dd713&nocache=yes&type=fixnone
原本用p命令结束loop后,后面应该是
mov ax, 4c00H
int 21H
但是实际显示的却不是,不明白。请哪位朋友帮忙看看
把代码发完整 本帖最后由 jackz007 于 2019-12-12 00:19 编辑
div word ptr ds:
这个和 DosBox 关系不大,问题出在被除数 DX:AX 与除数 word ptr ds: 之间的大小不匹配,使得商的数值太大,以至于无法在一个 16 位的寄存器中保存,因而引发除法溢出异常,而 DosBox 和 Debug.exe 事先并没有对这个异常的中断(int 0)进行接管和处理,当中断发生的时候,CS : IP 被切换到了随机的垃圾内存地址,从而导致 debug.exe 产生溢出奔溃。
楼主在跟踪到 LOOP 指令的时候,改用 t 命令逐条指令跟踪,重点是监视除法指令执行前,DX:AX 的数值和内存 word ptr ds: 的数值,看看原因是否是这个问题。 jackz007 发表于 2019-12-12 00:07
这个和 DosBox 关系不大,问题出在被除数 DX:AX 与除数 word ptr ds: 之间的大小不匹配 ...
多谢!!! o o o o o o
页:
[1]