零基础学习汇编检测点10.5疑问
零基础学习汇编检测点10.5疑问如题:
assume cs:codesg
stack segment
dw 8 dup(0)
stack ends
codesg segment
start:
mov ax,stack
mov ss,ax
mov sp,10h
mov word ptr ss:,offset s ;(ss:)=1ah
mov ss:,cs ;(ss:)=cs
call dword ptr ss: ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令
;(ss:)=cs,(ss:)=ip
nop
s:mov ax,offset s ;ax=1ah
sub ax,ss: ;ax=1ah-(ss:)=1ah-19h=1
mov bx,cs ;bx=cs=0c5bh
sub bx,ss: ;bx=cs-cs=0
mov ax,4c00h
int 21h
codesg ends
end start
-----------------------------------------------------------------
C:\DOCUME~1\ADMINI~1>debug jc10-5.exe-u0C5B:0000 B85A0C MOV AX,0C5A0C5B:0003 8ED0 MOV SS,AX0C5B:0005 BC1000 MOV SP,00100C5B:0008 36 SS:0C5B:0009 C70600001A00MOV WORD PTR ,001A0C5B:000F 36 SS:0C5B:0010 8C0E0200 MOV ,CS0C5B:0014 36 SS:0C5B:0015 FF1E0000 CALL FAR 0C5B:0019 90 NOP0C5B:001A B81A00 MOV AX,001A0C5B:001D 36 SS:0C5B:001E 2B060C00 SUB AX,-u0C5B:0022 8CCB MOV BX,CS0C5B:0024 36 SS:0C5B:0025 2B1E0E00 SUB BX,0C5B:0029 B8004C MOV AX,4C00
看debug知道 s的地址是1ah,那么ss:也就是1ah没问。ss:=cs也没问题。call dword ptr ss:的时候问题来了,应该是push cs -- ss:的位置,push ip --ss:吗? 怎么会是ss:呢?答案中的ip=19h怎么来的? 我认为应是 push ip 应该就是push 1ah吗?
sub ax,ss: ;ax=1ah-(ss:)=1ah-19h=1应该是ax = 1ah-1ah = 0 吗? 是我哪里理解错了吗?
我知道了,不好意思, 19就是 call指令的下一个指令的地址 是 19h 。 没注意看。不好意思:funk: {:5_107:}我是来打酱油的,顺便帮楼主顶一下 楼主怎么知道的(ss:)=1ah?
是根据机器码算出来的吗? 楼主这里不对吧?
call dword ptr ss: ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令
;(ss:)=cs,(ss:)=ip
入栈应该是 ;(ss:)=cs,(ss:)=ip
页:
[1]