농소

nasm 반복문 연습2 본문

Security/System Hacking

nasm 반복문 연습2

농소 2018. 1. 20. 22:31

반복문을 이용하여 정수 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 값 출력