|
主题 : : 检测点9.1的第二题 [待解决] |
回复[ 17次 ]
点击[ 690次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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
请高手给我解释解释上面的意思啊 不懂 谢啦 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-02-23 13:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40 |
|
|
|
|
|
[第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的值 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-02-24 23:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-07 15:40 |
LS的朋友回答的 我不是很懂啊
mov [bx],bx;[bx]是用来存放ip的偏移的,
那我这儿写0为什么就不行呢?? | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-02-25 10:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第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
因为内存单元的数据可能是字节、字,或者双字。所以你你必须指明数据的长度,才能让编译程序理解。 | | |
|
|
|
|
[第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]的简写,立即数不能和段寄存器传送 | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-03-28 11:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-02 16:20 |
立即数不能传送给段寄存器。比如通过ax来间接传送,但是这个题是传给内存单元,我觉得可以用的0,只是用bx可以节省一个字节。刚学汇编,还请高手来指教。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-05-05 10:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2011-04-09 19:34 |
|
|
|
|
|
[第9楼]
[ 回复时间:2011-05-12 17:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-06-23 00:14 |
|
|
|
|
|
[第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
因为内存单元的数据可能是字节、字,或者双字。所以你你必须指明数据的长度,才能让编译程序理解。
------------------
回复:事实证明这位朋友是对的 | | |
|
|
|
|
[第11楼]
[ 回复时间:2012-01-21 00:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-21 00:50 |
|
|
|
|
|
[第12楼]
[ 回复时间:2012-01-25 00:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-10 21:29 |
5楼是正解!
我开始也没明白,直接0的话,由于是立即数传送给内存,必须要指定长度! | | |
|
|
|
|
[第13楼]
[ 回复时间:2012-05-15 18:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35 |
|
|
|
|
|
[第14楼]
[ 回复时间:2012-05-15 18:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35 |
错了,要这样才行 mov word ptr [bx],offset start | | |
|
|
|
|
[第15楼]
[ 回复时间:2012-05-27 19:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2012-05-21 17:43 |
好像idata只能给寄存器传送数据(第3章 3.4节mov add sub指令),不知道对不对!!我也是刚学的汇编。 | | |
|
|
|
|
[第16楼]
[ 回复时间:2012-05-27 19:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2012-05-21 17:43 |
没有寄存器名的情况时传送idata要指明内存单元的长度。 | | |
|
|
|
|
[第17楼]
[ 回复时间:2012-05-27 19:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2012-05-21 17:43 |
指明的是内存单元的长度,而不是idata的长度(字节数),所以应该不能填0或者word ptr 0(第8章 8.5节指令要处理的数据有多长) | | |