아래 나온 것들만 알아도 어셈블리 프로그래밍 혹은 리버싱하는 데에 있어서

기초는 된 거임. 책을 보든 검색을 하든 아래의 내용들은 반드시 알아둘 것.


 16-bit Assembly

- 레지스터
 AX(AH:AL), BX(BH:BL), CX(CH:CL), DX(DH:DL)
 SI, DI, SP, BP
 IP, FLAGS
 CS, DS, SS, ES
및 FLAGS의 각 플래그들의 의미

- 논리 주소와 물리 주소의 관계
 (Segment:Offset ↔ Physical Address)

- 명령어
 데이터 이동: MOV, LEA, LDS, LES, LSS, MOVZX/MOVSX
 데이터 교환: XCHG
 산술 연산: ADD/ADC/INC, SUB/SBB/DEC, MUL/IMUL, DIV/IDIV, NEG, CMP
 비트 연산: AND, OR, XOR, NOT, SHL/SAL, SHR/SAR, ROL, ROR, TEST
 문자열 관련: MOVS, CMPS, STOS, LODS, SCAS
 반복 관련: LOOP/LOOPZ/LOOPNZ, REP prefix
 실행 흐름 분기: JMP, Jcond/JNcond(조건 분기), CALL/RET, CALL FAR/RETF, INT/IRET
 스택 조작 명령: PUSH/POP, PUSHA/POPA, PUSHF/POPF
 스택 프레임 관련: ENTER, LEAVE
 플래그 레지스터 관련: STC/CLC, STO/CLO, STI/CLI, SAHF, SETC/SETNC, SETO/SETNO, SETP/SETNP
 특수 명령: NOP

- x87 부동 소수점 명령어
 FLD, FST/FSTP, FADD/FADDP, FSUB/FSUBP, FMUL/FMULP, FDIV/FDIVP, FSQRT, FABS, ...



 32-bit Assembly

 - 레지스터 크기의 변화
 EAX(16bit:AX), EBX(16bit:BX), ECX(16bit:CX), EDX(16bit:DX),
 ESI(16b:SI), EDI(16b:DI), ESP(16b:SP), EBP(16b:BP)
 EIP(16b:IP), EFLAGS(16b:FLAGS)

 - 세그먼트 레지스터의 추가
 FS, GS

 - 명령어의 추가
 PUSHAD/POPAD, PUSHFD/POPFD
 LOCK prefix
 ...

 - 시스템 레벨에서는 보호 모드를 위해 많은 레지스터들이 추가됨
 CR0~CR4, DR0~DR3, DR6, DR7, IDTR, GDTR, LDTR



 64-bit Assembly

- 레지스터 크기의 변화 및 추가
 RAX(32b:EAX), RBX(32b:EBX), RCX(32b:ECX), RDX(32b:EDX),
 RSI(32b:ESI), RDI(32b:EDI), RSP(32b:ESP), RBP(32b:EBP)
 RIP(32b:EIP), RFLAGS(32b:EFLAGS)

 기존 범용 레지스터 8개 외 범용 레지스터 8개 새로 추가 (R8~R15)

- 명령어의 추가/변형
 REX prefix
 Implicit Zero Extension
 RIP relative addressing
 ...

 - 내부 시스템 레지스터의 추가



위 내용들만 알아도 어셈의 95% 이상은 이해할 수 있다.
어셈블리어 공부 시 참고할 것.