ypyangpong 发表于 2013-10-12 23:09:21

大家帮我看下这个简单汇编程序 有注释 来人哈

assume cs:code,ss:stack
stack 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

ypyangpong 发表于 2013-10-12 23:11:40

上面问题是 我mov ax2后,它应该是跳转到s222那执行的,但为什么还是从s23那依次执行的 ,没有发生跳转
求给力回复   ,

dwlsxj 发表于 2013-10-12 23:28:03

因为你上面pop出来的不是2,是call指令执行后下一个IP的值!所以三个比较都不相等!

ypyangpong 发表于 2013-10-12 23:32:17

dwlsxj 发表于 2013-10-12 23:28 static/image/common/back.gif
因为你上面pop出来的不是2,是call指令执行后下一个IP的值!所以三个比较都不相等!

真心感谢你啊,,,我看了半天都没想出来    以后要注意细节了

dwlsxj 发表于 2013-10-12 23:36:11

ypyangpong 发表于 2013-10-12 23:32 static/image/common/back.gif
真心感谢你啊,,,我看了半天都没想出来    以后要注意细节了

没事的,小事

hackip 发表于 2013-10-13 10:51:23

路过支持一下,

ypyangpong 发表于 2013-10-13 17:08:13

hackip 发表于 2013-10-13 10:51 static/image/common/back.gif
路过支持一下,

3Q。。。3Q。。。3Q。。。3Q。。。
页: [1]
查看完整版本: 大家帮我看下这个简单汇编程序 有注释 来人哈