; CIS-261
; encoding_x86_instructions.asm
; @topic W060111 Examples of x86 instruction encoding
; @brief Demonstrates binary encodings of instructions presented in <a href="http:;www.c-jump.com/bcc/c261c/CPU/x86/lecture.html" target="_blank">Encoding Real x86 Instructions</a> lecture
.386 ; Tells MASM to use Intel 80386 instruction set.
.MODEL FLAT ; Flat memory model
option casemap:none ; Treat labels as case-sensitive
.CONST ; Constant data segment
.STACK 100h ; (default is 1-kilobyte stack)
.DATA ; Begin initialized data segment
.CODE ; Begin code segment
_main PROC ; Beginning of code
BYTE 000h, 0C1h ; ADD CL, AL (13)
BYTE 002h, 0C8h ; ADD CL, AL (13)
BYTE 001h, 0C1h ; add ecx, eax (14)
BYTE 003h, 01Dh, 0AAh, 0BBh, 0CCh, 0DDh ; ADD EDX, DISPLACEMENT (15)
BYTE 003h, 03Bh ; ADD EDI, [EBX] (16)
BYTE 003h, 046h, 0FFh ; ADD EAX, [ ESI + disp8 ] (17)
BYTE 003h, 09Dh, 011h, 022h, 033h, 044h ; ADD EBX, [ EBP + disp32 ] (18)
BYTE 003h, 02Ch, 005h, 011h, 022h, 033h, 044h ; ADD EBP, [ disp32 + EAX*1 ] (19)
BYTE 003h, 00Ch, 0BBh ; ADD ECX, [ EBX + EDI*4 ] (20)
BYTE 10000000y, 00000101y, 90h, 90h, 90h, 90h, 90h, 90h, 90h, 90h ; ADD Immediate (21)
BYTE 066h, 041h ; INC CX (23)
BYTE 04h, 0EEh ; add al, constant (25)
BYTE 05h, 0AAh, 0BBh, 0CCh, 0DDh ; add eax, constant (25)
ret
_main ENDP
END _main ; Marks the end of the module and sets the program entry point label