ASM

gcc:末尾再帰の最適化…はされないなぁ…

ASM

ずいぶん前に話題にはなっていたようだけど。 #include <stdio.h> static int sum(int n) { if (n == 1) { return 1; } else { return n + sum(n - 1); } } int main() { printf("%d\n", sum(100)); return 0; } .file "foo.c" .text .p2align 4,,15 .def _sum; .scl </stdio.h>…

vc:末尾再帰の最適化はされたけど

ASM

※末尾再帰の理解が間違っているので参照しないでください(2015/08/07 12:17)一応。 #include <stdio.h> static int sum(int n, int r) { if (n == 1) return r; return sum(n - 1, r + n); } int main() { printf("%d\n", sum(5, 0)); return 0; } ; Listing generat</stdio.h>…

gcc:gccでも最適化はされた?…された!

ASM

下と同じソース。callは無くなったけど、_sumまではジャンプして、結局スタックを積んでるような。 「-O3」にしたら最適化された。 .file "foo.c" .text .p2align 4,,15 .def _sum; .scl 3; .type 32; .endef _sum: pushl %ebp movl %eax, %ecx movl %esp, %…

局所変数・関数呼び出し

ASM

int add(int a, int b) { int c; c = a + b; return c; } int main() { int n; n = add(1, 2); return n; } ; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01 TITLE C:\Program Files\Microsoft Visual Studio 9.0\VC\foo.…

link:Microsoft Macro Assembler リファレンス

ASM

http://msdn.microsoft.com/ja-jp/library/afzk3475.aspx とりあえずメモだけ。

簡単な出力

ASM

VCとgccでアセンブラを出力してみる。 int i; int j = 100; int k = 0; int main() { i = 1; j = 2; k = i + j; return 0; } GCC .file "foo.c" .globl _j .data .align 4 _j: .long 100 .globl _k .bss .align 4 _k: .space 4 .def ___main; .scl 2; .type …

-fverbose-asm

ASM

fverbose-asmでもう少し詳しくなった。 .file "foo.c" # GNU C version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) (i686-pc-cygwin) # compiled by GNU C version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125). # GGC heuristics: --para…

アセンブラ入門:6章まで

ASM

5章・6章はほぼリファレンス。MS-DOSのファンクションコールは32ビットでも使えるのかなぁ?高級言語プログラマのためのアセンブラ入門作者: 林晴比古出版社/メーカー: ソフトバンク クリエイティブ発売日: 2005/11/30メディア: 単行本購入: 2人 クリック:…

Hello, ASM

ASM

CODE SEGMENT ASSUME cs:CODE,ds:CODE ORG 100H START: mov ah,09H mov dx,OFFSET MSG int 21H mov ah,4CH int 21H MSG DB "Hello, World",0DH,0AH,'$' CODE ENDS END START 高級言語プログラマのためのアセンブラ入門作者: 林晴比古出版社/メーカー: ソフト…