|
主题 : : mov指令问题 [已解决] |
回复[ 10次 ]
点击[ 382次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-11-13 21:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2007-11-13 21:08 |
如果把数据段(假设名称为data)地址赋给DS寄存器,要
mov ax,data
mov ds,ax
为什么不能直接写成:
mov ds,data呢?? | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-11-13 21:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:6
注册日期:2007-11-13 20:16 |
地址也是一个二进制数,数值不能直接赋给段寄存器的,所以需要一个通用寄存器中转.
这是我个人的解释,不对的话请高手纠正下! | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-11-13 22:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2007-11-13 21:08 |
谢谢你的解答!
假如数据data存放在si中,如果要打si中的数mov到di中,
为什么要用
mov al,[si]
mov [di],al
而不用
mov di,si
呢?
我新手来的,上面两个好像语法都没错误,而我上机时用上面的就可以通过,而用下面的不可呢?希望高手
解说下!谢谢! | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-11-13 23:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:179
信誉值:6
注册日期:2007-07-09 19:18 |
mov al,[si] ;将ds:[si]内存单元中的字节数据放到al中
mov [di],al ;将al中的数据放到ds:[di]中
这两条指令不是将si的内容放到di中
mov di,si ;就是将si的内容放到di中 | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-11-14 09:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:6
注册日期:2007-11-13 20:16 |
mov al,[si] ;将ds:[si]内存单元中的字节数据放到al中
mov [di],al ;将al中的数据放到ds:[di]中
这两条指令不是将si的内容放到di中
mov di,si ;就是将si的内容放到di中
------------------
回复:支持一下~~~~~~~~~~~~` | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-11-14 11:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06 |
【回复】2楼:
你上边的指令和下边的指令都是正确的,只是指令的意义不同,实现的功能不同的。
mov al,[si]
mov [di],al
实现的是内存到内存的传送,要问为什么mov [di],[si]是错误的,也就是说为什么不能内存和内存直接传递呢?
执行指令要cpu来做,要实现内存到内存的传送,首先cpu需要把内存中的数据读进来,那么这个数据放到哪儿呢?寄存器就是暂存器,再将寄存器中的数据送到指定的内存单元中。
而mov di,si
实现的是寄存器和寄存器之间的传送。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2007-11-14 12:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2007-11-13 21:08 |
|
|
|
|
|
[第7楼]
[ 回复时间:2007-11-14 13:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2007-11-14 13:44 |
【回复】2楼:
你上边的指令和下边的指令都是正确的,只是指令的意义不同,实现的功能不同的。
mov al,[si]
mov [di],al
实现的是内存到内存的传送,要问为什么mov [di],[si]是错误的,也就是说为什么不能内存和内存直接传递呢?
执行指令要cpu来做,要实现内存到内存的传送,首先cpu需要把内存中的数据读进来,那么这个数据放到哪儿呢?寄存器就是暂存器,再将寄存器中的数据送到指定的内存单元中。
而mov di,si
实现的是寄存器和寄存器之间的传送。
------------------
回复:兄弟的想法很有道理
对比自己看到mov mem, mem 错误的时候 真让我汗颜
当初只是记下这点,而没有深入去思考 为什么 。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2007-11-19 18:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:43
信誉值:3
注册日期:2007-07-05 19:53 |
|
|
|
|
|
[第9楼]
[ 回复时间:2007-11-19 19:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2007-11-17 19:59 |
mov al,[si] ;将ds:[si]内存单元中的字节数据放到al中
mov [di],al ;将al中的数据放到ds:[di]中
这两条指令不是将si的内容放到di中
mov di,si ;就是将si的内容放到di中
------------------
回复:对!就是这样的!支持一下 | | |
|
|
|
|
[第10楼]
[ 回复时间:2007-11-21 12:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2007-11-13 21:08 |
此贴由 贴主 于 [ 2007-11-21 12:56 ] 结贴。 结贴原因:问题已解决 | | |