鱼C论坛

 找回密码
 立即注册
查看: 1910|回复: 3

检测点10.5

[复制链接]
发表于 2013-10-28 17:23:39 | 显示全部楼层 |阅读模式
1鱼币
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov word ptr ss:[0],offset s
mov ss:[2],cs
call dword ptr ss:[0]
nop
s: mov ax,offset s
sub ax,ss:[0cH]
mov bx,cs
sub bx,ss:[0eH]
mov ax,4c00h
int 21h
code ends
end start
分析下,最后ax和bx的值各为多少?需要详细的分析过程。

最佳答案

查看完整内容

assume cs:code stack segment dw 8 dup(0) stack ends code segment start: mov ax,stack ;; 栈段分配 16 个字节,sp = 0010 H mov ss,ax mov sp,16 mov word ptr ss:[0],offset s ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 17:23:40 | 显示全部楼层
本帖最后由 LinuxDeepin 于 2013-10-28 20:48 编辑

assume cs:code

        stack segment
                dw 8 dup(0)
        stack ends
        
        code segment
                start:
                        mov ax,stack                                 ;; 栈段分配 16 个字节,sp = 0010 H
                        mov ss,ax
                        mov sp,16
                        
                        mov word ptr ss:[0],offset s         ;; s 标号物理地址写入 ss:[0] 处
                        mov ss:[2],cs
                        
                        call dword ptr ss:[0]                     ;; 跳转到 ss:[0] 指定的物理地址处,                                                                                                                                        并将下一条指令的物理地址入栈, sp-4 = 000c H

                        nop                                               ;; nop 空指令,占用一个字节
                        
                s:      mov ax,offset s                             ;; s 标号偏移地址写入 ax 寄存器,
                        sub ax,ss:[0cH]                              ;; ss:[0cH] call 下一条代码的偏移地址与 ax 相减             ax = 0001 H
                        
                        mov bx,cs                                      ;; cs 段地址写入 bx 寄存器
                        sub bx,ss:[0eH]                              ;; ss:[0eH] call 下一条代码的段地址与 bx 相减                bx = 0000 H
                        
                        mov ax,4c00H
                        int 21H
        code ends
        
end start



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

使用道具 举报

发表于 2013-10-28 20:38:12 | 显示全部楼层
本帖最后由 福禄娃娃 于 2013-10-28 20:39 编辑
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: 
mov ax,stack        ;ax=14b6H
mov ss,ax           ;ss=14b6H
mov sp,16                        ;sp=10H
mov word ptr ss:[0],offset s    ;ss:[0]=001aH
mov ss:[2],cs        ;ss:[2]=14b7H
call dword ptr ss:[0]                ;调用标号s处代码
nop
s: mov ax,offset s        ;ax=001aH
sub ax,ss:[0cH]                ;ax=0019-001a=0001H
mov bx,cs                                        ;bx=14b7H
sub bx,ss:[0eH]                ;bx=14b7-14b7=0H
mov ax,4c00h                                                
int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-28 22:28:09 | 显示全部楼层
嗯,版主给力,但是“mov word ptr ss:[0],offset s    ;; s 标号物理地址写入 ss:[0] 处   mov ss:[2],cs   ”似乎对于结果没有实质性的作用?真正起作用是从call开始的。
                             
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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