0

、、、、およびレジスタの値AHを出力するプロシージャを作成したいと思います。私はこれを持っています:ALBHBL

prntABHL:
    PUSH    BL
    PUSH    BH
    PUSH    AL
    PUSH    AH
    PUSH    fourNums  ! defined in data as "%d, %d, %d, %d\n"
    PUSH    _PRINTF
    SYS
    ADD SP, 12        ! reset stack
    RET

これにより、命令で4つのレジスタエラーが発生しPUSHます。PUSH16ビット値を期待しているので、AHALは8ビット値だと思います。

AH、、、およびレジスタALの値が16ビット長でない場合、関数の引数として指定するにはどうすればよいですか?この問題を解決するための合理的に簡単な方法はありますか?BHBL

4

1 に答える 1

1

8 ビット レジスタの値を 16 ビット値としてプッシュすることだけが必要な場合は、たとえば次のようにすれば簡単です。または自由に使用cxできるその他の 16 ビット汎用レジスタ ( cxdxbpsi) :di

編集: movzxは 386 より前のプロセッサでは使用できません。8088/8086 命令に置き換えられました。

xor   cx, cx
mov   cl, bl
push  cx
mov   cl, bh
push  cx
mov   cl, al
push  cx
mov   cl, ah
push  cx

自由に使用できる 16 ビットの汎用レジスタがない場合は、値を保存して別の場所にプッシュし、そこからスタックにプッシュする必要があります。

于 2012-11-26T17:58:49.247 に答える