アセンブラが 16 ビット コード movzbw (%ax)、%ax のエラーをスローする エラー: `(%ax)' は有効なベース/インデックス式ではありません
ただし、以下の命令は 32 ビット コード生成で有効です。movzbl (%eax), %eax
環境: プロセッサー: Intel(x86) アセンブラー: 「GNU AS」 オペレーティング システム: 「Linux」 目的: 「Hello, World」を画面に出力する非常に単純なブートローダーを作成しているときに、関数に文字列を渡そうとしています。次に、バイトごとにトラバースしてから印刷します。
16 ビット リアル モード コードの書き込みエラーを回避するために使用できる同等の命令は何ですか?
詳細: 以下は、「16 ビット GNU AS」アセンブラーでシミュレートしようとしている C コードです。
void _prints(char*);
int main(void)
{
char* mess = "hello";
_prints(mess);
return 0;
}
void _prints(char* str)
{
while(*str)
{
++str;
}
}
注:コマンド「gcc -S test.c」を使用してアセンブリ ファイルを生成しようとすると、_prints 関数に命令「movzbl (%eax), %eax」が表示されます。同じアセンブラを使用して 16 ビットのリアル モード コードをシミュレートしたいのですが、「movzbw (%ax), %ax」の使用中にエラーがスローされます。
助けてください