阵列中最大的数字--8085微处理器

时间:2017-12-23 19:50:12

标签: assembly 8085

我想在HL中存储最大数字的地址,但我真的不知道该怎么做 这是我到目前为止所做的事情

   0000 LXI H,3000H       ;Load H-L pair with address 3000H
   0001
   0002
   0003 MOV E,M      ;Move counter from memory to reg. E.
   0004 INX H        ;Increment H-L pair
   0005 MOV A,M      ;Move the 1st number from memory to reg. A.
   0006 DCR E        ;Decrement counter.
   0007 INX H        ;Increment H-L pair
   0008 MOV D,M      ;Move the next number from memory to reg. D.
   0009 CMP D        ;Compare D with A.
   000A JNC 000EH    ;Jump to address 000EH if there is no carry
   000B
   000C
   000D MOV A,D      ;Move largest from reg. D to reg. A.
   000E DCR E        ;Decrement counter.
   000F JNZ 0007H    ;Jump to address 0007H if counter is not zero.
   0010
   0011
   0012 INX H        ;Increment H-L pair.
   0013 MOV C,A      ;Move the result from reg. A to C
   0014 HLT


**MEMORY**  
3000H: 05 (counter)
3001H: 2C
3002H: 1E
3003H: 58
3004H: 46
3005H: 53

代码在找到最大数量的部分工作正常,但我想要的是最后还存储HL中最大数字的地址

1 个答案:

答案 0 :(得分:1)

我不太了解8085,所以我只给出适用于任何注册机的一般答案。 (或者用C语言或其他语言:这是答案之一的问题之一"与其他任何语言相同")

当您找到新的最大值时,请将地址以及复制为值。 (在MOV A,D的同一块指令中,您有条件地跳过它)。您仍需要比较值。

如果8085没有足够的寄存器,请将其存储到内存中。循环完成后,如果需要,可以从那里重新加载HL。作为函数的结果,保留内存中的值。

确保你将第一个元素的起始值和地址都初始化,以防它的最大值。与纯值搜索不同,您不能仅使用最小可能值作为最大值的初始值。