王爽汇编 检测点10.5

  (1)下面的程序执行后,ax 中的数值是多少?

 1 assume cs:code
 2 stack segment
 3     dw 8 dup (0)
 4 stack ends
 5 code segment
 6  start:    mov ax,stack
 7         mov ss,ax
 8         mov sp,16
 9         mov ds,ax
10         mov ax,0
11         call word ptr ds:[0]
12         inc ax
13         inc ax
14         inc ax
15         mov ax,4c00h
16         int 21h
17 code ends
18 end start

答案: ax=3

   解析:stack定义16字节的空间,其中都是0.然后ss,sp指向站定也就是stack:[10h],然后让数据段也指向stack空间。也就是说stack段即是栈段也是数据段

      call word ptr ds:[0]读取指令到执行控制器,然后IP地址指向了下一行指令。(inc ax)然后执行call指令。然后push IP。先sp=sp-2,使sp指向了ss:[0eh]。然后这里存储着下一行的偏移地址。

      执行 jmp word ptr 内存单元地址。 此时就执行到了下一行。(inc ax) 所以最后ax=3.

posted @ 2018-03-10 20:53  Tri0mphe  阅读(917)  评论(0编辑  收藏  举报