반응형
어셈블리어를 이용하여 1부터 10까지의 합을 구하는 프로그램을 개발해보자.
본 필자는 Visual Studio 2017과 Irvine 라이브러리를 활용하여 개발할 예정이다.
1. 문제
- 환경 : Visual Studio 2017, Irvine 라이브러리, x86 assembly
- 1부터 10까지 합산 값을 출력하고 레지스터를 덤프하는 프로그램을 개발하라.
2. 문제 해결 방법
- 문자열을 출력한다.
- eax를 xor로 초기화 시킨다.
- ecx에 10을 mov 한다.
- loop를 돌며 eax에 ecx 값을 더한다.(지정된 위치로 넘어가고 ecx가 1씩 감소하며, ecx가 0이되면 빠져나온다.)
- 결과 값을 출력한다.
- 덤프된 레지스터를 출력한다.
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 |