私は、ALが2バイトの変数であり、ALをスタックにプッシュしたいとコンパイラーに伝えたいと思います。アセンブリ変換バイトとそれをスタックにプッシュ
私は値をポップし、1バイトと伝えてdlに移動します。 私は次のようなものを考えました:
push word ptr al
pop byte ptr dl
どうすればいいですか?
AHとDHの値を変更したくない
私は、ALが2バイトの変数であり、ALをスタックにプッシュしたいとコンパイラーに伝えたいと思います。アセンブリ変換バイトとそれをスタックにプッシュ
私は値をポップし、1バイトと伝えてdlに移動します。 私は次のようなものを考えました:
push word ptr al
pop byte ptr dl
どうすればいいですか?
AHとDHの値を変更したくない
スタックはWORDSの配列として編成されています。 BYTEをプッシュまたはポップすることはできません。 ALを保存するには、AHに0とPUSH AXを設定します。 AHを変更したくない場合は、PUSH AXでスタック上のAHのプッシュ値を操作します。
mov ax, 0102h ; Any value for testing
; PUSH WORD PTR AL
push ax
mov bp, sp ; BP needed for indexed operations
mov BYTE PTR [bp+1], 0 ; Clear high byte (pushed AH)
; POP BYTE PTR DL
mov bp, sp ; BP needed for indexed operations
mov dl, BYTE PTR [bp] ; Load low byte (pushed AL) into DL
add sp, 2 ; POP
オペレーションでは、0を押して手動でバイトの半分を手動で上書きすることもできます。 – fuz
「AL」は定義上8ビット= 1バイトであるため、「AL」は決して「2バイト変数」になることはありません。 – zx485
可能な複製http://stackoverflow.com/questions/2586591/why-is-it-not-possible-to-push-a-byte-onto-a-stack-on-pentium-ia-32?rq= 1。 –
[なぜPentium IA-32のスタックにバイトをプッシュできないのですか?](http://stackoverflow.com/questions/2586591/why-is-it-not-possible-to-push -a-byte-on-a-stack-on-pentium-ia-32) –