. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
寄存器(CPU工作原理)
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
P26 第二行:内存20000H单元开始存放的机器指令 B8 23 01 通过数据总线送入CPU,疑惑,请教了。
[待解决]
回复[
3
次 ] 点击[
590
次 ]
yky
[帖 主]
[ 发表时间:2008-10-09 16:05 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2008-04-21 21:41
看书上20000H单元内的内容是B8,我认为应该把 B8通过数据线送入CPU,因为它给的是地址 20000H,不明白为什么会把地址20001H 20002H的内存内容 23 01也一起被送入了CPU.
dan1010
[第
1
楼]
[ 回复时间:2008-10-11 03:16 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2008-10-11 02:38
因为那是一句啊。。占了3个单元,
masm_pig
[第
2
楼]
[ 回复时间:2008-10-29 08:12 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:2
注册日期:2008-07-09 23:25
呵呵,
其实计算机的数据传送并不是按我们想当然的那样做,数据线传送数据也不会一次传一字节或3字节等,数据的传送的实质就是电脉冲的传递,通常也就是按数据线位宽来进行传送的.
在16位机中,数据线一次传送2字节数据,为实现长字节的指令,8086的CPU在设计中,设计了一个6字节的指令缓存,指令序列按CS:IP标示,按位冲满指令缓存.
因此此时CPU中的指令缓存中
即不会是 B8 00 00 00 00 00,
也不会是 B8 23 01 00 00 00,
而应该是 B8 23 01 ** ** **,
**是随后的字节
至于为什么设计成6字节的,细思考一下指令的最长与最短就会知道答案.
yky
[第
3
楼]
[ 回复时间:2009-01-22 20:59 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2008-04-21 21:41
通过仔细思考发现 MOV AX,0123H 这条指令所对应的机器码是 B8 23 01,而 MOV BX,0003H 的机器码是BB 03 00, 由于疏忽大意,错把B8 BB看成是同一个数据了,(8和B没有分清)从而产生一个疑问,MOV AX,...和MOV BX,...这两条指令的机器码怎样区分,现在明白了 MOV 机器码是“BB". AX,...的机器码是“B8" 而MOV BX,...的机器码是“BB".
这样看来,B8.BB 就不会被送入寄存器了,B8 03 21这3个字节只把03 21送入了寄存器AX.
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved