効率的なアセンブラコードの書き方

C言語では、変数の概念を持っていますが、何のコンパイルはありません。バイト数はメモリによって占め変数指定は、それは読んで、そのアドレスを記述することで参照することができ、我々は、C言語、およびアセンブリコードで記述された変数名と同じデータ型を定義することができます。アドレスに変数名を交換した後。
例えば

.section .rodata
	.LC0:.string "%d,%d\n"

.text
.global main
main:
	pushl %ebp
	movl %esp,%ebp
	
	subl $12,%esp
	movl $1,a1
	movl $2,b1
	
	pushl b1
	pushl a1
	pushl $.LC0
	call printf
	addl $12,%esp
	
	movl a1,%eax
	movl %eax,tmp
	movl b1,%eax
	movl %eax,a1
	movl tmp,%eax
	movl %eax,b1
	
	pushl b1
	pushl a1
	pushl $.LC0
	call printf
	addl $12,%esp
	
	movl $0,%eax
	leave
	ret

-4(%のEBP)のA1、B1に-8(%のEBP)、-12(%のEBP)にTMP

.section .rodata
	.LC0:.string "%d,%d\n"

.text
.global main
main:
	pushl %ebp
	movl %esp,%ebp
	
	subl $12,%esp
	movl $1,-4(%ebp)
	movl $2,-8(%ebp)
	
	pushl -8(%ebp)
	pushl -4(%ebp)
	pushl $.LC0
	call printf
	addl $12,%esp
	
	movl -4(%ebp),%eax
	movl %eax,-12(%ebp)
	movl -8(%ebp),%eax
	movl %eax,-4(%ebp)
	movl -12(%ebp),%eax
	movl %eax,-8(%ebp)
	
	pushl -8(%ebp)
	pushl -4(%ebp)
	pushl $.LC0
	call printf
	addl $12,%esp
	
	movl $0,%eax
	leave
	ret
彼は185元記事に公開 ウォン称賛18 ビュー160 000 +を

おすすめ

転載: blog.csdn.net/pk_20140716/article/details/103344905