algorithmica icon indicating copy to clipboard operation
algorithmica copied to clipboard

2.6:The statement that `inc rax` takes 1 byte in x86 is incorrect.

Open collectcrop opened this issue 11 months ago • 0 comments

in section 2.6,you noted "something simple and very common like inc rax takes one byte".

In the x86_64 architecture, the machine code for the inc rax instruction is actually \x48\xff\xc0 and inc eax is \xff\xc0, which is not 1 byte long. The confusion likely arises from mixing up with the 32-bit version of the instruction.

In the x86 (32-bit) architecture, the instruction inc eax has the machine code \x40, which is indeed 1 byte. However, when moving to the x86_64 (64-bit) architecture, the instruction inc rax requires a REX prefix (\x48), followed by \xff\xc0, making the total size 3 bytes.

To clarify:

In x86 (32-bit): inc eax machine code is \x40 (1 byte). In x86_64 (64-bit): inc rax machine code is \x48\xff\xc0 (3 bytes), with the \x48 prefix indicating the use of the 64-bit register (rax instead of eax). This distinction is important for understanding how machine code differs between 32-bit and 64-bit architectures. Therefore, the statement that "inc rax takes 1 byte" should be corrected to reflect that it actually requires 3 bytes in x86_64.

collectcrop avatar Feb 26 '25 13:02 collectcrop