|
主题 : : 问题3.2的困惑(可以直接传数据到某一个内存地址吗?) [待解决] |
回复[ 8次 ]
点击[ 531次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-07-18 23:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
问题3.2中有下面几个指令
MOV BX,1000H
MOV DS,BX
MOV [0],AL
对于MOV [0],AL我感到很困惑,据我所知,是不能将数据移入一个内存地址的啊。而且别的汇编书本是这么说的。我也写了一段汇编程序进行了验证。结果编译的时候,出现了错误:提示不能直接使用内存的。为什么这本书上面说可以呢? | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-07-19 09:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
实验:
C:\DOCUME~1\ADMINI~1>debug
-a
0D03:0100 mov bx,1000
0D03:0103 mov ds,bx
0D03:0105 mov [0],al
0D03:0108
-
证明代码没问题。
答案能在书中找到。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-09-22 05:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-30 19:10 |
代码是没有问题的,嗯,会不会是你CS:IP所指向的是ROM,只能读不能写,但是也最多是没的反应啊,也不会出错提示吧 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-10-29 14:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-27 15:29 |
你可以记错了,mov指令不能实现内存与内存之间的互传 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-12-02 19:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-02 00:12 |
经过试验是可以的,你错的应该是al,应该改回ax,【0】表示的是字节地址,有16位,二al有8位,明显不可以传 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-12-07 22:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-06 09:12 |
mov bx,1000 数据传给通用寄存器
mov ds,bx 通用寄存器传给数据段地址寄存器
mov [0],al 通用寄存器低8位,传给内存。
都是可以传的啊。别的书上面应该说的是,数据不能直接传给内存吧?
这个是间接传送。没有问题。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-12-15 16:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-07 16:15 |
|
|
|
|
|
[第7楼]
[ 回复时间:2010-12-15 16:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-07 16:15 |
mov [0],al 通用寄存器低8位,传给内存。
这句编译是不会错好像,但执行的时候CPU把[0]是当做一个数字0看待,而不是一个地址。所以需要加上DS: 这些书上有 大家意下如何 | | |
|
|
|
|
[第8楼]
[ 回复时间:2010-12-15 16:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-07 16:15 |
|