【王爽-汇编语言】测试题不解,请大家帮忙指点,附分析过程

debugk 2008-08-22 07:22:13
对于指令jmp dword ptr [bx+0dh]的说法错误的是______。
1、 该指令能够实现段间转移。
2、 该指令转移的目的地址是在指令明确给出的。
3、 该指令转移的目的地址被存放在内存空间中。
4、 该指令中运用的寻址方式是寄存器相对寻址。

在我的机器上debug“jmp dword ptr [bx+0dh]”显示为'FF670D',运行后CS不变、IP变为 [bx+0dh]的内容,2错误。但1似乎也不对。这个指令按P169的定义是段间转移,但是理论上CS=[DS:(BX+d+2)],IP=[DS:(BX+d)],这里为什么CS不变呢?

对于如下程序:
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
编译显示3.4都能满足要求,无论数据是“dw 0,0,seg code”还是“dw 0,0,offset code”时,debug将“jmp dword ptr [bx+2]”其解析为"jmp far [bx+2]",二进制为FF6F02。
那么3和4哪个数据定义更加合理?why?


下列能够改变CS:IP所指位置并能通过编译的指令是______。4
1、 jmp short [bx]
2、 jne [bx]
3、 loop byte ptr [bx]
4、 jmp [bx]
1和4在debug中最后都被编译成"jmp [bx]",二进制形式都为"FF27"效果也一致。为什么选4?
...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BMCRNET 2008-08-25
  • 打赏
  • 举报
回复
BAYNPU汇编板块的强人!!!
BAYNPU 2008-08-22
  • 打赏
  • 举报
回复
对于指令jmp dword ptr [bx+0dh]的说法错误的是______。
1、 该指令能够实现段间转移。
2、 该指令转移的目的地址是在指令明确给出的。
3、 该指令转移的目的地址被存放在内存空间中。
4、 该指令中运用的寻址方式是寄存器相对寻址。
答:应该选择第2,这条指令没有明确给出要转移的地址,下面举个例子说明该指令已明确给出的址址:
MOV WORD PTR[BX],0
MOV WORD PTR[BX+2],1500H
JMP FAR PTR[BX];转移到1500:0
debugk 2008-08-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 BAYNPU 的回复:]
对于如下程序:
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 c…
[/Quote]

书上没有提到“seg”,只提到了“offset”。
不过学习了,谢谢你, BAYNPU
BAYNPU 2008-08-22
  • 打赏
  • 举报
回复
对于如下程序:
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
编译显示3.4都能满足要求,无论数据是“dw 0,0,seg code”还是“dw 0,0,offset code”时,debug将“jmp dword ptr [bx+2]”其解析为"jmp far [bx+2]",二进制为FF6F02。
那么3和4哪个数据定义更加合理?why?
答:应该是第3吧,第3取的是段地址,而第4取的是它偏移地址。
BAYNPU 2008-08-22
  • 打赏
  • 举报
回复
下列能够改变CS:IP所指位置并能通过编译的指令是______。4
1、 jmp short [bx]
2、 jne [bx]
3、 loop byte ptr [bx]
4、 jmp [bx]
1和4在debug中最后都被编译成"jmp [bx]",二进制形式都为"FF27"效果也一致。为什么选4?
答:JMP SHORT [BX]是一条段内转移直接寻址指令:IP--IP+8位位移量,转移范围-128--+127。
JMP [BX]是一条段内转移间接寻址指令:将一个寄存或主存单元内容送入IP寄存器,作为新的指令指针,但不修改CS 寄存器的内容。
不过在汇编语言系统中它能自动识别是段内转移直接寻址还是段内转移间接寻址,不用你来操心这个问题。
debugk 2008-08-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gyk120 的回复:]
jmp short是短转移,只支持jmp short 标号,不支持jmp short 寄存器
另外问一句,这是第二版《汇编语言》里面的东西吗?我第一版的貌似没找到
第一个应该是B吧,指令中明确给出的?DS都不清楚,就知道BX,jmp short似乎是可以实现段间转移的,这个我不怎么清楚了,回去看看第一版的再想下
[/Quote]

jmp short是短转移,只支持jmp short 标号,不支持jmp short 寄存器:这里是我搞错了。不过为什么debug下可以输入“jmp short [bx] ”并运行呢?
gyk120 2008-08-22
  • 打赏
  • 举报
回复
jmp short是短转移,只支持jmp short 标号,不支持jmp short 寄存器
另外问一句,这是第二版《汇编语言》里面的东西吗?我第一版的貌似没找到
第一个应该是B吧,指令中明确给出的?DS都不清楚,就知道BX,jmp short似乎是可以实现段间转移的,这个我不怎么清楚了,回去看看第一版的再想下

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧