アセンブリ勉強記録 7
勉強したこと
ポインタ
ポインタの指し先を書き換える場合はデータ長を指定しないといけない。
mov [test], 4 ; <- compile error mov byte[test], 4 ; <- ok!!
文字列
コードを写経した。基本的にこういうロジックはC言語で学んだことと同じくやるらしい。
global _start section .data test_string: db "abcdef", 0 section .text strlen: xor rax, rax .loop: cmp byte [rdi+rax], 0 je .end inc rax jmp .loop .end: ret _start: mov rdi, test_string call strlen mov rdi, rax mov rax, 60 syscall
呼び出し先退避レジスタ
絶対忘れる。
システムコール
Linuxのmanコマンドを使うと定義が確認できる。C言語での説明が書かれているが、引数の順序が一致しているらしい。上手くアセンブリに読み替えながら解読していくものらしい。。。
https://montcs.bloomu.edu/Information/LowLevel/Assembly/assembly-tutorial.html