|
主题 : : 对检测点9.1的一个疑问 [待解决] |
回复[ 10次 ]
点击[ 890次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-11-30 15:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-11-15 18:00 |
1)若要使jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?
完整程序如下:
assume cs:code,ds:data
data segment
db 0,0,0
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1] ;段内间接转移
code ends
end start
为什么db 0,0,0 只定义了3个0 而不是4 个 | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-11-30 16:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-11-15 18:00 |
data段内容 为 0 0 0的话 word ptr [bx+1]指向的是第 2 个 0, 代表 值是 第 2 和第 3 个0
(第2个0和第3个0合起来既是0000h)那说明第一个字节 和第4 个字节是什么内容并不重要 我这样说对么?(那摸第一个字节为什么是0) | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-11-30 16:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
定义3个数据是0,是实现程序必要的最少个数。当然,你可以定义4个甚至更多。只要你在应该的位置上定义的数据正确,都不影响结果。其实,我们只要确定bx+1处的一个word型数据的值就行了,其他位置上的数据是什么对这道题来说没有什么影响的。
楼主思考一下呢? | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-11-30 16:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
|
|
|
|
|
[第4楼]
[ 回复时间:2007-11-30 16:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
那摸第一个字节为什么是0
=======
他愿意那么写的,咱管不着!既然那个位置对这道题来说没有任何意义,就不要钻牛角尖了!他要是写成1,2或者3什么,你还问:为什么写成1了啊?呵呵。
你的理解是正确的。那些问题已经没意义了。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-12-01 16:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-11-15 18:00 |
|
|
|
|
|
[第6楼]
[ 回复时间:2008-08-11 12:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-11 12:40 |
db 0 就可以了,后面自动补齐为16个0
我用的就是 db 0就可以啊。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-02-10 09:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41 |
只要理解了问题的本质就不难:
本题目的是让cs:ip 指向code段的第一条语句
而[bx+1]即ds:[bx+1]在指令jmp word ptr [bx+1]中的含义是转移的目的偏移地址。
要使jmp 指令执行后cs:ip指向程序的第一条指令即使ds:[bx+1]里面所存放的ip值为代码段的起始偏移地址。起始偏移地址为0,那当然应该存放0了。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2009-02-21 14:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-19 10:20 |
为什么 db 0 后,后面的自动补齐为16个0,想不明白 | | |
|
|
|
|
[第9楼]
[ 回复时间:2009-03-05 10:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-11-12 19:53 |
db 0 就可以了,后面自动补齐为16个0
我用的就是 db 0就可以啊。
------------------
回复:同楼上,为什么要自动补齐16个0呀??
有人实验过吗? | | |
|
|
|
|
[第10楼]
[ 回复时间:2009-03-12 08:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-04 17:25 |
db 0 就可以了,后面自动补齐为16个0
我用的就是 db 0就可以啊。
------------------
回复:同楼上,为什么要自动补齐16个0呀??
有人实验过吗?
------------------
回复:定义db 0看上去只有一个字节,实际上在内存中占用16个字节(前几章有个计算实际占用内存大小的公式可以验证)。对于本题来讲,只要第1位(从0算起)和第2位为0即满足要求。 | | |