鱼C论坛

 找回密码
 立即注册
查看: 622|回复: 4

[技术交流] 关于检测点9.1的讨论

[复制链接]
最佳答案
1 
发表于 2017-8-9 13:17:00 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
看了好几个帖子,它们发的答案都与我想的不一样。
也不知道是我错了还是他们的错了。
下面我来说说我的答案。

assume cs:code
data segment
   ?????(书上说让咱们在这里添数据,让jmp指令跳转到第一条指令,也就是(mov ax, data))
data ends
code segment
start:mov ax, data      (这个是第一条指令)
      mov ds, ax
      mov bx, 0
      jmp word ptr [bx + 1]
code ends
end start
解题:
jmp word ptr [bx + 1]   ;设置偏移地址1位置开始的两个字节型地址的值为ip
那么data里必须得有三个字节。
先写db 0,0,0
这个就是好几个人的答案。
但是他们似乎忘记了两件事情:
1、系统分配的段,最少是16个字节。
2、如果data的值是0,就永远不会让jmp指令转移到第一条指令。

如果段的大小最小是16,而且从1开始,那么下标1的位置就应该是15。

0 1 2 3 4 5 6 7 8 9 A B C D E F    1~f的下一个下标需要跳15次,所以值应该是15

所以db 0,15,0
或者db 0,Fh,0
才是正确的答案。
个人观点,不喜勿喷,可以讨论
最佳答案
1 
 楼主| 发表于 2017-8-9 14:16:41 | 显示全部楼层
明白了,确实是db 0,0,0  
最佳答案
1 
 楼主| 发表于 2017-8-9 14:17:15 | 显示全部楼层
铛铛 发表于 2017-8-9 14:16
明白了,确实是db 0,0,0

因为jmp跳转的应该是本段的偏移地址。 那么第一条指令应该是0000
最佳答案
0 
发表于 2018-2-6 11:39:33 | 显示全部楼层
一个段的偏移地址一定是从0000开始吗 楼主
最佳答案
0 
发表于 2018-2-14 14:15:48 | 显示全部楼层
检测点9.1

(1)程序如下。

assume cs:code

data segment

   dw 2 dup (0)

data ends

code segment

  start: mov ax,dtat

         mov ds,ax

         mov bx,0

         jmp word ptr [bx+1]

code ends

end start

若要使jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?



答案①db 3 dup (0)

答案②dw 2 dup (0)

答案③dd 0

jmp word ptr [bx+1]为段内转移,要CS:IP指向程序的第一条指令,应设置ds:[bx+1]的字单元(2个字节)存放数据应为0,则(ip)=ds:[bx+1]=0

简单来说就是,只要ds:[bx+1]起始地址的两个字节为0就可以了


*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号 )

GMT+8, 2018-7-18 07:22

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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