2016-10-01 14 views
0

私の仕事は、 "MOV"または "LEA"オペランドを使わずに、AXとBXをAXに合計することです。 私はここでちょっと立ち往生しています。私を助けてくれますか?アセンブリ8086:MOVとLEAだけの合計2つのレジスタ

; AX need to be 15, using ONLY 'mov' and 'lea'. 
; Do NOT use arithmetic instrutions (add, inc, mul, etc.) 

    mov  ax,10 
    mov  bx,4 

    lea cx,ax 
    lea cx, [cx+bx] 

私は間違っていますか?私の間違いで申し訳ありません、私は初心者です。

+0

ちょうど 'add'命令を使用します。

lea ax, [si + bx] lea ax, [di + bx] lea ax, [si + bp] lea ax, [di + bp] 

私はあなたがすでにタスクを実行する方法を持っていると信じてこの時点で。それがそれのためのものです。それを使わない理由はありません。 –

+0

あなたの質問は自己矛盾しています。あなたはmovとleaを使わずに追加したいですかmovとleaだけを使って追加しますか? –

+0

質問には常に正確なエラーメッセージを含める必要があります。または、エラーメッセージを検索エンジンに入れてください。 –

答えて

2

今日、16ビットアドレッシングモードではleaについてあまり分かりませんが、srcオペランドとして使用できるレジスタはありません。正しく呼び出す場合は、ソースまたは宛先インデックス(siまたはdi)レジスタに、ベースポインタ(bp)またはインデックス(bx)を追加することしかできません。 destオペランドは任意の汎用レジスタです。

が許可されています。

mov si, ax  ; si = ax 
lea ax, [si + bx] ; ax = ax + bx 
+0

通常は、あなたはbase + indexで、index + baseではなく書く。しかし、そうですね、これは16ビットアドレッシングモードで許される唯一の4組のレジスタです。 [available x86 addressing modes](http://stackoverflow.com/a/34058400/224132)も参照してください.16ビットのものの詳細についてはいくつかのリンクがありますが、それは主に約32/64ビットのものです。 –

関連する問題