鱼C论坛

 找回密码
 立即注册
查看: 2366|回复: 1

检测9.1 第2题

[复制链接]
发表于 2012-3-3 16:30:13 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code,ds:data

data segment
    dd 12345678h
data ends

code segment
start: mov ax,data
    mov ds,ax
    mov bx,0
    mov [bx],bx      ;源操作数bx为所填内容
    mov [bx+2],cs    ;源操作数cs为所填内容
    jmp dword ptr ds:[0]

code ends
end start
为什么 会是这个 求详细回答  谢谢
高手指点下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-3 18:13:50 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-3 18:15 编辑

昨天回答了一个这样的问题  给解答拉过来你看看

首先程序代码段开始的地方 是 cs:ip   →   cs:0000
但是程序的第一条指令不一定就是在  cs:0000      这点一定要明白!~  
(当然你会见到这样的例题   比如 mov ax,4c00h  int 21h在代码段开始的地方    在程序执行的第一条指令之前)

start:  mov ax, data   ; 这道题里   start : 的地方就是程序的第一条指令
              mov ds, ax
;0B86:0000  78 56 34 12 00 00 00 00-00 00 00 00 00 00 00 00  这进行 data 数据进段后 内存单元中数据的存放(当然你机器上的段地址 和代码段地址数据可能跟我不一样)
             mov bx, 0
;AX=0B86  BX=0000  CX=0026  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
;DS=0B86  ES=0B76  SS=0B86 CS=0B87  IP=000A   NV UP EI PL NZ NA PO NC   这是BX等于0以后 各寄存器和个段地址的数据
                                                                                                                                                ( ip )
              mov [bx], (BX  ) ;   因为题目要求跳转后转到代码段开始的地方意思就是跳转到 CS : 0000 处     所以ds:[bx],bx 要等于0
;0B86:0000  00 00 34 12 00 00 00 00-00 00 00 00 00 00 00 00   这是执行 bx=0后内存中数据的存放
              mov [bx+2], ( CS   )
;0B86:0000  00 00 87 0B 00 00 00 00-00 00 00 00 00 00 00 00  看  内存数据的存放, 注意 87 0B 就是我的机器上当前CS段地址的值
          jmp dword ptr ds:[0]

    dword ptr ds:[0]  这里是从ds段 0号偏移地址开始的 取两个字形数据
jmp dword ptr ds:[0]  这句话的意思是 取两个字形数据 低字做IP  高字做CS 然后跳转过去  在书本p182页  9.6节写的还是比较清楚的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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