Assembly 9

CLD (clear DF) assembly (x86)

CLD 어셈블리 명령어 clear direction flag 즉 DF=0으로 설정하는 어셈블리 명령어 REP prefix가 붙어서 MOVS, LODS< SCAS, ... 등의 명령어가 사용되는데, 반복 횟수는 ECX레지스터에 담기지만, 데이터가 담긴 곳의 주소는 알아서 증감한다. (ESI, EDI) 이 때 자동으로 증감하는 방향을 결정하는 플래그가 DF(direction flag)다. DF=0이라면 incrementing DF=1이라면 decrementing 방향으로 증감한다.

Assembly 2019.12.30

pushad assembly

레지스터 값들을 스택에 쫙 백업한다. push 명령어는 pop 명령어와 짝궁이듯, pushad 명령어는 popad와 짝궁이다. pushad 명령어로 백업되는 레지스터들의 순서는 다음과 같다. EAX -> ECX -> EDX -> EBX -> ESP -> EBP -> ESI -> EDI 즉 pushad를 하고 디버거에서 보는 스택 상황을 보면 아래와 같다. (스택 주소는 High->Low로 신장한다. 하지만 보통 디버거창을 보면 High주소를 아래로 두므로 많이들 헷갈려 하는듯) (Low) EDI ESI EBP ESP EBX EDX ECX EAX (High)

Assembly 2019.11.15

CMOV - assembly (CMOV 관련 모든 명령어 정리)

CMOV -- Conditional Move (조건부 대입) 명령어 정리 ※ : r32, r/m32에도 동일하게 적용된다. ex) CMOVZ ecx, [ebp-23ch] : ecx가 0(ZF==1)이라면 ecx에 [ebp-23ch]를 대입한다. C : CMPMOVZ : Condition (if dst==zero) ==> mov ecx, [ebp-23ch] 이라고 생각하면 이해가 쉽다. Opcode Instruction Description 0F 40 /r CMOVO r16, r/m16 Move if overflow (OF=0) 0F 41 /r CMOVNO r16, r/m16 Move if not overflow (OF=0) 0F 42 /r CMOVB r16, r/m16 Move if below (CF=1..

Assembly 2018.02.14

MOVUPS assembly

MOVUPS 어셈블리 명령어(MOV Unalinged Packed Single-Precision Floating-Point Values) [사용법]MOVUPS xmm1, xmm2/m128 (OPCODE : 0F 10 /r)MOVUPS xmm2/m128, xmm1 (OPCODE : 0F 11 /r) : double quardword (16bit 즉, 4개의 packed된 single-precision floating-point 값)을 source(두번째 인자)로부터 destination(첫번째 인자)으로 옮긴다. 해당 명령어는 128-bit 메모리 공간에서 XMM 레지스터로 값을 Load하는 데에도 사용되고 반대로 XMM 레지스터 값을 128-bit 메모리 공간으로 store 하기도 하며, XMM 레지스터..

Assembly 2018.02.13

imul assembly

IMUL : Signed Multiply (부호있는 곱셈) IMUL (reg or mem)byte일 경우 - AL과 곱하여 결과를 AX에 저장한다.word일 경우 - AX와 곱하여 결과를 DX:AX에 저장한다.dword일 경우 - EAX와 곱하여 결과를 EDX:EAX에 저장한다. IMUL reg, (reg or mem)둘을 곱하여 결과를 첫번째 인자에 저장한다. IMUL reg, imm레지스터 값을 상수와 곱하여 다시 레지스터에 저장한다. IMUL reg, (reg or mem), imm첫번째 인자를 제외한 둘을 곱한 결과를 첫번쨰 인자에 저장한다.

Assembly 2017.05.10