Assembly (19) 썸네일형 리스트형 8-1강 - Advanced Procedures 1 (Stack Frames) 현대 프로그래밍 언어들은 subroutine, local variable을 stack의 형태로 저장한다. 1. Stack Frames (Stack Parameters) 기존에는 register를 parameter로 사용했다. 이번 단원에서는 runtime stack에서 parameter를 받는다. 원래 window 함수들은 register parameter와 stack parameter를 받는다. 1) Stack Frame 1> ESP가 아닌 EBP를 사용해서 stack 내부의 local variable, parameter, return address에 접근하는 기법 2> EBP는 기준점으로 stack에 고정되어 있어서 base pointer의 역할을 한다. (ESP는 프로그램 안에서 수시로 변경된다.).. 7-3강 - Integer Arithmetic 3 (Exteded addition & subtraction) 4. Extended Addition and Subtraction 1) ADC ADd with Carry 1> 형식 및 사용 ADC destination, source - destination += (source + CF) - 잘 응용하면 자리수를 2배로 확장한 수의 덧셈을 구현할 수 있다. 2> 예제 1 - eax에서 FFFFFFFF 2개를 더하면 1이 사라지고 carry flag로 이동한다. - edx 또한 그냥 0을 더하면 0이어야 하는데 adc로 더해서 CF인 1이 추가로 더해진다. - 그래서 FFFFFFFF + FFFFFFFF를 register 2개로 구현할 수 있다. 3> 예제 2 2) SBB SuBtract with Borrow 1> 형식 및 사용 SBB destination, source .. 7-2강 - Integer Arithmetic 2 (곱셈과 나눗셈) 3. Multiplication and Division Instruction 1) MUL unsigned integer multiplication 1> 형식 및 사용 MUL operand - al/ax/eax와 operand를 곱해서 ax/dx:ax/edx:eax에 저장한다. (결과는 2배의 자리로 저장한다.) - 특히 16bit와 32bit인 경우는 2개의 register를 이용해서 값을 저장한다. 2> 규칙 - size를 맞춰줘야 한다. - al/ax/eax와 operand 모두 unsigned integer여야 한다. - operand 자리에는 register 혹은 memory가 와야한다. 2) IMUL signed integer multiplication 1> 형식 3) DIV unsigned i.. 7-1강 - Integer Arithmetic 1 (shift와 rotate) 1. Shift and Rotate Instructions 1) Logical Shift 논리 shift는 새로 생긴 자리를 0으로 채운다. 밀려 나가는 값은 CF로 들어간다. 1> SHL [SHift Left] (Instruction) => 2^n을 곱한 것과 같다. - 왼쪽으로 한 칸씩 shift - 새로 생긴 자리는 0으로 채운다. - 마지막으로 밀려 나간 값은 CF에 저장된다. 2> SHR [SHift Right] (instruction) => 2^n을 나눈 것과 같다. - 오른쪽으로 한 칸씩 shift - 새로 생긴 자리는 0으로 채운다. - 마지막으로 밀려 나간 값은 CF에 저장된다. 2) Arithmetic Shift 새로 생긴 자리를 sign bit로 채운다. 밀려 나가는 값은 CF로 들어.. 6-3강 - Conditional Processing 3 (Conditional Structures 조건문) 4. Conditional Structures 1) IF 1> 간단한 if문 예시 1 2> Unsigned 예시 3> Signed 예시 2) IF문 내부의 AND 구현 'P AND Q'에서 P가 거짓이면 Q는 건너뛴다. 1> 기본 cmp al, bl ; first expression... ja L1 jmp next L1: cmp bl, cl ; second expression... ja L2 jmp next L2: ; both are true mov X, 1 ; set X to 1 next: 2> 더 짧은 code ("fall through"방식) 기존 code를 뒤집어서 cmp al, bl ; first expression... jbe next ; quit if false cmp bl, cl ; sec.. 6-2강 - Conditional Processing 2 (conditional jump, loop) 2. Conditional Jumps 특정 register나 flag 조건을 만족하면 conditional jump instruction가 label로 branch 0) Examples: - JB, JC jump to a label if the Carry flag is set. - JE, JZ jump to a label if the Zero flag is set. - JS jumps to a label if the Sign flag is set. - JNE, JNZ jump to a label if the Zero flag is clear. - JECXZ jumps to a label if ECX equals 0. 1) Flag에 의한 Jump 2) equality에 의한 Jump 3) unsigned.. 6-1강 - Conditional Processing 1 (bool과 비교 명령어) (AND, OR, XPR, NOT, TEST, CMP) 1. Boolean and Comparison Instructions 1) AND (Instruction) 1> 사용 AND destination, source 2> 규칙 (MOV와 규칙이 같다.) - source나 destination 중 하나에만 메모리가 올 수 있다. (메모리에서 메모리로 이동 불가) - destination에 CS, EIP, IP가 올 수 없다. - immediate로 이동시킬 수 없다. 3> 예시 1 4> 예시 2 mov al,'a‘ ; AL = 01100001b and al,11011111b ; AL = 01000001b 2) OR (Instruction) 1> 사용 OR destination, source 2> 규칙 (MOV와 규칙이 같다.) - source나 destinat.. 5-3강 - Procedure 3 (Link Library) 3. Link Library 1) Link Library Machine code로 assemble된 procedure를 포함하고 있는 파일 2) Link Library 목록 1> Clrscr - Clears the console and locates the cursor at the upper left corner. 2> Crlf - Writes an end of line sequence to standard output. 3> Delay - Pauses the program execution for a specified n millisecond interval. 4> DumpMem - Writes a block of memory to standard output in hexadecimal. 5> Dump.. 이전 1 2 3 다음 목록 더보기