ÉXÉCUTABLE: CODÉ EN ASSEMBLEUR COMMENCE TOUJOURS PAR LES OPCode 4D (DEC BP) et 5A (POP DX). rb : Un des registres 8-bit AL, CL, DL, BL, AH, CH, DH, ou BH. rw : Un des registres 16-bit AX, CX, DX, BX, SP, BP, SI, ou DI. 28 /r SUB r/m8, r8 1/3 Subtract byte register from r/m byte 40+rw INC r16 1 Increment word register by 1 48+rw DEC r16 1 Decrement word register by 1 58+rw POP r16 4 Pop top of stack into word register 8B /r MOV r16, r/m16 1 Move r/m word into word register B0+rb MOV reg8, imm8 1 Move immediate byte to register 40 : INC AX 41 : INC CX 42 : INC DX 43 : INC BX 44 : INC SP 45 : INC BP 46 : INC SI 47 : INC DI 48 : DEC AX 49 : DEC CX 4A : DEC DX 4B : DEC BX 4C : DEC SP 4D : DEC BP 4E : DEC SI 4F : DEC DI 58 : POP AX 59 : POP CX 5A : POP DX 5B : POP BX 5C : POP SP 5D : POP BP 5E : POP SI 5F : POP DI 8B [xx] : modrm=[xx]; Mod=[xx]/64; ou [BBbbbbbb] // xx / 64; (xx >> 6) [0-3][4-7][8-B][C-F] Regop=[xx]/16&0x07; ou [BBBBBbbb] [00111] = [0..7] Rm=[xx]&0x07; ou [bbbbbBBB] [00000111] =[0..7] #define Read_rm16(op2_16) \ switch([xx]/64) { \ case 0x00 : Read_Mod0(val); break; \ case 0x01 : Read_Mod1(val); break; \ case 0x02 : Read_Mod2(val); break; \ case 0x03 : val=Read_Reg16(Rm); break; \ } \ Read_rm16(); Write_Reg16(Regop,op2_16) F 5 (0x1111|0101 >> 6) = 0x11 = 3 4 0 (0x0100|0000 >> 6) = 0x01 = 1 rb : Un des registres 8-bit AL, CL, DL, BL, AH, CH, DH, ou BH. B0 [xx] : MOV AL, xxH ==> Ex: [AL:0x00000004], [0x00000045] = [AL:0x00000045] B1 [xx] : MOV CL, xxH B2 [xx] : MOV DL, xxH B3 [xx] : MOV BL, xxH B4 [xx] : MOV AH, xxH B5 [xx] : MOV CH, xxH B6 [xx] : MOV DH, xxH B7 [xx] : MOV BH, xxH