|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题: 执行到div指令也就是第25行的时候就会莫名跳转到别的地方,如图
代码如下:
- assume cs: codesg, ds: data
- data segment
- db 'hard hard study day day up', 0
- db 4ah, 0a0h, 0ah, 0 ; 4ah为字符串属性(偏移地址为1bh), 0a0h是160的16进制(偏移地址为1ch), 0ah是10的16进制(偏移地址为1dh)
- data ends
- codesg segment
- start:
- mov ax, data
- mov ds, ax
- mov ch, 8 ; 设置显示位置为第八行
- mov cl, 3 ; 设置显示位置为第三列
- mov ax, 8000h
- mov dx, 0bh ; 显存物理地址为b8000, 用dx存放高位,ax存放低位
- mov es, ax
- xor ax, ax
- sub ch, 1
- mov al, ch
- mul byte ptr ds:[1ch] ; 跳过前面七行
- mov bx, es
- add ax, bx
- sub cl, 1
- add al, cl; 跳过前面两列
- div word ptr ds:[1dh] ; 商存放到ax, 余数存放到dx
- mov di, dx ; 将初始偏移地址赋给di
- mov es, ax ; 将目的段地址赋给es
- xor si, si ; si用于索引字符串
- call show_str
- mov ax, 4c00h
- int 21h
- show_str:
- mov ch, 0 ; 利用cx判断是否到达字符串末端
- mov cl, ds:[si] ; 取出字符
- jcxz ok ; 判断字符是否为0
- mov es:[di], cl
- inc di ; 定位下一个目的地址
- inc si ; 定位下一个字符
- mov al, ds:[1bh] ; 取出字符属性
- mov es:[di], al
- inc di
- jmp short show_str
- ok:
- ret
- codesg ends
- end start
复制代码
1. 实验十是什么?把题目发出来呀
你不发出来,让别人去找你问题的题目,这样太费时间了
解决你的问题也就几分钟的时间,去找你问题的题目的时间,至少十几分钟,这是至少
我学完汇编语言已经过去很长很长时间了,不可能记得实验十是什么
学汇编语言的时候用的还是windows系统(已经忘了是windows几了),现在已经用linux系统了
我要找到之前学汇编语言的那些资料的难度至少在半个小时以上
也就是说,你不把题目发出来,而是让我们自己去找
那我们很有可能会放弃回答这个问题,毕竟要花的时间实在是太多了
2. 看你的图片中
div 是 DX:AX / DS:[1D]
就是16位除法
DX:AX 的内容是 B8462
DS:[1D] 的内容是 A
B8462 / A 的商是 126D6
余数是 6
执行完 div word ptr [001d] 后,把商 126D6 存放在AX寄存器中,把余数 6 存放在DX寄存器中
但是你有没有发现一个问题?
把商 126D6 存放在AX寄存器中
AX可以保存下 126D6 吗?
没错,除法溢出了,可以想到 F000:1060 的位置是除法溢出的处理程序
|
|