본문 바로가기

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 방향으로 증감한다.
rep stos rep stos rep : 반복한다. ecx 레지스터에 담긴 카운터 횟수만큼 stos : eax 레지스터 값을 edi레지스터에 담긴 주소안에 값으로 저장. rep stos stos를 반복한다. 얼마만큼? ecx레지스터에 담긴 카운터 횟수만큼. ex) rep stos dword ptr [edi] ==> 보통 - lea edi, 주소 - mov ecx, 카운터횟수 - mov eax, 넣을 값 - rep stos [edi] 명령어 세트로 많이 나옴.
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)
xchg assembly xchg assembly XCHG는 'Exchange'의 약자라 볼 수 있다. 두개의 Operand의 내용을 서로 교환하는 명령어이다. [사용법]xchg reg, reg (O)xchg reg, mem (O)xchg mem, reg (O) ※ xchg mem, mem (X)mem to mem의 교환은 지원하지 않는다.
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..
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 레지스터..
CBW, CDW, CDQ assembly 확장되는 만큼 부호로 채워진다. (음수는 FF로, 양수는 00으로) CBW : Convert Byte to WordAL -> AH CWD : Convert Word to Double wordAX -> DX:AX CDQ : Convert Double word to Quad wordEAX -> EDX:EAX
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첫번째 인자를 제외한 둘을 곱한 결과를 첫번쨰 인자에 저장한다.