🌳

Tiny CCでasmファイルのアセンブル

2021/02/11に公開

はじめに

先日、Tiny CCのデバッグ環境を作りました。

https://zenn.dev/saitoyutaka/articles/920c3322fcb94b

i386-asm.c
あたりの処理を追いたくなってきたので、適当な
アセンブリコード(hello world)を用意しましてみました。

asm 版 Hello world

Linux Assembly HOWTO Chapter 6. Quick start を参考に、以下のようなコードを用意しました。
変更点は.text.section .textに変えた点くらいでしょうか。

.section .text
.global _start

_start:
	  movl    $len,%edx           # third argument: message length
	  movl    $msg,%ecx           # second argument: pointer to message to write
	  movl    $1,%ebx             # first argument: file handle (stdout)
	  movl    $4,%eax             # system call number (sys_write)
	  int     $0x80               # call kernel

	  movl    $0,%ebx             # first argument: exit code
	  movl    $1,%eax             # system call number (sys_exit)
	  int     $0x80               # call kernel

.data                           # section declaration

msg:
	.ascii    "Hello, world! tcc asm\n"   # our dear string
	len = . - msg                 # length of our dear string

こちらを以下のようにtccのでアセンブルをすると、
ちゃんと実行できます。

$ ./tcc -nostdlib  asm-hello.s 
$ ./a.out 
Hello, world! tcc asm

前回用意したでデバッグ環境で
i386-asm.c内の処理でブレークを貼って止めることも出来ました。

Discussion