马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
零基础学习汇编检测点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:[0],offset s ;(ss:[0])=1ah
mov ss:[2],cs ;(ss:[2])=cs
call dword ptr ss:[0] ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令
;(ss:[4])=cs,(ss:[6])=ip
nop
s: mov ax,offset s ;ax=1ah
sub ax,ss:[0ch] ;ax=1ah-(ss:[0ch])=1ah-19h=1
mov bx,cs ;bx=cs=0c5bh
sub bx,ss:[0eh] ;bx=cs-cs=0
mov ax,4c00h
int 21h
codesg ends
end start
-----------------------------------------------------------------
C:\DOCUME~1\ADMINI~1>debug jc10-5.exe -u 0C5B:0000 B85A0C MOV AX,0C5A 0C5B:0003 8ED0 MOV SS,AX 0C5B:0005 BC1000 MOV SP,0010 0C5B:0008 36 SS: 0C5B:0009 C70600001A00 MOV WORD PTR [0000],001A 0C5B:000F 36 SS: 0C5B:0010 8C0E0200 MOV [0002],CS 0C5B:0014 36 SS: 0C5B:0015 FF1E0000 CALL FAR [0000] 0C5B:0019 90 NOP 0C5B:001A B81A00 MOV AX,001A 0C5B:001D 36 SS: 0C5B:001E 2B060C00 SUB AX,[000C] -u 0C5B:0022 8CCB MOV BX,CS 0C5B:0024 36 SS: 0C5B:0025 2B1E0E00 SUB BX,[000E] 0C5B:0029 B8004C MOV AX,4C00
看debug知道 s的地址是1ah,那么ss:[0]也就是1ah没问。ss:[2]=cs也没问题。 call dword ptr ss:[0]的时候问题来了,应该是push cs -- ss:[04]的位置,push ip --ss:[0]吗? 怎么会是ss:[6]呢? 答案中的ip=19h怎么来的? 我认为应是 push ip 应该就是 push 1ah吗?
sub ax,ss:[0ch] ;ax=1ah-(ss:[0ch])=1ah-19h=1 应该是 ax = 1ah-1ah = 0 吗? 是我哪里理解错了吗?
|