SunJoy 发表于 2014-9-3 11:01:04

零基础学习汇编检测点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 吗? 是我哪里理解错了吗?

SunJoy 发表于 2014-9-3 11:14:42

我知道了,不好意思, 19就是 call指令的下一个指令的地址 是 19h 。 没注意看。不好意思:funk:

ghuibin 发表于 2014-9-4 21:22:42

{:5_107:}我是来打酱油的,顺便帮楼主顶一下

zhangleitj 发表于 2014-10-30 15:16:46

楼主怎么知道的(ss:)=1ah?
是根据机器码算出来的吗?

纸船 发表于 2015-3-11 10:25:48

楼主这里不对吧?
call dword ptr ss:                           ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令
                                                          ;(ss:)=cs,(ss:)=ip
入栈应该是                  ;(ss:)=cs,(ss:)=ip
页: [1]
查看完整版本: 零基础学习汇编检测点10.5疑问