Assembly

    2013.09.02_ASM_Convering Instruction

    Division Instruction - dividend = quotient*divisor + remainder => 나눌때는 항상 DX 를 초기화(1 or 0)하거나 부호를 결정하여 확장 해주어야 한다.매번 대입명령어나 빼기 명령어를 이용하여(mov edx,0 , sub edx, edx ) 값을 정해줘야 하는데 이를 간단하게 변환해주는 명령어가 있다. cbw, cwd, cdq, cwde Instructions ▶ 부호 변환이 자유롭다. 0 or 1 을 일일히 넣어주는 것보다, 이 명령어를 쓰면 값의 앞부분을 ( F or 0 으로 )채워준다. - cbw : AL => AX - cwd : AX => DX:AX - cdq : EAX => EDX:EAX - cwde : AX => EAX ( 단순 확장 , 캐스..

    2013.08.29_Division Instructions

    Division Instructions - AX 는 2byte 이므로 1byte( byte ) 로 나누면 1byte ( 몫 ) 과 1byte ( 나머지 ) 가 나옴 - 마찬가지로 2byte( word ) 로 4byte ( DX:AX ) 를 나누면 2byte ( AX ) 와 2byte ( DX ) 가 나옴 - EDX:EAX ( 8byte ) = doubleword(4byte) / EAX(4byte) + [EDX(4byte)] 예제 소스 .386 ;// 386 이상의 기계어를 사용하겠음 .MODEL FLAT ;// MEMORY MODEL > 메모리형태 평평한 형태 ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD ;// ExitProcess DWORD(4byte), ..

    2013.08.28_ASM_Basic Instruction

    ------------------------ 4장 Basic Instruction ------------------------- inc and dec instructions - inc 와 dec 명령어 => C 언어에서 ++ or -- 와 동일, 7F FF FF FF 가 양수의 가장 큰 수 이므로, 여기서 ++ 을 하면 Overflow 되면서 음수가 되기 때문에 EFLAGS의 SF , OF 가 1이 됨 - neg Instruction => 2의 보수를 취한 것과 같음. 연산 해보기 예제 소스 .386.MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD include io.h cr equ 0dh Lf equ 0ah .STACK 4096 .DATA ..

    2013.08.27_EFLAGS레지스터의구조

    * EFLAGS (Extended FLAGS) 레지스터의 구조 ; 목적에따라 상태 플래그, 제어 플래그, 시스템 플래그로 나눌 수 있다. 플래그의 경우 1을 지정하는 것을 세트(set)라고하고 0을 지정하는 것을 클리어(clear) 혹은 리셋(reset)이라고 한다. 보통 1일 경우 Enable, 0일 경우 disalble을 가지지만 간혹 0이 enable, 1이 disable값을 가지는 경우가 있다. *상태 플래그 (Status Flag) - Carry Flag (CF : bit 0) ; 산술연산 수행 결과가 자리 올림이나 자리 내림이 발생 할때 set(1)된다. 상태 플래그 중 유일하게 어셈블리어 STC, CLC, CMC instruction을 이용하여 플래스 값을 직접 수정 가능한 플래그이다. - ..

    2013.08.27_ASM_APPENDIX 활용하기 and 4장 Basic Instruction

    Debug Mode => Step Into(F8 of F11)를 누르면 Debug가 진행. 레지스터의 변한 값이 EAX, EBX 에 저장되며, 레지스터에 저장될때는 Big Endian 으로 적힌다. 반대로 메모리에는 little Endian 으로 적힌다. => View에서 보고싶은 옵션을 선택함. Memory는 smart로 잡아주었다. (entry point가 smart이므로) APPENDIX E => 위의 Debug Mode 의 값을 보면 알 수 있듯이 EAX는 B8의 Opcode(기계어) 를 가지고, EBX는 BB를 가진다. => 00 00 03 e8 은 1000의 값을 Hex 로 변경 한 것임. --------------- 4장 Base Instruction------------------- Cop..

    2013.08.26_ASM_Constant, Instruction Operand(s) 해석

    _________________ASM________________________________________________________ 어셈블리어에서 수(진수)의 표현 hexadecimal(16진수) : 수의 뒤에 Hbinary(2진수) : 수의 뒤에 Boctal(8진수) : 수의 뒤에 O 또는 Qdecimal(10진수) : 수의 뒤에 아무것도 적지 않으면 10진수 임 ☞ - 를 붙이지 않으면 unsigned이고 - 를 붙이면 signed 임 , 즉 부호를 붙이면됨.byte1 BYTE 255 ; value is FFbyte5 BYTE -1 ; value is FF ※ starsAndSpaces BYTE 24 DUP("* "), '*' ; "* " 로 채워진 24바이트와 *의 아스키코드 값을 합한 25바..