. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  9.1第二题的疑问  [待解决] 回复[ 7次 ]   点击[ 475次 ]  
oddx
[帖 主] [ 发表时间:2011-06-13 07:36 ] 
荣誉值:3
信誉值:0
注册日期:2010-08-24 03:46
检测点9.1(第170页)

----------------------

 

(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

 

;解题理由:为了使IP的值经跳转后变为0,则需保证ds:[bx+1]处的字型单元数据为0000H,

;所以定义3个字节型数据0就符合“应该”的要求

 

 

(2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。

 

完整程序如下:

assume cs:code,ds:data

 

data segment

    dd 12345678h

data ends

 

code segment

start:  mov ax,data

    mov ds,ax

    mov bx,0

    mov [bx],bx      ;源操作数bx为所填内容

    mov [bx+2],cs    ;源操作数cs为所填内容

    jmp dword ptr ds:[0]

 

code ends

end start

 

; 我的问题是 数据段里定义的是双字啊。

;mov ax,data  双字就是32字节,为什么可以送入到ax  ,ax不是才16位的吗?

这样不会错误吗?

希望大家指点一下啊,先谢过了啊。
walykyy
[第7楼] [ 回复时间:2012-07-23 10:19 ] 
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36
我认为(1)db 最好吧,dw 定义的是字,jmp word ptr [bx+1] 很明显是从第2个字节开始算的
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved