2016-10-01 89 views
0

我的任務是將AX和BX加到AX,而不使用「MOV」或「LEA」操作數。 我有點卡在這裏,你能幫我嗎?程序集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'指令。這就是它的目的。沒有理由不使用它。 –

+0

你的問題是自相矛盾的。你想添加,而不使用mov和lea或只使用mov和lea? –

+0

您應該始終包含您在問題中得到的確切錯誤消息。或者更好的是,將錯誤消息放入搜索引擎中。 –

回答

2

今天在16位尋址模式下lea不是那麼明顯的事情是沒有任何寄存器可以用作src操作數。如果我沒有記錯,只能將基址指針(bp)或索引(bx)添加到源或目標索引(sidi)寄存器。 dest操作數可以是任何通用寄存器。

以下是允許的:

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

在這一點上,我相信你已經有了如何做任務:

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

通常你會把它寫成base + index,而不是index + base 。但是,是的,這些是16位尋址模式中允許的唯一4對寄存器。另請參閱[可用的x86尋址模式](http://stackoverflow.com/a/34058400/224132),它有一些鏈接到16位的更多細節,但它主要是大約32/64位的東西。 –