こんにちわ。
演習問題で分からない箇所があったので質問させていただきます。
問プログラ起動時にパラメータとして与えられるnこの文字列を連結して表示
但し、標準関数はつかわない
Main(int argc,char*argv[])
お願いします。
コマンドラインの問題
Re: コマンドラインの問題
課題の丸投げは禁止なので、途中まで書いたプログラムがあれば貼っていただけるとありがたいです。
言語も環境も指定されていないようですね。とりあえずC言語と仮定します。
例えば、x86、32ビットのLinux、gccであれば、インラインアセンブラでシステムコールを呼び出すことで、標準関数をつかわずに標準出力に文字列を書き出せます。
標準出力に文字列を書き出せば、(リダイレクトなどの小細工をせず、端末(エミュレータ)上のシェルからプログラムを起動したのであれば)多くの場合表示されるはずです。
サンプルプログラムです。https://ideone.com/PscfnU
Windowsの場合は、標準でないGTK+などの関数をつかって表示するといいかもしれません。
言語も環境も指定されていないようですね。とりあえずC言語と仮定します。
例えば、x86、32ビットのLinux、gccであれば、インラインアセンブラでシステムコールを呼び出すことで、標準関数をつかわずに標準出力に文字列を書き出せます。
標準出力に文字列を書き出せば、(リダイレクトなどの小細工をせず、端末(エミュレータ)上のシェルからプログラムを起動したのであれば)多くの場合表示されるはずです。
サンプルプログラムです。
/* システムコールを使用して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);
}
Windowsの場合は、標準でないGTK+などの関数をつかって表示するといいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)