. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
主题 : :  这样的代码是正确的还是错误的?有关32位寄存器  [待解决] 回复[ 8次 ]   点击[ 710次 ]  
zyc969
[帖 主] [ 发表时间:2012-08-02 09:00 ] 
荣誉值:0
信誉值:0
注册日期:2012-04-30 21:05
在看雪论坛的KSSD上看到一篇代码优化的帖子(在“第1篇 基础篇”-“汇编基础”-“汇编指令”-“代码优化常识”网址:http://www.pediy.com/kssd/)

在第6个优化方法时出现了类似于“mov eax, 50h”“push 50h”“pop eax”“push eax”的语句。

但根据《汇编语言(第二版)》第19页,在位数不同的两个寄存器之间传送数据的指令是错误的指令。
eax好像是32位寄存器吧。那么8位的数据怎么能存进32位寄存器?8位怎么能压到16位的栈中?16位的栈怎么又能弹到32位的寄存器中?32位的寄存器怎么又能压到16位的栈中?

即使后面几个压栈出栈的语句位数不对也可以压,但“mov eax, 50h”总是矛盾的。

这个是错误呢,还是32位寄存器不能用16位寄存器类比?还是CPU在后来的指令集中允许了位数不相同也可以操作?
wqh963577494
[第8楼] [ 回复时间:2012-12-22 16:07 ] 
荣誉值:0
信誉值:0
注册日期:2012-12-19 13:28
32位可以存32位,16位,8位的;16位能存16位,8位的;8位只能存8位的。好似一列车,有总共只有8个位置,能做16个人吗?而位置有16个的话,当然可以做8个人,另为8个位置空着
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved