[SIMD 프로그래밍] MMX 명령어 / unpack의 개념 / 레지스터 이동 명령어, unpack 명령어
MMX MMX는 인텔이 설계한 SIMD(Single Instruction Multiple Data) 명령어 집합으로 여러개의 정수에 대한 병렬 연산을 제공한다. MM0부터 MM7까지의 8개의 64비트 레지스터로 연산을 처리한다. MM 레지스터 총 64비트로 64 비트 정수 하나를 저장하거나, 16, 8, 4, 2, 1 바이트 크기와 같은 더 작은 크기의 정수를 여러개 저장할 수 있다. 여러개의 정수를 하나의 레지스터에 저장하는 형태를 'Packed' 라 한다. 하나의 MMX의 명령어는 두개의 32비트 정수, 네개의 16비트 정수, 여덟개의 8비트 정수를 처리한다. 이동 명령어 MOVD, MOVQ 각각 Doubleword (4바이트), Quadword (8바이트)를 의미한다. MOVD의 경우 메모리에서 m..
[X86 어셈블리] strncmp 구현하기 / cmpsb, cmpsw, repe 명령어
문자열 비교 명령어 CMPSB, CMPSW es:di와 ds:si를 비교한다. std 또는 cld로 비교 방향을 결정해줄 수 있다. std(=set direction)시 si와 di를 감소시키며 비교한다. cld(=clear direction)시 si와 di를 증가시키며 비교한다. cmpsb si, di 1씩 증감 byte 단위로 비교 cmpsw si, di 2씩 증감 word 단위로 비교 반복 명령어 REP, REPE, REPZ, REPNE, REPNZ cx 레지스터에 반복 횟수를 저장하여 사용한다. 각 명령어의 의미는 'as long as'를 넣어서 해석하면 된다. 예를 들어 REPE는 'REPeat (as long as) Equal'로 생각한다. Equal, Zero, Not Equal, Not Z..