汇编检测点10.5
检测点10.5的第一小题,实在想不通ax为3是怎么得到的,请懂的朋友们解答一下,帮我解惑!谢谢。:lol call word ptr 这条命令相当于执行push ip,jmp word ptr 内存单元地址所以call word ptr ds:这条命令相当于执行push ip,jmp word ptr ds:,push ip把下一行的inc ax的ip地址放入到栈中,于是SP-2,word ptr ds:的内容就是inc ax的IP地址,然后在执行jmp,就跳回去了 夏洛 发表于 2012-3-14 14:32 static/image/common/back.gif
call word ptr 这条命令相当于执行push ip,jmp word ptr 内存单元地址
所以call word ptr ds:这条命 ...
这答案是容易让人明白些 没题目? 帮顶。{:5_109:} 本帖最后由 狂潮丶 于 2013-8-14 16:23 编辑
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: 关键就在这里call word 是近转移那么就是把call指令后的第一个字节的ip压入栈也就是inc ax的ip。压入之后栈顶变为0eh,那么这句代码call word ptr ds:就是跳转到inc ax处然后执行三次inc ax程序结束!
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
end start assume cs:code
stack segment ;定义栈段
dw 8 dup (0) ;16个字节
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16 ;栈初始化
mov ds,ax ;数据段和栈段是同一段空间
mov ax,0 ;ax=0
call word ptr ds:;把下一条指令的cs和ip压入栈空间sp=0eh cs入栈 然后ip入栈
;call后把cs 和ip还原 等同于call到下一条指令执行
inc ax ;ax=1
inc ax ;ax=2
inc ax ;ax=3
mov ax,4c00h
int21h ;程序正常结束ax的值为3 真的看得一脸郁闷
页:
[1]