大家帮我看下这个简单汇编程序 有注释 来人哈
assume cs:code,ss:stackstack segment
db 256 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,256;ss:sp指向栈低
mov ax,2
push ax ;把2压入栈
call setscreen;调用函数
mov ax,4c00h
int 21h
setscreen:
pop ax;把2弹出栈
mov bx,0b800h
mov ds,bx
mov bx,1;ds:指向0b800:1
mov cx,2000;cx计2000次数
cmp ax,0;ax和0比较
je s23;比较相等就跳转
cmp ax,1;ax和1比较
je s22;比较相等就跳转
cmp ax,2;ax和2比较
je s222 ;比较相等就跳转
s23: mov dl,00000000b
ss2: mov byte ptr ,dl
add bx,2
loop ss2
jmp short end2
s22: mov dl,01000000b
s2: mov byte ptr ,dl
add bx,2
loop s2
jmpshort end2
s222: mov dl,00100000b
ssss2: mov byte ptr ,dl
add bx,2
loop ssss2
end2:
pop dx
pop cx
pop bx
ret
code ends
end start
上面问题是 我mov ax2后,它应该是跳转到s222那执行的,但为什么还是从s23那依次执行的 ,没有发生跳转
求给力回复 , 因为你上面pop出来的不是2,是call指令执行后下一个IP的值!所以三个比较都不相等! dwlsxj 发表于 2013-10-12 23:28 static/image/common/back.gif
因为你上面pop出来的不是2,是call指令执行后下一个IP的值!所以三个比较都不相等!
真心感谢你啊,,,我看了半天都没想出来 以后要注意细节了 ypyangpong 发表于 2013-10-12 23:32 static/image/common/back.gif
真心感谢你啊,,,我看了半天都没想出来 以后要注意细节了
没事的,小事 路过支持一下, hackip 发表于 2013-10-13 10:51 static/image/common/back.gif
路过支持一下,
3Q。。。3Q。。。3Q。。。3Q。。。
页:
[1]