. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第九章检测题分析,欢迎指点  [待解决] 回复[ 22次 ]   点击[ 1645次 ]  
debugkkk
[帖 主]   [ 发表时间:2008-05-26 21:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21
有如下程序段,填写2条指令,使程序在运行中将s处的一条指令复制到s0处。 1
    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

注解:将s处的指令复制到s0处,就是将cs:offset s处的数据复制到cs:offset s0处,而si= offset s,di= offset s0,故选1

对于如下程序: 
    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
注解:题目要求指令jmp dword ptr [2]执行后,程序再次从第一条指令开始执行,即(cs)= (内存单元地址+2)=(ds:4), (ip)= (内存单元地址)=(ds:2,所以答案1和2都不对,至于3和4谁对谁错不知道,不过我把3和4分别带入后编译得到的结果表明3是正确答案,这里还请各位指点下。


    mov cx,0 
    s: mov ax,bx 
    loop s 
    以上指令序列执行后mov ax,bx被执行了多少次_____。 4
 1、 0 
 2、 256 
 3、 65535 
 4、 65536
注解:loop s执行时,先cx自减1,cx=cx-1=0-1=0+10000H-1=FFFFH,即65535,加上loop s前mov ax,bx被执行了一次,所以mov ax,bx被执行了65535+1=65536次

下列能够改变CS:IP所指位置并能通过编译的指令是______。 4
 1、 jmp short [bx] 
 2、 jne [bx] 
 3、 loop byte ptr [bx] 
 4、 jmp [bx]
注解:jmp short后应该接标号,loop 后面也是。Jne没学过,高手指点下~,jmp [bx],即CS不变,IP=ds:[bx]



对于如下程序: 
    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
注解:mov di,offset s1 和mov si,offset s3的作用是把S1处的LOOP S复制到S3处,由于mov ax,1指令的作用,ax最终值为1+2+2+2=7
mess
[第1楼]   [ 回复时间:2008-05-29 09:29 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
呵呵,题都对了网站该有提示了,把不清楚的可以拿出来讨论讨论,这样发上来可能让别人偷懒了,反而害了人家;)
debugkkk
[第2楼]   [ 回复时间:2008-05-29 22:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21
回mess :我是希望大家都能拿出自己的观点,我个人觉得,在组织观点的同时,也是个对知识进行回顾的过程
younggay
[第3楼]   [ 回复时间:2008-05-30 10:37 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
debugkkk老兄的说法确实很对,组织知识点对于知识的掌握很有作用。
不过,mess的担心一不无道理。之多以检测题没有错误提示,就是想让每个人都好好的学习,姥姥的掌握。
有些懒惰的人,可能就会过于参照你的讲解和答案了。你不杀人,而某人却因你而亡啊。
mousecarrot
[第4楼]   [ 回复时间:2008-06-18 20:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-06-13 17:02
对于如下程序: 
    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
注解:题目要求指令jmp dword ptr [2]执行后,程序再次从第一条指令开始执行,即(cs)= (内存单元地址+2)=(ds:4), (ip)= (内存单元地址)=(ds:2,所以答案1和2都不对,至于3和4谁对谁错不知道,不过我把3和4分别带入后编译得到的结果表明3是正确答案,这里还请各位指点下。
------------------
回复:
这个楼主是通过实验得知应该是seg code而不是offset code,考虑一下,这两个都表示什么呢?然后就明白了
fancx
[第5楼]   [ 回复时间:2008-10-04 15:46 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2008-08-02 09:52
SEG指令 能取得 段地址
leefox
[第6楼]   [ 回复时间:2008-10-17 22:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-01-21 11:43
下列能够改变CS:IP所指位置并能通过编译的指令是______。 4 
 1、 jmp short [bx]  
 2、 jne [bx]  
 3、 loop byte ptr [bx]  
 4、 jmp [bx] 
注解:jmp short后应该接标号,loop 后面也是。Jne没学过,高手指点下~,jmp [bx],即CS不变,IP=ds:[bx] 

此题为什么选jmp [bx] 能通过编译?为什么不加word ptr 或 dword ptr?是不是不加dword ptr就默认是dword ptr? 有人回答下吗?
sexion
[第7楼]   [ 回复时间:2008-10-21 14:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-09-03 12:36
楼上兄,[BX]能代表一个DWORD?
borisyue
[第8楼]   [ 回复时间:2008-11-02 00:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2008-10-16 23:41
对于如下程序:  
    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 
注解:mov di,offset s1 和mov si,offset s3的作用是把S1处的LOOP S复制到S3处,由于mov ax,1指令的作用,ax最终值为1+2+2+2=7

这个地方答案应该是4吧.
二个LOOP共用一个CX的.
borisyue
[第9楼]   [ 回复时间:2008-11-02 00:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2008-10-16 23:41
看错了.我说的那个题目好像是死循环.因为前后都有mov cx,3这样一直循环下去.不可能到0的,各位高手指点一下
496952514
[第10楼]   [ 回复时间:2008-11-30 19:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-24 08:49
下列能够改变CS:IP所指位置并能通过编译的指令是______。 
 1、 jmp short [bx]   
 2、 jne [bx]   
 3、 loop byte ptr [bx]   
 4、 jmp [bx]  
这题我不怎么明白,希望高手能指点一下
yinxd6112
[第11楼]   [ 回复时间:2008-12-02 11:42 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2008-11-24 18:10
楼主不厚道啊
gsyangchao
[第12楼]   [ 回复时间:2009-01-27 19:10 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2009-01-25 01:37
我认为offset code这条指令里,offset后面跟的应该是标号,而不可能是代码段的段名。。。
qtabcd
[第13楼]   [ 回复时间:2009-02-05 09:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-24 11:42
offset取偏移量的 jmp dword ptr 高位要求是段地址
mengdewan
[第14楼]   [ 回复时间:2009-03-03 18:01 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:5
注册日期:2008-12-18 16:07
1.对于指令jmp dword ptr [bx+0dh]的说法错误的是______。 
 1、  该指令能够实现段间转移。 
 2、  该指令转移的目的地址是在指令明确给出的。 
 3、  该指令转移的目的地址被存放在内存空间中。 
 4、  该指令中运用的寻址方式是寄存器相对寻址。
 这个题你们没做吗?
这个谁讲讲呀?
82356722
[第15楼]   [ 回复时间:2009-04-01 10:15 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2009-03-27 20:52
选2.。。。。。。
doctorhsly
[第16楼]   [ 回复时间:2009-04-23 15:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-07 12:40
回复:[第14楼]
------------------
我认为:
1.jmp dword ptr [bx+odh],(CS)=(内存单元地址+2),(IP)=(内存单元地址),所以是可以进行段间转移的
3.[bx+odh]这样的格式明显是内存单元中的内容
4.bx就是寄存器,再加上idata=0dH,就是寄存器相对寻址
zdpopup
[第17楼]   [ 回复时间:2009-06-26 16:38 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:10
注册日期:2009-06-18 18:17
1.对于指令jmp dword ptr [bx+0dh]的说法错误的是______。  
 1、  该指令能够实现段间转移。  
 2、  该指令转移的目的地址是在指令明确给出的。  
 3、  该指令转移的目的地址被存放在内存空间中。  
 4、  该指令中运用的寻址方式是寄存器相对寻址。
其它都对的,就这个做错.晕死人,
后来发现,这个最简单,不会汇编都会做.
第2句 指令哪里明确给出地址,这个个语文理解题啊.考
tsembrace
[第18楼]   [ 回复时间:2009-07-08 16:49 ]   [引用]   [回复]   [ top ] 
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20
同9楼疑问。
zhy_zhy
[第19楼]   [ 回复时间:2009-07-23 17:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2009-06-29 14:39
复制过去的指令是段内短转移,指令中只有位移,楼上要再去看看书哦,复制之后并不是转移到标号s处。
tsembrace
[第20楼]   [ 回复时间:2009-07-23 17:46 ]   [引用]   [回复]   [ top ] 
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20
哎~记得在第九章时候最注意学习的就是转移指令的实际含义~可应用时候还是会忽略。。。多谢楼上指点!
advancedprogrammer
[第21楼]   [ 回复时间:2009-07-29 08:55 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13
offset的功能是取得标号的偏移地址,显然不能取得段地址
yuanliangding
[第22楼]   [ 回复时间:2010-02-05 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2010-01-30 14:38
回复:[第6楼]
------------------
我也是在这里不知道。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved