. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  为什么寄存器和内存单元之间的传送是字型 而不是字节型?  [待解决] 回复[ 20次 ]   点击[ 2780次 ]  
helloworld
[帖 主]   [ 发表时间:2007-10-24 00:29 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
比如 DS的值是1000

为什么mov ax,[1] 

其结果是将内存10000H--10001H的数据传入AX
而不是将10001H的数据传入AX?
helloworld
[第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]

他们的结果各是多少呢?
sunshine
[第2楼]   [ 回复时间:2007-10-24 10:14 ]   [引用]   [回复]   [ top ] 
荣誉值:106
信誉值:0
注册日期:2007-06-26 15:10
你说呢,
都是在指定位置取一个字节的数据放入对应的寄存器
sunshine
[第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
happy
[第4楼]   [ 回复时间:2007-10-24 10:44 ]   [引用]   [回复]   [ top ] 
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06
注意:在debug下和在汇编程序下的不同。
如果在debug下,mov al,[0]解释成内存单元,而如果在汇编程序下,编译器会解释成立即数。
helloworld
[第5楼]   [ 回复时间:2007-10-24 12:21 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
主要我是以为al就一定只能传入低位,而ah就一定只能传入高位
所以我会以为 mov ah,[0]的话,ah会=2e
现在看来也没有分别的,读哪个就传给哪个 只要是8位就行了
happy
[第6楼]   [ 回复时间:2007-10-24 13:06 ]   [引用]   [回复]   [ top ] 
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06
嗯,楼主明白了就行了
shanguianti
[第7楼]   [ 回复时间:2007-11-02 09:19 ]   [引用]   [回复]   [ top ] 
荣誉值:19
信誉值:0
注册日期:2007-10-31 16:24
mov传送指令要求后面的两个操作数必须位数相同。
cat442
[第8楼]   [ 回复时间:2007-11-02 09:49 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:6
注册日期:2007-06-26 16:56
说的挺热闹, 这种问题最好还是动手试试 , 一试便知。
 呵呵
yigu
[第9楼]   [ 回复时间:2008-08-21 17:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-08-10 00:01
这种类型中:传什么由 [bx] 前边的 reg决定
e56004474
[第10楼]   [ 回复时间:2008-09-09 18:34 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
指令中,它会隐含的告诉你,单位是B或字~
liuxianming2001
[第11楼]   [ 回复时间:2008-09-09 19:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-09-03 00:18
9楼正解
所以
mov [],[]  错误!
anly2782
[第12楼]   [ 回复时间:2008-09-23 16:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-09-21 15:29
两个内存单元用来储存一个字,AL是8位寄存器,一次只能传送一个字节,也就是一个内存单元
AX则不同,它可以传送一个字,即两个内存单元
robin_0216
[第13楼]   [ 回复时间:2008-12-05 13:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-26 10:57
1楼说的好像不对吧?
ds段值是1000h
mov ax,[1]
是将10001h-10002h的内容传到ax 中才对
maxm
[第14楼]   [ 回复时间:2009-01-21 11:03 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41
回复:[贴 主]
------------------
13楼正解
sgiceleo
[第15楼]   [ 回复时间:2009-02-06 20:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-01 11:51
恩,还是13楼仔细,我乍一看也似乎被忽悠了 ,呵呵 ,ds=1000h ,mov ax,[1] 是10001h--10002h的内容传送到ax
zhenglxd
[第16楼]   [ 回复时间:2009-04-16 16:04 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
你为什么就不能静下心 好好把书仔细看一遍呢,这个程度的学习 靠的就是耐心 和仔细
debug工具 自己调试下不是都明白了

AX 是16位的 AL AH等是8位的寄存器

内存单元是 8位的 字单元是16位的

看一个[..]内是字单元还是内存单元 要看和他操作的具体寄存器是多少位的

另外 字单元是 2个连续的内存单元 以这2个内存单元中 较小的一个偏移地址来命名
同时 较小的偏移地址存放的低位内存单元 较高的偏移地址存放的高位的内存单元
全是书本的知识 你不看书 的吗 纯理论的东西特别是基础的很枯燥但是很重要
qingfeng203
[第17楼]   [ 回复时间:2009-07-18 14:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-18 00:34
3.4.5楼都说得对
【】中的字节大小是有操作对象寄存器决定的
manhun
[第18楼]   [ 回复时间:2010-01-15 19:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-13 16:55
我试过,对al或ah之类的传送[xxxx]的,都是赋予它们字单元低位的值
xy26333
[第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位寄存器的独立性......
haker007
[第20楼]   [ 回复时间:2011-08-28 20:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-08-10 12:45
16.19楼总结得很到位,敬礼。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved