铛铛 发表于 2017-8-9 13:17:00

关于检测点9.1的讨论

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

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
code ends
end start
解题:
jmp word ptr    ;设置偏移地址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
才是正确的答案。
个人观点,不喜勿喷,可以讨论

铛铛 发表于 2017-8-9 14:16:41

明白了,确实是db 0,0,0

铛铛 发表于 2017-8-9 14:17:15

铛铛 发表于 2017-8-9 14:16
明白了,确实是db 0,0,0

因为jmp跳转的应该是本段的偏移地址。 那么第一条指令应该是0000

写代码 发表于 2018-2-6 11:39:33

一个段的偏移地址一定是从0000开始吗 楼主

851248662 发表于 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

code ends

end start

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



答案①db 3 dup (0)

答案②dw 2 dup (0)

答案③dd 0

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

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


页: [1]
查看完整版本: 关于检测点9.1的讨论