|
主题 : : 为什么寄存器和内存单元之间的传送是字型 而不是字节型? [待解决] |
回复[ 20次 ]
点击[ 2780次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-10-24 00:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
比如 DS的值是1000
为什么mov ax,[1]
其结果是将内存10000H--10001H的数据传入AX
而不是将10001H的数据传入AX? | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-10-24 00:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
哦我明白了
如果是mov al,[1]的话才是传字节型,ax是具有二个字节型容量的寄存器
那现在有个新问题如果 10000H的数据是1E 10001H的数据是2E
那么 mov al,[0]
mov ah,[0]
mov al,[1]
mov ah,[1]
他们的结果各是多少呢? | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-10-24 10:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:106
信誉值:0
注册日期:2007-06-26 15:10 |
你说呢,
都是在指定位置取一个字节的数据放入对应的寄存器 | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-10-24 10:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:106
信誉值:0
注册日期:2007-06-26 15:10 |
mov al,[0] al = 1e
mov ah,[0] ah = 1e
mov al,[1] al = 2e
mov ah,[1] ah = 2e | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-10-24 10:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06 |
注意:在debug下和在汇编程序下的不同。
如果在debug下,mov al,[0]解释成内存单元,而如果在汇编程序下,编译器会解释成立即数。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-10-24 12:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
主要我是以为al就一定只能传入低位,而ah就一定只能传入高位
所以我会以为 mov ah,[0]的话,ah会=2e
现在看来也没有分别的,读哪个就传给哪个 只要是8位就行了 | | |
|
|
|
|
[第6楼]
[ 回复时间:2007-10-24 13:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06 |
|
|
|
|
|
[第7楼]
[ 回复时间:2007-11-02 09:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:19
信誉值:0
注册日期:2007-10-31 16:24 |
|
|
|
|
|
[第8楼]
[ 回复时间:2007-11-02 09:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:6
注册日期:2007-06-26 16:56 |
说的挺热闹, 这种问题最好还是动手试试 , 一试便知。
呵呵 | | |
|
|
|
|
[第9楼]
[ 回复时间:2008-08-21 17:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-10 00:01 |
这种类型中:传什么由 [bx] 前边的 reg决定 | | |
|
|
|
|
[第10楼]
[ 回复时间:2008-09-09 18:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
|
|
|
|
|
[第11楼]
[ 回复时间:2008-09-09 19:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-03 00:18 |
|
|
|
|
|
[第12楼]
[ 回复时间:2008-09-23 16:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-21 15:29 |
两个内存单元用来储存一个字,AL是8位寄存器,一次只能传送一个字节,也就是一个内存单元
AX则不同,它可以传送一个字,即两个内存单元 | | |
|
|
|
|
[第13楼]
[ 回复时间:2008-12-05 13:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-10-26 10:57 |
1楼说的好像不对吧?
ds段值是1000h
mov ax,[1]
是将10001h-10002h的内容传到ax 中才对 | | |
|
|
|
|
[第14楼]
[ 回复时间:2009-01-21 11:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41 |
回复:[贴 主]
------------------
13楼正解 | | |
|
|
|
|
[第15楼]
[ 回复时间:2009-02-06 20:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-01 11:51 |
恩,还是13楼仔细,我乍一看也似乎被忽悠了 ,呵呵 ,ds=1000h ,mov ax,[1] 是10001h--10002h的内容传送到ax | | |
|
|
|
|
[第16楼]
[ 回复时间:2009-04-16 16:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05 |
你为什么就不能静下心 好好把书仔细看一遍呢,这个程度的学习 靠的就是耐心 和仔细
debug工具 自己调试下不是都明白了
AX 是16位的 AL AH等是8位的寄存器
内存单元是 8位的 字单元是16位的
看一个[..]内是字单元还是内存单元 要看和他操作的具体寄存器是多少位的
另外 字单元是 2个连续的内存单元 以这2个内存单元中 较小的一个偏移地址来命名
同时 较小的偏移地址存放的低位内存单元 较高的偏移地址存放的高位的内存单元
全是书本的知识 你不看书 的吗 纯理论的东西特别是基础的很枯燥但是很重要 | | |
|
|
|
|
[第17楼]
[ 回复时间:2009-07-18 14:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-10-18 00:34 |
3.4.5楼都说得对
【】中的字节大小是有操作对象寄存器决定的 | | |
|
|
|
|
[第18楼]
[ 回复时间:2010-01-15 19:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-13 16:55 |
我试过,对al或ah之类的传送[xxxx]的,都是赋予它们字单元低位的值 | | |
|
|
|
|
[第19楼]
[ 回复时间:2010-07-05 20:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09 |
我们说 80系列的CPU 具有很好的向上 兼容性 表现在 处理数据上 :他可以处理两种尺寸的数据,字节(以前的cpu是8位的)和字 那么就某一条 指令而言 如:mov ax,[1],你如何知道数据的长度呢? 我们做一个约定,一个16位的寄存器就处理一个16位的数据(字型),并且满足 高对高 低对低的原则,一个8位寄存器就传送一个8位数据(字节)不涉及什么高低...很单一的,那么对于一个16位的通用寄存器,我们可以从两个角度去看待 1:就是一个16位的通用寄存器 2:两个相互独立的8位寄存器(注意:是相互独立,就是互不相干)楼主原来 正是忽略了8位寄存器的独立性...... | | |
|
|
|
|
[第20楼]
[ 回复时间:2011-08-28 20:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-10 12:45 |
|