鱼C论坛

 找回密码
 立即注册
查看: 2538|回复: 2

add ax,2 结果ip发生了变化,这是为什么

[复制链接]
发表于 2018-1-31 22:00:17 | 显示全部楼层 |阅读模式

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

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

x
problem.png

附源代码

assume cs:code

a segment
  db 1,2,3,4,5,6,7,8
a ends


b segment
  db 0,0,0,0,0,0,0,0
b ends

code segment
start:
      mov ax,a
      mov ds,ax
      mov ax,b
      mov sp,8
      mov ss,ax
      mov cx,4
      mov bx,0
    s:mov ax,[bx]
      push ax
      add bx,2
      loop s
      mov ax,4c00h
      int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-31 22:01:57 | 显示全部楼层
写错了,是cs发生了变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-1 11:47:50 | 显示全部楼层
本帖最后由 cnkizy 于 2018-2-1 13:02 编辑

首先 add指令后 ,cs不一定发生改变,如:下图是dosbox模拟器上的。
QQ截图20180201121930.png

然后  执行 add bx,02 就崩了,我虚拟机上也有这错误,下图是xp虚拟机上的。
QQ截图20180201124705.png

猜测可能是cpu的缘故,也可能是虚拟机不支持的缘故,触碰到了cpu某个内存的秘密开关,导致cpu把你一脚踢出去了。

所以,你那里add [bx+si],al 其实就是退出程序了。自然cs ip改变了

用dosbox就可以正常执行,xp上有问题,我也初学不知道原因。

然后你是要把 a段复制到b段吗?你用的是db类型的数字,复制用的16位寄存器,代码执行后可是这样的哦:
QQ截图20180201123822226.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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