Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | "Mike Gonta" <mikegonta@gmail.com> |
|---|---|
| Newsgroups | alt.lang.asm, alt.os.assembly, alt.os.development |
| Subject | Undocumented "REAL" real mode x86 NOP opcodes |
| Date | 2017-03-26 10:52 -0400 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <ob8kja$rff$1@gioia.aioe.org> (permalink) |
Cross-posted to 3 groups.
Undocumented "REAL" real mode x86 NOP opcodes. There are a series of two byte opcodes (opcode byte plus MOD-REG-R/M byte) that have a MOD-R/M for a 32 bit register indirect addressing mode. For example, one of these (of many) is ADD [EAX], AL and the encoding is 0x00, 0x00. In real mode this instruction (on a 80386 or better) requires an address override prefix byte (0x67) since there is no instruction for ADD [AX], AL. However, the encoding of 0x00, 0x00 is a perfectly valid instruction in real mode, and in fact is a true "REAL" No OPeration. Unlike XCHG AX, AX aka 0x90 which is a valid operation (but for the fact that it has no effect and is thus classified as a NOP), the encoding of 0x00, 0x00 in real mode (without the address override prefix) not only doesn't add AL to what AX (or EAX) is pointing to but does absolutely nothing other than advance the program counter. Of course, these undocumented "REAL" real mode x86 NOP opcodes are (almost) totally useless. I did however manage to save 3 bytes (which I didn't need) in my exFAT boot sector boot loader. Mike Gonta look and see - many look but few see http://mikegonta.com
Back to alt.lang.asm | Previous | Next — Next in thread | Find similar | Unroll thread
Undocumented "REAL" real mode x86 NOP opcodes "Mike Gonta" <mikegonta@gmail.com> - 2017-03-26 10:52 -0400
Re: Undocumented "REAL" real mode x86 NOP opcodes "Mike Gonta" <mikegonta@gmail.com> - 2017-03-26 12:32 -0400
Re: Undocumented "REAL" real mode x86 NOP opcodes "wolfgang kern" <nowhere@never.at> - 2017-03-26 21:00 +0200
csiph-web