深入理解汇编语言中的位操作、标志位、分支和内存寻址
1. 位测试与指令速度
在某些场景下,指令速度至关重要。例如,在执行成千上万次的循环中,需要考虑是否有更好的位测试方法。像 TEST 指令虽然老旧,但速度很快,不过它只能测试位是否为 1。根据具体应用,测试位是否为 0 可以采用其他方法,如使用 SHL 或 SHR 将值移入进位标志位,或者使用 NOT 对值取反。位测试没有固定规则,一切取决于具体操作。
2. 保护模式内存寻址详解
2.1 从实模式到保护模式的转变
过去在原始 IBM PC 的实模式 8088 CPU 上进行汇编编程时,实模式内存寻址非常痛苦,存在诸多限制和陷阱。而在过去 20 年里,x86 CPU 获得了足够的晶体管,实模式内存寻址的大部分恼人限制已消失。现在可以使用任何通用寄存器进行内存寻址,甚至栈指针 ESP 也能参与寻址,这在 16 位实模式中是不允许的。
2.2 386 CPU 保护模式的内存寻址方案
386 CPU 的保护模式引入了一种通用的内存寻址方案,所有通用寄存器都能平等参与。规则如下:
- 基址和索引寄存器可以是任何 32 位通用寄存器,包括 ESP 。
- 寻址公式为: BASE + (INDEX × SCALE) + DISP 。
- 任何通用寄存器都可作为基址寄存器。
- 任何通用寄存器都可作为索引寄存器。
-
超级会员免费看
订阅专栏 解锁全文
15万+

被折叠的 条评论
为什么被折叠?



