p20250903a
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* プリプロセッサでアセンブラを改善する
-(by [[K]], 2025.09.03)
** (0) はじめに
-先日、 https://github.com/buntan-pc/buntan-pc/wiki/ADR-3...
-ここには、スタックから2つの値をPOPして、それを乗算して、...
-これを何か簡単な方法で(=CPUをFPGAで作り直すとかじゃな...
-ここでは、その思い付きに関する話を書きます。
** (1)
-とりあえず、以下のようなテキストファイルを作りました。
-test.c
#include "asmcpp.h"
#define t dword [ebp+16]
#define u dword [ebp+20]
MUL32(t, 2, 3); // こんな感じで書けたらいいよねー.
ADD32(u, 1, t);
#undef t
#undef u
-asmcpp.h
#define ADD32(z, x, y) \
mov eax,x; \
add eax,y; \
mov z,eax;
#define MUL32(z, x, y) \
mov eax,x; \
imul eax,y; \
mov z,eax;
~
-これを以下のコマンドラインで変換してみました。
prompt>gcc -E -o out.txt test.c
-out.txtはこうなっていました。
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
# 1 "asmcpp.h" 1
# 2 "test.c" 2
mov eax,2; imul eax,3; mov dword [ebp+16],eax;;
mov eax,1; add eax,dword [ebp+16]; mov dword [ebp+20],e...
-うーん、そうか、プリプロセッサだと改行が消えちゃうわけで...
-結構めんどくさい気もしたので、自作のコンパイラを作るとき...
** (2)
-これって、 MUL32(t, 2, 3); とか ADD32(u, 1, t); の部分は...
-今回の例はレジスタマシン風な命令を整備しましたが、もちろ...
-ちなみに今回の test.c の内容は[[p20250815a]]の(2-1)の出...
-[Q] なぜCコンパイラのプリプロセッサを使ったの?アセンブ...
--[A] それはそうなのですが、アセンブラのマクロ機能はアセ...
--だからアセンブラのマクロ機能が好きなら、もちろんそれで...
-[Q] なんで test.c っていうファイル名なんだよ!これはC言...
--[A] す、すみません。たとえば.txtとかにするとgccがプリプ...
終了行:
* プリプロセッサでアセンブラを改善する
-(by [[K]], 2025.09.03)
** (0) はじめに
-先日、 https://github.com/buntan-pc/buntan-pc/wiki/ADR-3...
-ここには、スタックから2つの値をPOPして、それを乗算して、...
-これを何か簡単な方法で(=CPUをFPGAで作り直すとかじゃな...
-ここでは、その思い付きに関する話を書きます。
** (1)
-とりあえず、以下のようなテキストファイルを作りました。
-test.c
#include "asmcpp.h"
#define t dword [ebp+16]
#define u dword [ebp+20]
MUL32(t, 2, 3); // こんな感じで書けたらいいよねー.
ADD32(u, 1, t);
#undef t
#undef u
-asmcpp.h
#define ADD32(z, x, y) \
mov eax,x; \
add eax,y; \
mov z,eax;
#define MUL32(z, x, y) \
mov eax,x; \
imul eax,y; \
mov z,eax;
~
-これを以下のコマンドラインで変換してみました。
prompt>gcc -E -o out.txt test.c
-out.txtはこうなっていました。
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
# 1 "asmcpp.h" 1
# 2 "test.c" 2
mov eax,2; imul eax,3; mov dword [ebp+16],eax;;
mov eax,1; add eax,dword [ebp+16]; mov dword [ebp+20],e...
-うーん、そうか、プリプロセッサだと改行が消えちゃうわけで...
-結構めんどくさい気もしたので、自作のコンパイラを作るとき...
** (2)
-これって、 MUL32(t, 2, 3); とか ADD32(u, 1, t); の部分は...
-今回の例はレジスタマシン風な命令を整備しましたが、もちろ...
-ちなみに今回の test.c の内容は[[p20250815a]]の(2-1)の出...
-[Q] なぜCコンパイラのプリプロセッサを使ったの?アセンブ...
--[A] それはそうなのですが、アセンブラのマクロ機能はアセ...
--だからアセンブラのマクロ機能が好きなら、もちろんそれで...
-[Q] なんで test.c っていうファイル名なんだよ!これはC言...
--[A] す、すみません。たとえば.txtとかにするとgccがプリプ...
ページ名: