이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT dst src: source operand dst: destination operand Status Flags - 복습 CPU Status Flags Flags ZF (zero) 동작 결과가 0 이면 set SF (sign) 음수이면 set (MSB와같음 ) CF (carry) unsigned 결과가표현범위벗어나면 set OF (overflow) signed 결과가표현범위벗어나면 set PF (parity) 결과의 1값을갖는 bit수가짝수이면 set AF (auxiliary) 하위 4 비트에대한 carry 발생하면 set 비트단위 (bitwise) 부울연산 operand rule: MOV, 산술연산과같음 컴퓨터정보통신 어셈블리언어 3 컴퓨터정보통신 어셈블리언어 4
AND 명령어 OR 명령어 AND selective clear (mask operation) AND OR selective set OR 0 0 1 1 1 0 1 1 AND 00001111 0 0 0 1 1 1 0 0 1 1 1 0 1 1 OR 00001111 0 0 0 1 1 1 cleared 0 0 0 0 1 0 1 1 unchanged unchanged 0 0 1 1 1 1 1 1 set ( 예 ) 소문자를대문자로변환 ASCII code: 01000001 ~ 01011010 A ~ Z 01100001 ~ 01111010 a ~ z 소문자 대문자변환 : bit 5 를 0 으로바꿈 ( 예 ) 대문자를소문자로변환 대문자 소문자변환 : bit 5를 1로바꿈 mov al,'a' ; AL = 01000001b or al,00100000b ; AL = 01100001b mov al,'a' and al,11011111b ; AL = 01100001b ; AL = 01000001b 컴퓨터정보통신 어셈블리언어 5 컴퓨터정보통신 어셈블리언어 6 XOR 명령어 NOT 명령어 XOR selective complement (invert) XOR NOT 1's 1s complement NOT unchanged XOR 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 inverted NOT 0 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 inverted ( 예 ) Parity Flag 검사 (even parity 일때 PF=1) 어떤값을 0과 XOR 연산수행시결과는변하지않으며 flag만설정됨 mov al, 10110101b ; 5 1's xor al, 0 ; PF=0 (odd parity) mov al, 11001100b ; 4 1's xor al, 0 ; PF=1 (even parity) 16-bit parity - 두바이트간에 XOR 연산수행 mov ax, 64C1h ;0110 1000 1100 0001 xor ah, al ;PF=1 (even e parity) 컴퓨터정보통신 어셈블리언어 7 컴퓨터정보통신 어셈블리언어 8
예제 TEST 와 CMP 명령어 비트맵집합 비트값이 1 이면집합원소를표시 (32 비트 : 최대 32 개의원소표시 ) 여집합 - NOT 명령어사용 교집합 - AND 명령어사용 합집합 - OR 명령어사용 ( 예 ) SetX = 80000007h SetY = 81500763h mov eax, SetX ; 10000000 00000000 00000000 00000111 not eax ; eax=x의여집합 mov eax, SetX and eax, SetY ;eax=x 와 Y 의교집합 mov eax, SetX or eax, SetY ; eax=x와 Y의합집합 TEST dst, src dst src 연산 (AND 연산 ) 수행 ( 결과를저장하지않음 ) 비트검사에사용됨 CMP dst, src dst src 연산수행 ( 결과를저장하지않음 ) 크기비교에사용됨 TEST 와 CMP instruction 의공통점 연산결과를저장하지않고 flag 에만영향을줌 dst 는변하지않음 주로 conditional jump 와함께사용 컴퓨터정보통신 어셈블리언어 9 컴퓨터정보통신 어셈블리언어 10 CPU 개별플래그설정 6.3 조건부점프 ZF 설정 test al, 0 ;ZF = 1 and al, 0 ; ZF = 1 (AL 수정 ) or al, 1 ; ZF = 1 (AL 수정 ) SF 설정 or al, 80h ; SF = 1 and al, 7Fh ;SF= 0 CF 설정 stc ; CF = 1 clc ; CF = 0 OF 설정 mov al, 7F inc al ; OF = 1 or eax, 0 ; OF = 0 ( 논리연산 ) 컴퓨터정보통신 어셈블리언어 11 Jcond 명령어 형식 : Jcond label 이전의연산결과가주어진조건을만족하면 label 위치의 instruction 으로 jump ( 이전의연산결과는주로 flag 상태를참조함 ) Condition 종류와조건부점프 Condition 종류 특정 Flag상태 equality Instructions JZ, JNZ, JC, JNC, JO, JNO, JS, JNS, JP, JNP JE, JNE, JCXZ, JECXZ signed 비교 JG, JGE, JL, JLE (Greater, Less) JNLE, JNL, JNGE, JNG unsigned 비교 JA, JAE, JB, JBE (Above, Below) JNBE, JNB, JNAE, JNA JZ 와 JE, JNZ 와 JNE 는같은명령어 컴퓨터정보통신 어셈블리언어 12
특정플래그값에의한점프 동등비교점프 컴퓨터정보통신 어셈블리언어 13 컴퓨터정보통신 어셈블리언어 14 부호없는비교점프 부호있는비교점프 컴퓨터정보통신 어셈블리언어 15 컴퓨터정보통신 어셈블리언어 16
예제 크기비교 동등비교 cmp eax,ebx ; eax - ebx je L1 크기비교 unsigned 비교 cmp eax,ebx ja Larger signed 비교 cmp eax,ebx jg Larger if (eax==ebx) goto L1 if (eax>ebx) goto Larger 예제 비트검사 비트검사 AL 의 bit 0 또는 bit 1 이 1 이면 jump test al,00000011b jnz L1 AL 의 bit 0 과 bit 1 이모두 0 이면 jump test al,00000011b jz L1 AL 의 bit 0 과 bit 1 이모두 1 이면 jump (AL 내용변경 ) and al,00000011b ; clear unwanted bits cmp al,00000011b ; check remaining bits je L1 ; all set? jump to L1 컴퓨터정보통신 어셈블리언어 17 컴퓨터정보통신 어셈블리언어 18 예제 짝수, Zero 검사 짝수검사 if (wordval is even) goto L1 mov ax,wordval test ax,1 ; bit 0 set? jz L1 ; jump if ZF set Zero/Nonzero 검사 if (AL 0) goto L1 or al,al ; AL unchanged, Flag 영향 jnz L1 ; jump if not zero if (AL = 0) goto L1 or al,al ; AL unchanged jz L1 ; jump if zero 예제 최대값찾기 v1, v2, v3 에있는 unsigned 값의최대값을 max 에저장.data v1 word 10 v2 word 50 v3 word 30 max word?.code mov ax,v1 ; ax=v1 (assume v1 is larger) cmp ax,v2 jae L1 mov ax,v2 ; if (ax<v2)ax = v2 L1: cmp ax,v3 jae L2 mov ax,v3 ; if (ax<v3)ax = v3 L2: mov max,ax ; max = ax 컴퓨터정보통신 어셈블리언어 19 컴퓨터정보통신 어셈블리언어 20
배열검색 조건을만족하는원소찾기 0 이아닌원소를찾으면배열검색종료.data array SWORD 0,0,0,1,20,0,-1.code mov ebx, OFFSET array mov ecx, LENGTHOF array L1:cmp WORD PTR [ebx], 0 jnz found add ebx, 2 loop L1 jmp notfound found:... jmp quit notfound:... quit: ; array address ; loop counter 컴퓨터정보통신 어셈블리언어 21 문자열암호화 XOR의성질 : (X Y) Y = X 암호화및해독 암호화 : S = X K 암호해독 : S K = (X K) K = X KEY = 239 ; can be any byte value BUFMAX = 128.data buffer BYTE BUFMAX+1 DUP(0) bufsize DWORD BUFMAX.code mov ecx,bufsize ; loop counter mov esi,0 ; index 0 in buffer L1: xor buffer[esi],key ; translate a byte inc esi ; point to next byte loop L1 컴퓨터정보통신 어셈블리언어 22 6.4 조건부루프명령어 LOOPZ (LOOPE) 명령어 형식 : LOOPZ dest 동작 : ECX ECX 1 if ECX > 0 and ZF=1, jump to destination 용도 : 주어진값과일치하지않은첫배열원소를찾음 (ECX가 0이거나비교결과가같지않을때루프종료 ) LOOPNZ (LOOPNE) 명령어 형식 : LOOPNZ dest 동작 : ECX ECX 1 if ECX > 0 and ZF=0, jump to destination 용도 : 주어진값과일치하는첫배열원소를찾음 (ECX가 0이거나비교결과가같을때루프종료 ) 예제 양수를찾을때까지배열검색.data array SWORD -3,-6,-1,-10,10,30,40,4 sentinel SWORD 0.code mov esi,offset array mov ecx,lengthof array next: test WORD PTR [esi],8000h ; test sign bit pushfd ; push flags on stack flag add esi,2 popfd ; pop flags from stack loopnz next ; continue loop jnz quit ; none found sub esi,2 ; ESI points to value quit: 컴퓨터정보통신 어셈블리언어 23 컴퓨터정보통신 어셈블리언어 24
6.5 조건부구조 블록구조 IF 문 AND 복합수식 OR 복합수식 WHILE 루프 블록구조 IF 문 C 언어 어셈블리언어 if( op1 == op2 ){ 반대 mov eax,op1 cmp eax,op2 jne L1 Y = 2; mov X,1 } else { mov Y,2 then block X = 2; jmp L2 Y = 1; L1: mov X,2 } mov Y,1 else block L2: 컴퓨터정보통신 어셈블리언어 25 컴퓨터정보통신 어셈블리언어 26 블록구조 IF 문 - 다른방법 C 언어 어셈블리언어 if( op1 == op2 ){ mov eax,op1 cmp eax,op2 je L1 Y = 2; mov X,2 } else { mov Y,1 else block X = 2; jmp L2 Y = 1; L1: mov X,1 } mov Y,2 then block L2: AND 복합수식 AND 의 Short-circuit 평가 if ( 비교식1&& 비교식2&& 비교식 3) 앞의비교식이거짓이면뒤의비교식을실행하지않음 if (AL>BL && BL>CL) cmp al,bl ; 비교식1 ja L1 jmp next L1: cmp bl,cl ; 비교식2 ja L2 jmp next L2: mov X,1 ; then block next: 컴퓨터정보통신 어셈블리언어 27 컴퓨터정보통신 어셈블리언어 28
AND 복합수식 - 다른방법 OR 복합수식 C 언어 if (AL>BL && BL>CL) 어셈블리언어 반대 cmp al,bl ; 비교식1 jbe next L1: cmp bl,cl ; 비교식2 jbe next L2: mov X,1 ; then block next: OR 의 short-circuit 평가 if ( 비교식 1 비교식2 비교식 3) 앞의비교식이참이면뒤의비교식을실행하지않음 if (AL>BL BL>CL) cmp al,bl ; 비교식1 ja L1 cmp bl,cl ; 비교식2 jbe next L1: mov X,1 next: 컴퓨터정보통신 어셈블리언어 29 컴퓨터정보통신 어셈블리언어 30 WHILE 루프 C언어 while( a < b) { a++; b--; 반대 어셈블리언어 mov eax,a while: cmp eax,b jnl endwhile inc eax dec b jmp while endwhile: mov a,eax 컴퓨터정보통신 어셈블리언어 31