2016-10-01 82 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位的东西。 –