关于王爽老师检测点10.5不明白,
(1)下面的程序执行后,ax中的数值为多少?assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
end start
这里设置了很多的0,后面用AX把栈段跟数据段设置成同一个,这段是设置的那些0吧,到后面, call word ptr ds:这里,我不太明白ds:这个指向的是哪里,其实都比较乱,希望大神详细讲解一下,十分感谢 最终ax = 3
=================
call word ptr ds:
word表示字单位转移(2字节),call指令改变IP的值。
代码跳转到inc那里,inc ax三次,于是结果为3 首先,取call指令后,第一件事是将ip指向下一条要执行的指令,由于前期将DS和STACK做了关联,此时DS指向的是栈段的低地址,那么call ds:0eh就相当于跳转到stack:14这样一个位置,即取到了压栈之后的IP值,而此时IP值正好就是inc ax的偏移地址,那么理所当然是执行了第一个inc ax指令,往下依次再执行两次,就得到了ax=3 开始 ds:处存放的是00,但执行到“call word ptr ds:”,首先push ip ,此时的 ip 是值是11h,入栈,因此 ss:的值是11h,而ss栈与数据ds是相关联的,故ds:与ss:值一样是11h,故“call word ptr ds:”命令就是跳转至11h处,即inc ax处,因上面“mov ax,0”,故最终ax=3
页:
[1]