(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.

相关文章:

  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-15
  • 2022-12-23
  • 2021-07-22
  • 2022-02-16
猜你喜欢
  • 2022-01-07
  • 2021-08-01
  • 2022-01-06
  • 2022-12-23
  • 2021-04-20
  • 2021-11-19
  • 2022-12-23
相关资源
相似解决方案