检测9.1 第2题
assume cs:code,ds:datadata segment
dd 12345678h
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov ,bx ;源操作数bx为所填内容
mov ,cs ;源操作数cs为所填内容
jmp dword ptr ds:
code ends
end start
为什么 会是这个 求详细回答谢谢
高手指点下
本帖最后由 莫名其妙 于 2012-3-3 18:15 编辑
昨天回答了一个这样的问题给解答拉过来你看看
首先程序代码段开始的地方 是 cs:ip → cs:0000
但是程序的第一条指令不一定就是在cs:0000 这点一定要明白!~
(当然你会见到这样的例题 比如 mov ax,4c00hint 21h在代码段开始的地方 在程序执行的第一条指令之前)
start:mov ax, data ; 这道题里 start : 的地方就是程序的第一条指令
mov ds, ax
;0B86:000078 56 34 12 00 00 00 00-00 00 00 00 00 00 00 00这进行 data 数据进段后 内存单元中数据的存放(当然你机器上的段地址 和代码段地址数据可能跟我不一样)
mov bx, 0
;AX=0B86BX=0000CX=0026DX=0000SP=0000BP=0000SI=0000DI=0000
;DS=0B86ES=0B76SS=0B86 CS=0B87IP=000A NV UP EI PL NZ NA PO NC 这是BX等于0以后 各寄存器和个段地址的数据
( ip )
mov , (BX) ; 因为题目要求跳转后转到代码段开始的地方意思就是跳转到 CS : 0000 处 所以ds:,bx 要等于0
;0B86:000000 00 34 12 00 00 00 00-00 00 00 00 00 00 00 00 这是执行 bx=0后内存中数据的存放
mov , ( CS )
;0B86:000000 00 87 0B 00 00 00 00-00 00 00 00 00 00 00 00看内存数据的存放, 注意 87 0B 就是我的机器上当前CS段地址的值
jmp dword ptr ds:
dword ptr ds:这里是从ds段 0号偏移地址开始的 取两个字形数据
jmp dword ptr ds:这句话的意思是 取两个字形数据 低字做IP高字做CS 然后跳转过去在书本p182页9.6节写的还是比较清楚的
页:
[1]