I\'m working through Computer Systems, A Programmer\'s Perspective (3rd edition), and Practice Problem 3.3 contains the following line:
movb $0xF, (
You are right that,
movb $-17, (%esp) Immediate--Memory, 1 byte
should not be allowed. In fact the authors have posted this as a typo. Check out their errata list (Ctrl-F for "p. 183").
For 64-bit x86; there is nothing wrong with the instruction movb $0x0F, (%ebx)
. It assembles to 0x67, 0xC6, 0x03, 0x0F.
The book is wrong.
Note that all instructions can be bugs (simple example: using add
when you wanted to use sub
), and movb $0x0F, (%ebx)
may be a bug (e.g. maybe the value was supposed to be 0xFF
, maybe it was supposed to use a different register, maybe it was supposed to use rbx
, maybe it was supposed to be a lea
, ..). This doesn't mean that it's always a bug (e.g. 32-bit addresses are perfectly legal and sometimes desirable in 64 bit code).