f393 发表于 2017-7-20 13:30:25

奇怪的事情

本帖最后由 f393 于 2017-7-20 17:05 编辑

问题10.5中,第二小题。题目是:“下列程序执行后,ax和bx中的数值为多少?”
给的代码:
assume cs:code

data segment

      dw 8 dup (0)      ;定义8个0

data ends

code segment

start: mov ax,data
       mov ss,ax         ;定义data段为栈段
       mov sp,16          ;将栈顶指针指向ss:16

       mov word ptr ss:,offset s       ;将标号s的偏移地址(IP)放入内存地址ss:0处(字形数据)
       mov ss:,cs                  ;将(cs)放入内存地址ss:2处(字形数据)
       call dword ptr ss:         ;跳转到((ss)*10+2):((ss)*10+0)       [(cs):(标号s的偏移地址)]

          nop      ;无意义

s:    mov ax,offset s
      sub ax,ss:      ;(ax)=标号s的偏移地址      (ax)=(ax)-((ss)*10+CH)
      mov bx,cs
      sub bx,ss:      ;(bx)=(cs)      (bx)=(bx)-((ss)*10+EH)

      mov ax,4C00H
      int 21H                   ;程序返回

code ends

end start
按照我的推论来说,两次的入栈都没有影响到ss:cH和ss:eH,那么ax就等于标号s的偏移地址,bx等于cs的值。
然而……

f393 发表于 2017-7-20 13:36:51

为什么呢?

13960672142 发表于 2017-7-20 14:24:47

call语句会入栈 ss:和ss:是call语句入栈的数据

f393 发表于 2017-7-20 14:33:01

那么,为什么会写入那么多数据

13960672142 发表于 2017-7-20 14:56:28

不清楚

f393 发表于 2017-7-20 17:04:36

em……{:10_269:}
页: [1]
查看完整版本: 奇怪的事情