. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  个人认为书中的错误之处,请高手解释一下  [待解决] 回复[ 4次 ]   点击[ 493次 ]  
hhuang
[帖 主]   [ 发表时间:2009-05-15 07:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-15 07:11
王爽老师在第三章举的第一个CS、IP的例子中,在把一条机器指令读取到cpu中执行后,ip指针会跳到下一条机器指令。
可是,书上举例中,每一条汇编指令对应的内存中的机器码的长度不一样,有的2字节,有的3字节,甚至jmp是5字节(32页)。这样好像是不对的吧,理由如下:
1、我记得当时我们在学计算机原理时,80x86属于RISC精简指令体系,指令少,而且每条指令的字长都是固定。对于32位机,每条指令的长度都应该是4字节。
2、如果汇编语言在编译后对应的机器指令的长度不固定,那么ip指针怎么知道下一次要增加几个字节呢。在32位的x86体系中,每执行完一条指令,ip应该是加4,也就是向后跳4字节。

不可否认王老师的书写的很通俗和流畅,很是敬佩,也很感谢。
以上是我的一些疑问,请高手能指点一下。hhuang111@163.com
hhuang
[第1楼]   [ 回复时间:2009-05-15 07:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-15 07:11
补充第三点:
3、如果机器码不足4字节的,应该会补零对齐。但不可能出现超过4字节的情况,书中所举的jmp指令不可能是5字节。
acool
[第2楼]   [ 回复时间:2009-05-15 11:03 ]   [引用]   [回复]   [ top ] 
荣誉值:49
信誉值:0
注册日期:2008-10-15 16:15
书上举例中,每一条汇编指令对应的内存中的机器码的长度不一样,有的2字节,有的3字节,甚至jmp是5字节(32页)。这样好像是不对的吧,理由如下:
------------------
debug下查看内存的真实情况,并不是机器码不足4字节的会补零对齐。所以书上说的没错。

80x86属于RISC精简指令体系,指令少,而且每条指令的字长都是固定
---------------
虽然我没有看过RISC精简指令体系,但是这种定长的设计是不太合理的。
如果固定每条指令字长的话,这个长度肯定是最长指令所占的字节长度,这样计算机会浪费很多内存。
现在内存比较便宜几十块钱都可以买2个G,可以再计算机出现的时候可是超贵的,这样浪费内存真是败家子 呵呵
abao88
[第3楼]   [ 回复时间:2009-06-16 12:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-06-16 12:53
Intel公司X86为核心的PC系列正是基于CISC体系结构,而 Apple公司的Macintosh则是基于RISC体系结构.
从硬件角度来看CISC处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。
http://www.mculee.cn/post/56.html
所以 你记错了
hhuang
[第4楼]   [ 回复时间:2011-01-26 11:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-15 07:11
感谢二位的解释
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved