Mercurial > hg > Papers > 2021 > anatofuz-master
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と違いスタックの操作をしていないことが分かる。
--- /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