着火番茄 发表于 2011-8-12 16:01:10

检测9.1的问题

本帖最后由 着火番茄 于 2011-8-13 09:13 编辑

(2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。

完整程序如下:
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为所填内容
    mov ,cs    ;源操作数cs为所填内容
    jmp dword ptr ds:

code ends
end start


那里为什么填CS?求分析,,不是很明白

parbbo 发表于 2011-8-12 16:08:31

这个考察jmp从内存地址中取到需要跳转的地址,jmp dword ptr ds:在本例中是取data段中的偏移为0的双字节,低字中应该存入start标号所执行的指令地址,那么高字中必然要存入cs段地址,构成一个段间转移。

着火番茄 发表于 2011-8-13 09:13:25

parbbo 发表于 2011-8-12 16:08 static/image/common/back.gif
这个考察jmp从内存地址中取到需要跳转的地址,jmp dword ptr ds:在本例中是取data段中的偏移为0的双字节 ...

多谢啦,原来是我的段间转移没弄懂,所以不明白,{:5_107:}
现在懂了,原来是:低地址为偏移地址,高地址为段地址,才能实现段间转移{:5_95:}

着火番茄 发表于 2011-8-13 10:56:07

parbbo 发表于 2011-8-12 16:08 static/image/common/back.gif
这个考察jmp从内存地址中取到需要跳转的地址,jmp dword ptr ds:在本例中是取data段中的偏移为0的双字节 ...

再来问你9.2的问题http://www.fishc.com/uploads/allimg/110605/1_110605005836_1.jpg
http://www.fishc.com/uploads/allimg/110605/1_110605005858_1.jpg
从标号s处开始所要填写的四条指令依次如下:
第一条指令:mov cl,第二条指令:mov ch,0第三条指令:jcxz ok第四条指令:inc bx
首先题目就闷闷的,不是很懂
看了答案更是晕了{:5_104:}

着火番茄 发表于 2011-8-13 11:13:53

parbbo 发表于 2011-8-12 16:08 static/image/common/back.gif
这个考察jmp从内存地址中取到需要跳转的地址,jmp dword ptr ds:在本例中是取data段中的偏移为0的双字节 ...

额 不好意思 我弄懂了{:5_97:}
页: [1]
查看完整版本: 检测9.1的问题