the_sun、、 发表于 2012-11-8 00:02:14

分析一个奇怪的汇编程序 太奇怪了!

assume cs:code,ds:data,ss:stack

data segment
   dw 8 dup (0)
data ends

stack segment
   db 'noitasrevnoc'
stack ends

code segment
   s:
   mov ax,data
       mov ds,ax
       mov ax,stack
       mov ss,ax
       mov sp,0
       mov si,0
       mov cx,12
       s0:
       pop ax
       mov ds:,ax
       and ah,11011111b
       and al,11011111b
       add si,2
       loop s0
       mov ax,4c00h
       int 21h
code ends
end s

这是为什么呢?不能但不调试到最后??甲鱼哥哥???

无限幻想 发表于 2012-11-8 18:53:11

能够调试到最后才奇怪,你把sp赋值为0,还怎么出栈啊,哪有东西给你出啊。

the_sun、、 发表于 2012-11-8 21:49:13

无限幻想 发表于 2012-11-8 18:53 static/image/common/back.gif
能够调试到最后才奇怪,你把sp赋值为0,还怎么出栈啊,哪有东西给你出啊。

pop (sp=sp+2)啊...0+2=2...你自己调用一下 看看sp的值 执行第一次是从0变到2...这不是push...
assume cs:code,ds:data,ss:stack

data segment
   dw 8 dup (0)
data ends

stack segment
   db 'noitasrevnoc'
stack ends

code segment
   s:
   mov ax,data
         mov ds,ax
         mov ax,stack
         mov ss,ax
         mov sp,0
         mov si,0
         mov cx,12
         s0:
         pop ax

         and ah,11011111b
         and al,11011111b
                        mov ds:,ax
         add si,2
         loop s0
         mov ax,4c00h
         int 21h
code ends
end s

你自己试试看...不是这个问题...

张国祥 发表于 2012-11-9 01:13:11

循环12次,,不对,你是字操作,6次就完了……

张国祥 发表于 2012-11-9 01:22:39

the_sun、、 发表于 2012-11-8 21:49 static/image/common/back.gif
pop (sp=sp+2)啊...0+2=2...你自己调用一下 看看sp的值 执行第一次是从0变到2...这不是push...
assume c ...

你一楼的代码是错的,,现在除了循环次数外,,都是对的,,并且即使设为12,,也能运行过,单步过,,

张国祥 发表于 2012-11-9 01:23:59

the_sun、、 发表于 2012-11-8 21:49 static/image/common/back.gif
pop (sp=sp+2)啊...0+2=2...你自己调用一下 看看sp的值 执行第一次是从0变到2...这不是push...
assume c ...

其实,就算是push,,也能运行,sp会一直循环……当然,,程序本身就错完了

the_sun、、 发表于 2013-1-19 17:31:06

张国祥 发表于 2012-11-9 01:23 static/image/common/back.gif
其实,就算是push,,也能运行,sp会一直循环……当然,,程序本身就错完了

谢谢啊,你是好人:kiss:

张国祥 发表于 2013-1-19 21:53:56

the_sun、、 发表于 2013-1-19 17:31 static/image/common/back.gif
谢谢啊,你是好人

{:5_109:}呵呵,共同学习,共同进步
页: [1]
查看完整版本: 分析一个奇怪的汇编程序 太奇怪了!