在看雪论坛的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在后来的指令集中允许了位数不相同也可以操作? |