목록Programming (132)
외로운 Nova의 작업실
안녕하세요, 오늘은 JMP 와 LOOP 명령어가 무엇인지 배워보고 직접 실습해보는 시간을 가져보도록 하겠습니다. JMP 명령어 JMP destination 은 코드레이블로 표시되는 목적지로 무조건 이동시킵니다. 간단한 JMP 명령어 코드를 봐보도록 하겠습니다. top : ... ... JMP top JMP 명령어에의해 위 코드는 반복되게 됩니다. 또한 JMP는 무조건 적이여서 루프를 빠져나가는 다른 방법이 없으면 위와 같은 루프는 끝없이 계속될 것 입니다. LOOP 명령어 LOOP destination 은 ECX가 자동적으로 카운트로 사용되며 루프를 반복할때마다 ECX의 값을 감소시킵니다. 또한, 루프의 목적지는 현재 위치 카운터에서 -128~+127 바이트 내에 있어야합니다. LOOP 명령어의 실행은 ..
안녕하세요, 이번에는 어셈블리에서 간접 주소 지정 이론 및 실습을 진행해보도록 하겠습니다. 직접, 간접 주소 지정 직접 주소 지정의 경우 주소를 직접 써넣는 것입니다. 예를 들어 코드를 보시죠. include c:\assembly\irvine32.inc includelib c:\assembly\irvine32.lib includelib c:\assembly\kernel32.lib includelib c:\assembly\user32.lib .data array BYTE 10, 20, 30, 40 .code main PROC mov al, [00404000b];al = 10 mov ah, [00404001b];ah = 20 mov bl, [00404002b];bl = 30 mov bh, [00404003b..
안녕하세요, 오늘은 데이터 관련 연산자와 디렉티브 이론 및 실습을 해보겠습니다. OFFSET 연산자 OFFSET 연산자는 변수의 주소를 반환하는 연산자 입니다. 정확히 말하면 데이터 세그먼트 시작으로부터의 레이블의 바이트 단위의 거리를 반환해줍니다. 실습으로 한번 알아보겠습니다. include c:\assembly\irvine32.inc includelib c:\assembly\irvine32.lib includelib c:\assembly\kernel32.lib includelib c:\assembly\user32.lib .data bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ? .code main PROC mov eax, OFFSET bVal mov ebx,..
안녕하세요, 오늘은 덧셈과 뺄셈 관련하여 어셈블리어를 배워볼까합니다. INC, DEC 형식 : INC reg/mem, DEC reg/mem INC는 피연산자의 값을 1증가시키는 명령어 입니다. 이에 반해, DEC는 피연산자의 값을 1 감소시키는 명령어 입니다. ADD 형식 : ADD dest, source ADD는 source의 값을 dest의 값에 더하여 dest에 저장합니다. SUB 형식 : SUB dest, source SUB은 source의 값을 dest의 값에서 뺀다음 dest에 저장합니다. NEG 형식 : NEG reg/mem NEG는 피연산자를 2의 보수로 계산하여 부호를 바꿉니다. 산술 연산의 결과는 상태 플래그를 변화시킵니다. 이제 산술연산의 결과로 어떻게 상태 플래그가 변하는지 알아봅시..
안녕하세요, 이번시간에는 어셈블리어에서 데이터 전송에 대해서 배워보도록 하겠습니다. MOV MOV destination(첫번째 피연산자), source(두번째 피연산자) MOV 명령어는 두번째 피연산자의 값을 첫번째 피연산자로 값을 복사합니다. mov를 사용할때 주의할점은 메모리의 값을 다른 메모리로 전송을 못한다는 것입니다. 메모리 간의 전송을 할때는 레지스터를 사용하여 교환을 이루어지게 해줘야합니다. MOVZX MOVZX destination(첫번째 피연산자), source(두번째 피연산자) MOVZX 명령어는 두번째 피연산자의 값을 첫번째 피연산자로 값을 복사하면서, 남는 공간을 0으로 채우게됩니다. 예를 들어, eax에 AADDBBCC가 있다고 했을때 MOVZX eax, AABB를 하게되면 eax..
안녕하세요, 오늘은 덧셈과 뺄셈을 어셈블리어로 실습해보는 시간을 가져보도록 하겠습니다. ;this program adds adn subtracts 32-bit integers. include c:\assembly\irvine32.inc includelib c:\assembly\irvine32.lib includelib c:\assembly\kernel32.lib includelib c:\assembly\user32.lib .code main PROC mov eax, 10000h add eax, 40000h sub eax, 20000h call DumpRegs exit main ENDP END main 위 어셈블리 코드는 eax 레지스터에 10000h를 옮기고 40000h를 더하고 20000h를 빼서 결국..
안녕하세요, 정말 오랜만입니다. 포스팅 안했던 시간동안 저의 인생에대해 고민이 많았고, 결국에 저는 좋아하고 잘하는 일을 하기로 했습니다. 아무튼 이 어셈블리 언어 공부를 이어서 해볼까합니다. 전에는 irvine32 라이브러리를 추가하지 못한 채로 masm32를 사용해왔지만, 제가 라이브러리를 추가하는 방법에대해서 알아왔습니다. 바로 네이버 지식인으로 찾아냈습니다. https://kin.naver.com/qna/detail.naver?d1id=1&dirId=10401&docId=424575505&scrollTo=answer1 masm32에 irvine32 라이브러리 추가하기 안녕하세요, 평범한 대학생입니다. 이번에 어셈블리어를 x86프로세서를 위한 어셈블리언어 6판 책으로 실습해보려고합니다.그래서 mas..
안녕하세요. 오늘은 어셈블리어에서의 데이터 전송 명령어와 덧셈과 뺄셈을 정리해 보도록 하겠습니다. 데이터 전송 명령어 어셈블리어에서는 레지스터와 즉시값과 메모리에대해서 데이터를 전송할 수있습니다. 예를 들어 레지스터에서 상수로 데이터를 전송할 수 있습니다. 이를 어떻게 어셈블리에서 구현하는지에대해서 알아보겠습니다. MOV 명령어 MOV 명령어의 기본적 쓰임은 아래와 같습니다. MOV 목적지 , 소스 소스에서 목적지로 데이터를 복사하는 명령어 입니다. MOV는 다음과 같은 규칙에 따라서만 가능합니다. 1. 목적지와 소스는 같은 크기여야합니다. 2. 목적지와 소스가 모두 메모리일 수 는 없습니다. 3. CS, EIP, IP는 목적지 일 수 없습니다. 4. 즉시값이 세그먼트 레지스터에 이동 될 수 없습니다. ..
안녕하세요. 저번 시간까지 tutorial을 마치고 1장에서 공부하려고했던 어셈블리어 책을 공부해보겠습니다. 항상 저는 책을 읽고 중요한 내용만 포스팅을 합니다. 따라서 책을 읽지않아도 해당 포스팅만 이해하신다면 큰 도움이 될실겁니다. 이번 10장에서는 어셈블리언어의 기본 구성요소에 대해 정리해보도록 하겠습니다. 기본적으로 어셈블리어에는 c에서와 마찬가지로 정수 상수를 가지고있습니다. 예를 들어 1, 3, 5와 같습니다. 또한, 진수를 표기하여 해당 숫자가 무슨 진법을 사용하는지 알수 있습니다. 아래는 진법에대한 표기방법입니다. h 16진수(Hexdecimal) q/o 8진수(Octal) d 10진수(Decimal) b 2진수 r 부호화실수 t 10진수 y 2진수 예시를 한번 들어보도록 하겠습니다. 0A..
안녕하세요. 오늘은 지난시간에 이어 demo5 코드 리뷰를 해보도록 하겠습니다. 먼저 demo5 파일을 열어줍니다. 코드를 긁어와 보겠습니다. ; カカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカ? ; Build this with the "Project" menu using ; "Console Assemble & Link" comment * カカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカ? This demo shows how to perform simple addition using registers and assembler instructions in the first example. The second example shows how to compare a memory va..