【问题标题】:The product of elements of the odd positions assembly奇数位置组件的元素的乘积
【发布时间】:2016-05-11 22:13:58
【问题描述】:

我有问题,希望你能帮我找到正确的解决方案

我编写了这段代码来使用程序集 x8086 计算数组中奇数的加法。

我现在要计算奇数POSITION的元素相​​乘

例如:
x DB 1,3,3,4,5,7 数据库 6 产品为:84(产品 de x [1], x [3], x [5])

谢谢

include 'emu8086.inc '   
org 100h  
LEA SI, array  
MOV AX,0  
MOV CX,0
MOV BX,1


for: 
CMP CX,n 
JGE endfor  
CMP CX,BX 
JNE else  

ADD AX,[SI]    
ADD CX,1
ADD BX,2
ADD SI,2


JMP endif 
else: 
ADD CX,1
ADD SI,2
endif:


JMP for
ENDFOR:



 call PRINT_NUM   
 ret 

  array dw 1,9,3,4,5,8,2
  n dw 7

  DEFINE_PRINT_NUM
  DEFINE_PRINT_NUM_UNS
  END

【问题讨论】:

  • 代码中的数组是文字而不是文本中的字节。对于单词,您需要添加 4 以跳过一个元素。此外,我在您的代码中看不到任何乘法。
  • 我的代码是对奇数进行加法!现在我想做奇数位置的乘法! !
  • 所以使用mul 指令。您被困在 8086 上,因此您不能使用二操作数 imul r16, r16,而必须使用带有隐式 ax 和 dx 操作数的单操作数形式 imul r/m16

标签: arrays assembly x86 multiplication


【解决方案1】:

您只需要更改程序中的 2 条指令:

  • ADD AX,[SI] 更改为mul word ptr [si]。这会将乘积留在 DX:AX 中,但由于所涉及的数字非常小,因此 DX 寄存器将保持为零。
  • 用 1 而不是 0 初始化 AX 寄存器,否则乘积将始终为零!在该程序的第 4 行,将 MOV AX,0 更改为 mov ax,1

您可以通过将以下行移到“endif”标签下方来改进程序。他们无论如何都会被处决:

ADD CX,1
ADD SI,2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多