. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点9.1的第二题  [待解决] 回复[ 17次 ]   点击[ 690次 ]  
jikeyuan1
[帖 主]   [ 发表时间:2011-02-23 12:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40
assume cs:code

data segment
 dd 12345678h
data ends

code segment
 
 start:mov ax,data
       mov ds,ax
           mov bx,0
           mov [bx],bx;为什么这儿是bx啊  是什么意思啊 这儿应该是ip的偏移啊 ?
           mov [bx+2],cs;这儿直接就是cs呢  [bx+2]不是存放cs的内容吗,
           jmp dword ptr ds:[0]
           
code ends

end start

请高手给我解释解释上面的意思啊  不懂  谢啦
jikeyuan1
[第1楼]   [ 回复时间:2011-02-23 13:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40
顶!!!高手请帮帮忙啊
gjtboa
[第2楼]   [ 回复时间:2011-02-23 18:14 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-10-09 17:53
mov [bx],bx 这里用bx是因为此时bx中的值为0000H

mov [bx+2],cs 这是因为需要取cs的值
jikeyuan1
[第3楼]   [ 回复时间:2011-02-24 23:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40
LS的朋友回答的 我不是很懂啊
mov [bx],bx;[bx]是用来存放ip的偏移的,
那我这儿写0为什么就不行呢??
masmaster
[第4楼]   [ 回复时间:2011-02-25 10:46 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
回复3楼:
不允许两个操作数都是内存单元。
oldstone
[第5楼]   [ 回复时间:2011-03-06 13:11 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2011-02-04 09:04
回复3楼:
LS的朋友回答的 我不是很懂啊
mov [bx],bx;[bx]是用来存放ip的偏移的,
那我这儿写0为什么就不行呢??
------------------
回复:
你这里要写0也是可以的,但是你必须这样写:mov [bx],word ptr 0
因为内存单元的数据可能是字节、字,或者双字。所以你你必须指明数据的长度,才能让编译程序理解。
aaa88510
[第6楼]   [ 回复时间:2011-03-19 16:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-30 15:49
回复3楼:
LS的朋友回答的 我不是很懂啊
mov [bx],bx;[bx]是用来存放ip的偏移的,
那我这儿写0为什么就不行呢??
------------------
回复:
你这里要写0也是可以的,但是你必须这样写:mov [bx],word ptr 0
因为内存单元的数据可能是字节、字,或者双字。所以你你必须指明数据的长度,才能让编译程序理解。
------------------
回复:当然不能写0,[bx]就是ds:[bx]的简写,立即数不能和段寄存器传送
happyhuan
[第7楼]   [ 回复时间:2011-03-28 11:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-02 16:20
立即数不能传送给段寄存器。比如通过ax来间接传送,但是这个题是传给内存单元,我觉得可以用的0,只是用bx可以节省一个字节。刚学汇编,还请高手来指教。
shicong
[第8楼]   [ 回复时间:2011-05-05 10:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-09 19:34
还好我是对的。
tianxing9151
[第9楼]   [ 回复时间:2011-05-12 17:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-06-23 00:14
5楼的解释比较对哟~
可以用0也可以用BX
dallas48
[第10楼]   [ 回复时间:2011-05-25 09:18 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2011-01-06 10:33
回复3楼:
LS的朋友回答的 我不是很懂啊
mov [bx],bx;[bx]是用来存放ip的偏移的,
那我这儿写0为什么就不行呢??
------------------
回复:
你这里要写0也是可以的,但是你必须这样写:mov [bx],word ptr 0
因为内存单元的数据可能是字节、字,或者双字。所以你你必须指明数据的长度,才能让编译程序理解。
------------------
回复:事实证明这位朋友是对的
hrrvn
[第11楼]   [ 回复时间:2012-01-21 00:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-21 00:50
BX不是段寄存器,这里可以用立即数给[BX]
javaimgod
[第12楼]   [ 回复时间:2012-01-25 00:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-10 21:29
5楼是正解!
我开始也没明白,直接0的话,由于是立即数传送给内存,必须要指定长度!
wzhh1986
[第13楼]   [ 回复时间:2012-05-15 18:50 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35
第一个可以填 offset start
wzhh1986
[第14楼]   [ 回复时间:2012-05-15 18:51 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35
错了,要这样才行 mov word ptr [bx],offset start
qq523192273
[第15楼]   [ 回复时间:2012-05-27 19:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2012-05-21 17:43
好像idata只能给寄存器传送数据(第3章 3.4节mov add sub指令),不知道对不对!!我也是刚学的汇编。
qq523192273
[第16楼]   [ 回复时间:2012-05-27 19:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2012-05-21 17:43
没有寄存器名的情况时传送idata要指明内存单元的长度。
qq523192273
[第17楼]   [ 回复时间:2012-05-27 19:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2012-05-21 17:43
指明的是内存单元的长度,而不是idata的长度(字节数),所以应该不能填0或者word ptr 0(第8章 8.5节指令要处理的数据有多长)
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved