2017-03-23 8 views
-4

私は、ALが2バイトの変数であり、ALをスタックにプッシュしたいとコンパイラーに伝えたいと思います。アセンブリ変換バイトとそれをスタックにプッシュ

私は値をポップし、1バイトと伝えてdlに移動します。 私は次のようなものを考えました:

push word ptr al 
pop byte ptr dl 

どうすればいいですか?
AHとDHの値を変更したくない

+2

「AL」は定義上8ビット= 1バイトであるため、「AL」は決して「2バイト変数」になることはありません。 – zx485

+0

可能な複製http://stackoverflow.com/questions/2586591/why-is-it-not-possible-to-push-a-byte-onto-a-stack-on-pentium-ia-32?rq= 1。 –

+2

[なぜPentium IA-32のスタックにバイトをプッシュできないのですか?](http://stackoverflow.com/questions/2586591/why-is-it-not-possible-to-push -a-byte-on-a-stack-on-pentium-ia-32) –

答えて

0

スタックは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

オペレーションでは、0を押して手動でバイトの半分を手動で上書きすることもできます。 – fuz

関連する問題