汇编语言转移地址在内存中的call指令

转移地址在内存中的call指令有两种格式
(1) call word ptr 内存单元地址
用汇编语法来解释此种格式的call指令,CPU执行“call word ptr内存单元地址”时,相当于进行:

push IP
jmp dword ptr 内存单元地址

比如,下面的指令:

mov sp,10h
mov ax,0123h
mov ds:[0],ax
call word ptr ds:[0]

执行后
(IP)= 0123h, (sp) = 0Eh

(2) call dword ptr 内存单元地址
用汇编语法来解释此种格式的call指令,则:
push CS push IP jmp dword ptr 内存单元地址,相当于:

push CS
push IP
jmp dword ptr 内存单元地址

比如,下面的指令:

mov sp,10h 
mov ax,0123h 
mov ds:[0],ax 
mov word ptr ds:[2],0 
call dword ptr ds:[0]

执行后(CS)=0, (IP)=0123h, (sp)=0Ch
问题

(1)下面的程序执行后,ax中的数值为多少?
(用call指令原理分析,不要用debug执行,中断会导致结果不一致)

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:[0eH]
    inc ax
    inc ax
    inc ax
    
    mov ax, 4c00h
    int 21h
code ends
end start

ax中的值为3


发布日期:

所属分类: 编程 标签:  


没有相关文章!