清风2012 发表于 2019-12-11 22:19:48

关于dosbox运行的问题

code segment
start:      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
但是实际显示的却不是,不明白。请哪位朋友帮忙看看

人造人 发表于 2019-12-11 22:40:41

把代码发完整

jackz007 发表于 2019-12-12 00:07:58

本帖最后由 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: 的数值,看看原因是否是这个问题。

清风2012 发表于 2019-12-12 22:33:45

jackz007 发表于 2019-12-12 00:07
这个和 DosBox 关系不大,问题出在被除数 DX:AX 与除数 word ptr ds: 之间的大小不匹配 ...

多谢!!!

gang19840815 发表于 2020-1-27 17:47:15

o o o o o o
页: [1]
查看完整版本: 关于dosbox运行的问题