鱼C论坛

 找回密码
 立即注册
查看: 2858|回复: 4

零基础学习汇编检测点10.5疑问

[复制链接]
发表于 2014-9-3 11:01:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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 吗?
是我哪里理解错了吗?


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-3 11:14:42 | 显示全部楼层
我知道了,不好意思, 19就是 call指令的下一个指令的地址 是 19h 。 没注意看。不好意思:funk:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-4 21:22:42 | 显示全部楼层
我是来打酱油的,顺便帮楼主顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-30 15:16:46 | 显示全部楼层
楼主怎么知道的(ss:[0])=1ah?
是根据机器码算出来的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-11 10:25:48 | 显示全部楼层
楼主这里不对吧?
call dword ptr ss:[0]                             ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令
                                                          ;(ss:[4])=cs,(ss:[6])=ip
入栈应该是                    ;(ss:[0e])=cs,(ss:[0c])=ip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 05:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表