728x90

loop.s

반복문은 again에 해당하는 곳이다.

 

_start부터 코드를 보면

rax,1  rdi,1 rsi,msg rdx 1등을 통해 sys_write(1,msg,1)을 호출할 준비를 하고있다. r10은 범용 레지스터로 어느 목적이든 사용가능한 레지스터이다. 

 

again을 보면 r10과 100을 비교한다. je done 명령어는 cmp를 통해 비교한 양쪽값이 같으면 done을 호출한다는 의미이다. 두개의 값이 같지않으면 syscall을 통해 msg 'A'를 출력하게 된다. 이후 rax에 1을 넣음으로써 sys_write를 호출할 준비를 해주고 r10의 값을 1증가시켜준다. inc 명령어는 해당 레지스터의 값을 1올려주는 명령어이다. jmp again을 통해 반복을 해준다. 문자열 출력과 r10값 증가가 100번 반복하여 r10과 100의 값이 같아지면 done으로 이동한다.

 

done 은 sys_exit를 호출한다. 프로그램을 종료시킨다.

728x90

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

inline func alloca  (0) 2020.03.10
nasm x64 assembly strlen 구현  (0) 2020.03.10
어셈블리 문법  (0) 2020.03.01
echo  (0) 2020.03.01
sum.c 스택 프레임  (0) 2020.03.01

+ Recent posts