오늘은 입력한 값을 그대로 출력하는 프로그램을
어셈블리로 구현해볼라고 합니다.

일단 텍스트 섹션을 만들어줍니다.
오늘은 특정 변수에 문자를 집어넣어 하는 것이 아니기 때문에
데이터 섹션은 만들어 주지 않아도 됩니다.

여기서 xor이라는 것이 나옵니다.
rax는 만약 같은 값이 있다면 0을 반환하고
다른 값이 있다면 1을 반환합니다.
위 코드에서는 rax로 같기 때문에 rax에 0을 대입한것과 같다
[ mov rax, 0 이라고 적어도 무방하다 :) ]
그다음 rbx와 rcx, rdx도 rax을 이용하여 0으로 초기화를 해준다.
rbx : 베이스 레지스터
rcx : 카운터 레지스터
rdx : 데이터 레지스터

sup은 공간 확보를 위한 명령어 입니다.
즉 rsp( rbp = 스택이 시작하는 베이스 포인트 )위로 64 만큼의 공간을 확보하겠다는 소리입니다.
시스템 콜 테이블을 참고하면
rdi가 0일때는 system, write모드로 들어가게 됩니다.
그다음 rsi에게 주소를 넣어주고
rdi에 자신이 표현하고 싶은 만큼의 크기를 대입합니다.

이건 출력과 종료를 위한 코드입니다.
저번에 정리를 했으니 특별한 정리는 하지 않겠습니다.
https://confidence-10211.tistory.com/m/9
실행 파일을 만들어 실행을 한다면 정상적으로 출력을 하게 될겁니다.
오개념이 있다면 더 열심히 공부하겠습니다..
'Assemble' 카테고리의 다른 글
[Assemble] 반복문 구현하기 (0) | 2020.06.01 |
---|---|
[Assemble] 기초 문법 정리 (0) | 2020.05.31 |
[Assemble] 메모리 구조 (0) | 2020.05.27 |
[Assemble] Hello World! (0) | 2020.05.27 |