/* システムコールを使用してstrを標準出力に書き出す(EINTRなどへの対応は省略) */
void print_using_write(const char *str) {
asm volatile (
"mov $4, %%eax\n\t" /* write */
"mov $1, %%ebx\n\t" /* 標準出力 */
"mov %0, %%ecx\n\t" /* 出力する内容へのポインタ */
"xor %%edx, %%edx\n\t" /* 文字列の長さを計算する */
"1:\n\t"
"testb $0xff, (%%ecx, %%edx)\n\t"
"jz 2f\n\t"
"inc %%edx\n\t"
"jmp 1b\n\t"
"2:\n\t"
"int $0x80\n\t" /* システムコール呼び出し */
:: "m"(str) : "%eax", "%ebx", "%ecx", "%edx");
}
int
Main(int argc,char*argv[])
{
(void)argc; /* 警告避け */
(void)argv; /* 警告避け */
print_using_write("hello, world");
print_using_write("\n");
return 0;
}
int main(int asumi_kana, char **sakura_ayane) {
return Main(asumi_kana, sakura_ayane);
}
Lyog44K344K544OG44Og44Kz44O844Or44KS5L2/55So44GX44Gmc3Ry44KS5qiZ5rqW5Ye65Yqb44Gr5pu444GN5Ye644GZKEVJTlRS44Gq44Gp44G444Gu5a++5b+c44Gv55yB55WlKSAqLwp2b2lkIHByaW50X3VzaW5nX3dyaXRlKGNvbnN0IGNoYXIgKnN0cikgewoJYXNtIHZvbGF0aWxlICgKCQkibW92ICQ0LCAlJWVheFxuXHQiIC8qIHdyaXRlICovCgkJIm1vdiAkMSwgJSVlYnhcblx0IiAvKiDmqJnmupblh7rlipsgKi8KCQkibW92ICUwLCAlJWVjeFxuXHQiIC8qIOWHuuWKm+OBmeOCi+WGheWuueOBuOOBruODneOCpOODs+OCvyAqLwoJCSJ4b3IgJSVlZHgsICUlZWR4XG5cdCIgLyog5paH5a2X5YiX44Gu6ZW344GV44KS6KiI566X44GZ44KLICovCgkJIjE6XG5cdCIKCQkidGVzdGIgJDB4ZmYsICglJWVjeCwgJSVlZHgpXG5cdCIKCQkianogMmZcblx0IgoJCSJpbmMgJSVlZHhcblx0IgoJCSJqbXAgMWJcblx0IgoJCSIyOlxuXHQiCgkJImludCAkMHg4MFxuXHQiIC8qIOOCt+OCueODhuODoOOCs+ODvOODq+WRvOOBs+WHuuOBlyAqLwoJOjogIm0iKHN0cikgOiAiJWVheCIsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIpOwp9CgppbnQKTWFpbihpbnQgYXJnYyxjaGFyKmFyZ3ZbXSkKewoJKHZvaWQpYXJnYzsgLyog6K2m5ZGK6YG/44GRICovCgkodm9pZClhcmd2OyAvKiDorablkYrpgb/jgZEgKi8KCXByaW50X3VzaW5nX3dyaXRlKCJoZWxsbywgd29ybGQiKTsKCXByaW50X3VzaW5nX3dyaXRlKCJcbiIpOwoJcmV0dXJuIDA7Cn0KCmludCBtYWluKGludCBhc3VtaV9rYW5hLCBjaGFyICoqc2FrdXJhX2F5YW5lKSB7CglyZXR1cm4gTWFpbihhc3VtaV9rYW5hLCBzYWt1cmFfYXlhbmUpOwp9Cg==