我正在阅读基于Intel的计算机第五版汇编语言的书 作者说像TITLE,但他没有解释 是关于指令长度的吗?
答案 0 :(得分:2)
以下一种方式思考这个问题,创建你需要的循环:
mov cx, iterations
label:
; loop body
dec cx ; this instruction takes 1 byte
jnz label ; this instruction takes 2 for short and 4 for long
所以,你有选择:
一旦大多数循环(都是?)非常短 - 引入了特殊的快捷指令来减小尺寸(640kb就足够了):
loop
只占用2个字节并用作dec + short jmp
所以,循环是特殊的" edge"我认为现在没有使用的情况(更新:它可以假定为已弃用(because it's slow on modern CPUs),并且它有意义,因为循环强制您使用CX作为循环变量,因此您不能创建双循环或使用另一个寄存器)
无论如何你问题的第二部分 - 如果你的循环体更大,该怎么办:
mov ax,0
(3个字节)替换为xor ax,ax
(2个字节),依此类推注意:这些指令长度适用于16位模式; 32位和64位模式使用rel32进行长跳转,而不是rel16。