鱼C论坛

 找回密码
 立即注册
查看: 2809|回复: 4

[已解决]关于dosbox运行的问题

[复制链接]
发表于 2019-12-11 22:19:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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, [bx]
                mov es:[di], al
                mov al, [bx+1]
                mov es:[di+1h], al
                mov al, [bx+2h]
                mov es:[di+2h], al
                mov al, [bx+3h]
                mov es:[di+3h], al
               
                mov ax, [bx+54h]
                mov dx, [bx+56h]
                mov es:[di+5h], ax
                mov es:[di+7h], dx
               
                mov ax, [si+0a8h]
                mov es:[di+0ah], ax
               
                mov ax, [bx+54h]
                mov dx, [bx+56h]
                div word ptr ds:[si+0a8h]
                mov es:[di+0dh], 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循环,却发生了意外

                               
登录/注册后可看大图

原本用p命令结束loop后,后面应该是
mov ax, 4c00H
int 21H
但是实际显示的却不是,不明白。请哪位朋友帮忙看看
最佳答案
2019-12-12 00:07:58
本帖最后由 jackz007 于 2019-12-12 00:19 编辑
              div word ptr ds:[si+0a8h]
        这个和 DosBox 关系不大,问题出在被除数 DX:AX 与除数 word ptr ds:[si+0a8h] 之间的大小不匹配,使得商的数值太大,以至于无法在一个 16 位的寄存器中保存,因而引发除法溢出异常,而 DosBox 和 Debug.exe 事先并没有对这个异常的中断(int 0)进行接管和处理,当中断发生的时候,CS : IP 被切换到了随机的垃圾内存地址,从而导致 debug.exe 产生溢出奔溃。
        楼主在跟踪到 LOOP 指令的时候,改用 t 命令逐条指令跟踪,重点是监视除法指令执行前,DX:AX 的数值和内存   word ptr ds:[si+0a8h] 的数值,看看原因是否是这个问题。

p命令无法结束loop

p命令无法结束loop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-11 22:40:41 | 显示全部楼层

回帖奖励 +5 鱼币

把代码发完整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-12 00:07:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-12-12 00:19 编辑
              div word ptr ds:[si+0a8h]
        这个和 DosBox 关系不大,问题出在被除数 DX:AX 与除数 word ptr ds:[si+0a8h] 之间的大小不匹配,使得商的数值太大,以至于无法在一个 16 位的寄存器中保存,因而引发除法溢出异常,而 DosBox 和 Debug.exe 事先并没有对这个异常的中断(int 0)进行接管和处理,当中断发生的时候,CS : IP 被切换到了随机的垃圾内存地址,从而导致 debug.exe 产生溢出奔溃。
        楼主在跟踪到 LOOP 指令的时候,改用 t 命令逐条指令跟踪,重点是监视除法指令执行前,DX:AX 的数值和内存   word ptr ds:[si+0a8h] 的数值,看看原因是否是这个问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-12 22:33:45 | 显示全部楼层
jackz007 发表于 2019-12-12 00:07
这个和 DosBox 关系不大,问题出在被除数 DX:AX 与除数 word ptr ds:[si+0a8h] 之间的大小不匹配 ...

多谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-27 17:47:15 | 显示全部楼层
o o o o o o
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表