在王爽第7章,更灵活定位内存地址中, 代码编译完成后运行程序出现错误提示框
题目要求是,将数据段(4行4列,每行16个字节,每行前2个为空格)每行的前4个字母改成大写
程序源代码如下:
assume ds:datasg,cs:codesg,ss:stacksg
datasg segment
db 'myloveis '
db 'young '
db 'andyou '
db 'jingjing '
datasg ends
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
start:mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,codesg
mov ds,ax
mov bx,0
mov cx,4
s1: push cx
mov si,3
mov cx,4
s2: mov al,
and al,11011111b
mov ,al
inc si
loop s2
add bx,16
pop cx
loop s1
mov ax,4c00h
int 21h
codesg ends
end start
但编译完成后运行exe程序出现错误提示框,图如下:
经多次检查调试以及在网上查找资料都没有找出问题所在,希望大家能帮忙看下
在提示的地址上遇到一个不合法的指令,debug到那里看看是什么指令出错了 nsonline 发表于 2014-4-24 16:33 static/image/common/back.gif
在提示的地址上遇到一个不合法的指令,debug到那里看看是什么指令出错了
debug过程中又没有出现这样的提示呀 刚我debug了一下,发现一个奇怪的地方就是,当外层循环第3次执行到 pop cx 之后 ,此时 cx 里的值是 2,本来下跳指令时 loops1,判断cx 是否等于0 ,但事件上是 ret XXXX ,他执行完这条指令之后,就吧ip改成了一个很大的数,不知道是跳到哪里去了, 而此时后面的代码是一样的了,我只能帮你到这里了,这个问题我反正是不知道是什么原因,下面是图 你自己看看,或者你也debug 一下http://v2.freep.cn/3tb_140424174430dfe4512293.jpg
页:
[1]