add ax,2 结果ip发生了变化,这是为什么
附源代码
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,
push ax
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
写错了,是cs发生了变化 本帖最后由 cnkizy 于 2018-2-1 13:02 编辑
首先 add指令后 ,cs不一定发生改变,如:下图是dosbox模拟器上的。
然后执行 add bx,02 就崩了,我虚拟机上也有这错误,下图是xp虚拟机上的。
猜测可能是cpu的缘故,也可能是虚拟机不支持的缘故,触碰到了cpu某个内存的秘密开关,导致cpu把你一脚踢出去了。
所以,你那里add ,al 其实就是退出程序了。自然cs ip改变了
用dosbox就可以正常执行,xp上有问题,我也初学不知道原因。
然后你是要把 a段复制到b段吗?你用的是db类型的数字,复制用的16位寄存器,代码执行后可是这样的哦:
页:
[1]