|
主题 : : 第9章检测题 [待解决] |
回复[ 9次 ]
点击[ 1080次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-11-25 14:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-09-30 21:53 |
对于指令jmp dword ptr [bx+0dh]的说法错误的是__2____。
1、 该指令能够实现段间转移。
2、 该指令转移的目的地址是在指令明确给出的。
3、 该指令转移的目的地址被存放在内存空间中。
4、 该指令中运用的寻址方式是寄存器相对寻址。
对于如下程序:
assume cs:code
data segment
?
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp dword ptr [bx+2]
code ends
end start
若在指令jmp dword ptr [bx+2]执行后,要使程序再次从第一条指令开始执行,下列对data段中的数据的定义更合理的是___3___。
1、 dd 0,0,0
2、 dw 0,0,0
3、 dw 0,0,seg code
4、 dw 0,0,offset code
有如下程序段,填写2条指令,使程序在运行中将s处的一条指令复制到s0处。 3
assume segment
code segment
s: mov ax,bx
mov si,offset s
mov di,offset s0
_______________
_______________
s0: nop
nop
code ends
end s
1、 mov ax,cs:[si]
mov cs:[di],ax
2、 mov ax,cs:[di]
mov cs:[si],ax
3、 mov ax,[si]
mov [di],ax
4、 mov ax,ds:[di]
mov ds:[si],ax
mov cx,0
s: mov ax,bx
loop s
以上指令序列执行后mov ax,bx被执行了多少次___1__。
1、 0
2、 256
3、 65535
4、 65536
mov ax,2
mov cx,3
s: add ax,2
s1:loop s
mov di,offset s1
mov si,offset s3
mov ax,cs:[di]
mov cs:[si],ax
mov ax,1
mov cx,3
s2: add ax,2
s3: nop
nop
所有指令执行完后ax的值为___2__。
1、 15
2、 7
3、 11
4、 3
测试完毕!答对3道题目!本章节测试没有通过,建议对本章进一步学习、牢固。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-11-25 16:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
有如下程序段,填写2条指令,使程序在运行中将s处的一条指令复制到s0处。 3
assume segment
code segment
s: mov ax,bx
mov si,offset s
mov di,offset s0
_______________
_______________
s0: nop
nop
code ends
end s
1、 mov ax,cs:[si]
mov cs:[di],ax
2、 mov ax,cs:[di]
mov cs:[si],ax
3、 mov ax,[si]
mov [di],ax
4、 mov ax,ds:[di]
mov ds:[si],ax
===================================
提示:注意你的段地址应该是什么??还有第一句 “assume segment”是楼主不小心写错了吧?!!
mov cx,0
s: mov ax,bx
loop s
以上指令序列执行后mov ax,bx被执行了多少次___1__。
1、 0
2、 256
3、 65535
4、 65536
===========================
提示:对loop指令的执行过程有待进一步了解和掌握,看看书吧。要仔细!! | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-11-28 20:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-09-30 21:53 |
首先谢谢fishboy的回复.
1.检测题是我复制下来的,“assume segment”不是楼主不小心写错了!! !
2.书上第172页9.8节:loop指令
loop指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址,.对IP的修改范围都为:-128~127.
...
如果(cx)=0,什么也不做...
确实不理解,请高手指点. | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-11-29 16:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:19
信誉值:0
注册日期:2007-07-05 17:25 |
这个题和LOOP指令的执行原理有关系。
loop指令是先把CX寄存器的值减1然后再判断是否是0。如果cx是0再减1不就成-1了,-1的补码是0xFFFF了。楼主现在知道了吧。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-12-05 06:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-09-30 21:53 |
谢谢zysong.
书上P93写得很清楚,不过确实没太理解,经高手点拨,终于开窍,感觉也上了一个层次.
另外,这个道理好像和stack也有相似的地方.请参阅P56.
有意思.
提示:对loop指令的执行过程有待进一步了解和掌握,看看书吧。要仔细!!
============================================================
再次谢谢fishboy,
不过如果不是zysong点破这层窗户纸的话,再看100遍恐怕也还是不理解. | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-03-27 19:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-02 21:51 |
3、 dw 0,0,seg code
4、 dw 0,0,offset code
这两个有点不明白???请教高手 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-03-28 10:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:45
信誉值:0
注册日期:2007-05-05 09:01 |
SEG 是取得标号的段地址值。
offset 是取得标号的偏移地址 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-03-28 11:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-02 21:51 |
SEG 是取得标号的段地址值。
offset 是取得标号的偏移地址
------------------
回复:thanks 终于明白了这道题 | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-04-14 20:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33 |
唉,真晕,知道loop会把0-1以后进行判断,结果却忘了loop为短转移了,结果选了个65536,真是……看样子要很细心才行…… | | |
|
|
|
|
[第9楼]
[ 回复时间:2010-02-05 17:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:1
注册日期:2010-01-30 14:38 |
回复:[第8楼]
------------------
这个想法是错的。
移转移是指令的移动位移,不是可以移多少次。 | | |