- ベストアンサー
プログラミングについて。
以下のURLの最後で、eaxの「0」を戻り値として使うことができる。とは、戻り値に使わなくてもいいし、使っても良いという事でしょうか?また、なぜ、単に「0」が戻り値として戻ってくるというだけという事でしょうか?は違うのでしょうか?教えていただけると幸いです。すみません。 https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=34804&rev=&no=0
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
前にも言いましたが、他のサイトの内容を使うべきではないですよ。 なので、必ずわかる程度に切り出してこちらに貼るべきです。 他サイトへの誘導、実際に他のサイトに投稿した人にも著作があるケースもあり、それ自体が違法行為になることや、それに回答することで他の会員がほう助したことにされるなど、適切ではない行為を 繰り返しているってことは、理解するべきかと。 この質問以前の問題も、あるということ。 さて、今回の回答は、シンプルに アセンブラに「戻り値」なんてありません。 今現在のレジスタ値がすべてです。 AXを帰り値とみなしたいシステム形態がそうさせてるだけで、 BX:AXを帰り値としたっていいんです。 じゃなぜやらないか? あなたがANSI-Cを理解するだけで解決はするでしょう。 void abc(void); これに帰り値はありません。 しかし、AXはあります。受け取らないだけです。 register int abc(void); これに帰り値があります。 なので、他の変数にこれを代入すると、abcを呼び出した後の、 最後のAXが、その変数へ代入される。 の違いです。 なお、register int は、通常ただのintです。 ですので、 >単に「0」が戻り値として戻ってくる 違います。戻ってくるものなどありません。 今現在のレジスタ値を、使うか使わないかは そのプログラムを使う人がそのようにルールを決めるだけで、 レジスタはなくなることも増えることもなく、 いつでも何らかの値を保持している。 それを「使いたいなら、使え」それだけの事です。 ここは、「アセンブラ側の意図」 C言語側はプロトタイプで制御します。 どちらを勉強したいかは、質問者さん次第ですが。 Cやアセンブラはただの言語で、使い方は人間が決めてるだけです。 インターフェースは、使用者によるものでしかないのです。 なので、BXを帰り値とみなす言語形態があっても、 別にそれでもいいってことです。