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