メッセージをレジスタにコピーしてからスタックにプッシュする必要があるのに、長さをスタックに直接プッシュできるのはなぜですか?
11 が単語として定義されているのに、文字列がバイトとして宣言されているのはなぜですか?
message:db'hello world'
length:dw 11
mov ax, message
push ax
push word [length]
直接実行できるはずですがpush message
、これの正確な構文は多くの場合、アセンブラー固有です。代わりに書く必要があるかもしれませんpush offset message
。これにより、のアドレスがスタックにプッシュ'h'
されます。
押す'he'
(push word [message]
またはのようなものpush word ptr [message]
で)OTOHは、あなたが本当に望んでいるものではないかもしれません。スタックを使用して文字列の 2 文字のみを渡す正当な理由はありません。代わりに最初の文字のアドレスを渡す方が理にかなっています。