농소
nasm 반복문 연습2 본문
반복문을 이용하여 정수 5개를 입력하고,
입력한 정수들의 합을 구하는 코드를 작성하라.
< 결과물 >
extern printf
extern scanf
segment .data
input db '%d', 00
output db '%d', 10, 00
segment .bss
buffer resd 5
len resd 1
result resd 1
segment .text
global main
main:
mov eax, 0 ; eax레지스터 초기화
mov dword [result], eax ; result값 0으로 초기화
mov dword [len], eax ; len값 0으로 초기화
while1:
mov eax, dword [len] ; while문 buffer[0] ~ [4] 까지
cmp eax, 5
je while1_end ; [5]가 되면 while1_end 주소로 이동
mov edx, buffer
mov ecx, dword [len]
imul ecx, 4
add edx, ecx ; buffer의 크기가 4byte이므로 len * 4 하여 다음 배열주소로 이동
push edx
push input
call scanf
inc dword [len]
jmp while1 ; while1 주소로 이동
while1_end:
mov eax, 0 ; eax 초기화
mov dword [len], eax ; len값 초기화
while2:
mov eax, dword [len]
cmp eax, 5 ; 0 ~ 4
je while2_end
mov ecx, dword [len]
imul ecx, 4
mov edx, 0
mov edx, dword [buffer + ecx]
add dword [result], edx ; buffer[0]~[4] 메모리값을 순서대로 result에 축적
inc dword [len]
jmp while2
while2_end:
push dword [result]
push output
call printf ; result 값 출력
'Security > System Hacking' 카테고리의 다른 글
asm 지역변수 배열, main 함수의 인자 int argc, char *argv[ ] (0) | 2018.01.24 |
---|---|
프로세스 메모리 구조, 스택 레지스터, 함수 (0) | 2018.01.23 |
nasm 반복문 연습 (0) | 2018.01.19 |
asm 형변환, 관계연산, 제어문 (0) | 2018.01.18 |
어셈블리 사칙연산(ADD, SUB, MUL, IMUL, DIV, IDIV), 비트연산, 논리연산 (0) | 2018.01.17 |