なぜrcxをpushする必要があるのか?
アセンブラを独学中です。大学で情報をやっているわけでもないのであまり専門用語を使う際は簡単な説明を入れてもらえると助かります。
Hello, worldを10回表示させるプログラムを書きましたが
rcxをsyscallの前後でスタックから出し入れする必要がありました。これはなぜでしょうか?
global _main
section .text
_main:
mov rcx, 10
loop_label:
mov rax, 0x2000004
mov rdi, 1
mov rsi, msg
mov rdx, msg.len
push rcx ; to avoid register rcx from changing
syscall
pop rcx ; to avoid register rcx from changing
; inc rcx
cmp rcx, 10
loop loop_label
mov rax, 0x2000001
mov rdi, 0
syscall
section .data
msg: db "Hello, world!", 10
.len: equ $ - msg