반응형

어셈블리어를 이용하여 1부터 10까지의 합을 구하는 프로그램을 개발해보자.

본 필자는 Visual Studio 2017과 Irvine 라이브러리를 활용하여 개발할 예정이다.


1. 문제

  • 환경 : Visual Studio 2017, Irvine 라이브러리, x86 assembly
  • 1부터 10까지 합산 값을 출력하고 레지스터를 덤프하는 프로그램을 개발하라.


2. 문제 해결 방법

  1. 문자열을 출력한다.
  2. eax를 xor로 초기화 시킨다.
  3. ecx에 10을 mov 한다.
  4. loop를 돌며 eax에 ecx 값을 더한다.(지정된 위치로 넘어가고 ecx가 1씩 감소하며, ecx가 0이되면 빠져나온다.)
  5. 결과 값을 출력한다.
  6. 덤프된 레지스터를 출력한다.


3. 코딩

TITLE Program asm2sum.asm(asm2sum.asm)
; 프로그램 설명문 : 1부터 10까지의 합을 구해 출력하는 프로그램

INCLUDE c:\Irvine\Irvine32.inc

.data
str_data db "1 + 2 + 3 ... + 10 = ", 0	; 문자열 str_data db(1바이트)크기 선언

.code
main	PROC

mov 	ecx, 10					; ecx에 10을 mov
xor 	eax, eax				; eax는 0

LP:
add 	eax, ecx				; eax에 ecx를 더해 eax에 결과값 저장
loop	LP						; ecx가 0보다 크면 LP로 다시 돌아감, ecx 1 감소

mov 	edx, offset str_data	; str_data offset 주소 edx에 mov
call	writeString				; edx에 있는 값 문자열 출력

call	WriteDec				; eax에 있는 값 10진수 출력
call	Crlf					; 줄 바꿈
call	DumpRegs				; 덤프된 레지스터 출력

exit							; 종료
main	ENDP
END main

 

실행 결과는 다음과 같다.


어셈블리를 통해 다양한 문제를 풀어볼 예정이다.

반응형

'Programming > Language' 카테고리의 다른 글

[Assembly] 파일 읽고 출력해보기  (0) 2020.06.06
[Assembly] 문자열 입력과 출력  (0) 2020.06.05
[C++] STL - multimap 공부  (0) 2020.05.24
[C++] STL - map 공부  (0) 2020.05.14
[C++] STL - set 공부  (0) 2020.05.14

+ Recent posts