|
主题 : : 有关9.2第二题的一些问题 [待解决] |
回复[ 7次 ]
点击[ 329次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-10-11 19:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-11 19:38 |
原题如下:
assume cs:code
data segment
dd 12345678h
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov [bx],_____
mov [bx+2],_____
jmp dword ptr ds:[0]
code ends
end start
补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
我原本的想法是把data的地址作为段地址,放在[bx+2]处,一个dd字符占的空间算出偏移地址放在[bx]处,所以我打算这样补充:
mov [bx],16
mov [bx+2],ax
编译出错,指出我填的第一行有错误 operand must have size
但是我这样写:
mov [bx],1234h
又能通过编译, 我又试过010h,依然不能通过编译
我的问题是:1、这道我的想法可不可行,答案我已经看过了
2、为何我直接把立即数写入内存,有的可行,有的不可行,可能我前面有点知识没学好,求解答 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-10-12 04:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
书上说了,首先要知道一个数据的地址,还要知道数据的大小。mov word ptr [bx],1234h就不会有语法错误了。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-10-12 08:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-11 19:38 |
谢谢这么晚了还给我回信息啊。
mov [bx],1234h是能够通过编译的
mov [bx],16或mov [bx],010h却不能通过编译
如果说要指定大小,那什么情况下应该指定 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-11-09 16:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-10 09:15 |
|
|
|
|
|
[第4楼]
[ 回复时间:2011-11-09 16:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-10 09:15 |
|
|
|
|
|
[第5楼]
[ 回复时间:2011-11-30 13:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:13
注册日期:2011-07-13 08:38 |
|
|
|
|
|
[第6楼]
[ 回复时间:2011-12-08 18:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-12-06 11:00 |
编译器指出的错误是:你没有指定传给内存 ds:[bx]的数据的大小。
内存ds:[bx]可以有两种意思:一个是字节,一个是字单元;所以我们必须要指出传进去的数字的性质
“mov [bx],1234h是能够通过编译的 ”
———因为:1234h明显可以看出他代表一个字单元
“mov [bx],16或mov [bx],010h却不能通过编译 ”
———因为,16可能是0016h:2比特,或者16h:1比特,编译器无法识别到底选择哪种 | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-12-08 18:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-12-06 11:00 |
|