본문 바로가기

IT/어셈블리어

JMP/JA/JB/JE 를 사용한 간단한 어셈블리어 예제 안녕하세요 오랫만에 포스팅인것같네요 ^^ 오늘은 JMP, JA, JB, JE를 사용해 아주 간단한 예제를 만들어보고 무슨 명령어인지 파악해보겠습니다. 우선 예제를 만들기 위해서 JMP JA JB JE에 대해서 알아봐야겠죠? JMP JA JB JE는 점프문으로 c언어에서 goto와 거의 같은 역활을 한다고 생각하시면 됩니다. 그런데 위 점프 명령어를 알아보기 전, 하나의 명령어를 알아야 할 필요가 있습니다. CMP 라는 명령어인데요. 이 명령어는 CMP A, B라고 했을때 A와 B를 비교하여 ZF와 CF의 값을 변동시키는 역활을 합니다. 사실 ZF와 CF는 이 예제를 만들 때 주의깊게 알 필요는 없으며 그냥 A B를 비교하여 ZF와 CF에 값들을 변동시킨다 라고만 알고있으면 됩니다. JMP Lable JM.. 더보기
어셈블리어를 이용하는 간단한 계산기 프로그램(예제) 안녕하세요. 이번 포스팅은 제가 학교 쉬는시간 때 틈틈이 짠 허접하지만, 프로그래밍 언어라면 한번씩 해보는 계산기 프로그램을 소개하겠습니다. 프로그램을 소개하기 앞서 Visual Studio 2008은 어셈블리어를 지원하고 그렇기에 Visual Studio 2008로 프로그램을 짯습니다. 한번 프로그램을 쭉 읽어보시고 이게 무엇을 뜻하는지 한번 생각해보세요. 그런데 사실 저는 printf와 scanf를 어셈블리어로 다룰줄 모릅니다. ㅜㅜ 그래서 그 부분들은 c로 대체하고 연산부분만 어셈으로 만들어봤습니다. 다 읽어보셧나요? 여기서 생소한게 있을텐데 바로 eax일것입니다.(아니면 죄송....) 그럼 설명해드리겠습니다. eax란 레지스터중 하나를 뜻합니다. 레지스터란 또 무엇이냐.. 하면 레지스터는 CPU(.. 더보기
어셈블리어 스택조작(PUSH, POP) 스택의 명령어는 6가지가 있는데, 그 중 가장 중요한 PUSH와 POP에 대해서 포스팅하겠습니다. PUSH AX 스택에 AX 레지스터를 저장하는 명령어입니다. POP AX 스택에 저장되어있는 값을 AX에 저장합니다. 그럼 가볍게 예제를 들어 설명하도록 하겠습니다. MOV AX, 51h MOV BX, 4Fh XCHG AX,BX PUSH AX MOV AX, 34h POP BX PUSH BX POP AX 출력 결과가 예상되시나요? 답은 AX=4Fh BX=4Fh 입니다. MOV AX,51h // AX=51h MOV BX,4Fh // BX=4Fh XCHG AX,BX // AX와 BX의 값 교환 PUSH AX // 스택에 AX(4Fh) 푸시 MOV AX,34h // AX=34h POP BX // BX=4Fh PUS.. 더보기
어셈블리어 명령어 INC A increase의 줄임말로 A의 값을 1 추가합니다.. A++와 같은 뜻 ex)INC AX : AX 의 값 1 추가 DEC A decrease의 줄임말로 A의 값을 1 감소시킵니다. A--와 같은 뜻 ex)DEC AX : AX 의 값 1 감소 MOV A B move의 줄임말로 B를 A로 복사합니다. ex)MOV AX, 0x05 : AX의 값이 0x05로 복사한다. XCHG A B exchange의 줄임말로 A와 B의 값을 서로 바꿉니다. ex)XCHG AX BX : AX와 BX의 값을 서로 바꾼다. 수학 연산자 가볍게 소개하자면 ADD SUB MUL DIV 가 있으며 각각 + - * / 를 의미합니다. ADD A B // A = A + B : add 그대로이며 B의 값을 A에 더합니다. SUB.. 더보기