鱼C论坛

 找回密码
 立即注册
查看: 2050|回复: 3

[已解决]jmp后的div问题

[复制链接]
发表于 2020-5-27 21:59:31 | 显示全部楼层 |阅读模式

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

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

x
本问题出自实验10的编写子程序第三题:数值显示
但本代码简化了过程,仅是将数值转换为ASCII码的过程显示出来,代码如下:

assume cs:code

data segment

        db 10 dup (0)
        
data ends

code segment

start:        mov ax, data
                mov ds, ax

                mov ax, 12666
                call show_str

                mov ax, 4c00H
                int 21H

show_str:
                mov bx,10 ;设置除数
s:                 div bx ;进行除法
                mov cx,ax
                jcxz ok ;若商为0则跳转
                add dx,30H
                push dx ;ASCII处理后入栈
                inc di ;di记录余数个数
                jmp short s ;再除

ok:                add dx,30H ;此时商为零,但仍有余数
                push dx ;入栈最后一位
                inc di ;确定位数

                mov cx,di ;把位数设置为循环次数
                mov si,0 ;清零si
r:          pop ds:[si] ;出栈之前入栈数据到data段
                add si,2 ;为出栈下个数据做准备
                loop r
code ends
end start
但是debug跟踪运行发现:
执行到jmp short s后,debug内容如下:
(为什么代码显示: ???[BX+SI])

最佳答案
2020-5-27 23:24:31
dx:ax / bx
003604f2 / 000a = 566e5

溢出
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-27 23:11:38 | 显示全部楼层
应该是除法溢出导致的中断,后面有讲的
你看看此时cs,ip的值明显异常,看到后面就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-27 23:24:31 | 显示全部楼层    本楼为最佳答案   
dx:ax / bx
003604f2 / 000a = 566e5

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

使用道具 举报

 楼主| 发表于 2020-5-28 01:10:10 | 显示全部楼层
人造人 发表于 2020-5-27 23:24
dx:ax / bx
003604f2 / 000a = 566e5

谢谢,是我忘记把DX中的值设为0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 19:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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