changeset 63:eaa7a127027b

add asm
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 03 Feb 2021 13:30:03 +0900
parents 45395005373f
children f431abfba3b2
files paper/chapter/02-cbc.tex paper/master_paper.pdf paper/src/cbc_example_test.s
diffstat 3 files changed, 36 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/02-cbc.tex	Wed Feb 03 13:00:02 2021 +0900
+++ b/paper/chapter/02-cbc.tex	Wed Feb 03 13:30:03 2021 +0900
@@ -38,7 +38,8 @@
 
 この例では構造体\texttt{struct Test}をcodegear1に渡し、その次にcodegear2に継続している。
 codegear2からはcodegear3にgotoし、 最後にexitする。
-この例題をアセンブラに変換した結果を示す。
+この例題をアセンブラに変換した結果をソースコード\ref{src:cbcexample_test_asm}に示す。
+\lstinputlisting[label=src:cbcexample_test_asm, caption=ソースコード\ref{src:cbcexample_test}のアセンブラの一部]{src/cbc_example_test.s}
 初回のmainからcodeGear1への継続は、 CbCコンパイラの仕様上関数呼び出しが行われる。
 それ以外のcodegear2からcodegear3などのgotoは、jmp命令が実行される。
 jmp命令はプログラムカウンタを切り替えるのみの命令であるため、 callと違いスタックの操作をしていないことが分かる。
Binary file paper/master_paper.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/cbc_example_test.s	Wed Feb 03 13:30:03 2021 +0900
@@ -0,0 +1,34 @@
+codegear1:
+.LFB0:
+	.cfi_startproc
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	movl	%edi, %eax
+	movq	%rsi, %rcx
+	movq	%rcx, %rdx
+	movq	%rax, -32(%rbp)
+	movq	%rdx, -24(%rbp)
+	movl	-32(%rbp), %eax
+	addl	$1, %eax
+	movl	%eax, -16(%rbp)
+	movq	-24(%rbp), %rax
+	movq	%rax, -8(%rbp)
+	movl	-16(%rbp), %edx
+	movq	-8(%rbp), %rax
+	movl	%edx, %edi
+	movq	%rax, %rsi
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	jmp	codegear2
+	.cfi_endproc
+.LFE0:
+	.size	codegear1, .-codegear1
+	.section	.rodata
+.LC0:
+	.string	"Hello"
+	.text
+	.globl	codegear2
+	.type	codegear2, @function