Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 阵列中最大的数字-8085微处理器_Assembly_8085 - Fatal编程技术网

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

Assembly 阵列中最大的数字-8085微处理器,assembly,8085,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

我想在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中

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

找到新的最大值后,将地址和值复制到某个位置。(与有条件跳转的MOV A、D在同一指令块中)。您仍然需要该值进行比较

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


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

您对代码进行了注释,这很好,但如果运行此操作,有什么不起作用?(见附件)。另外,你能修改格式吗?(删除双空格,然后选择所有代码并单击
{}
图标使其成为一个代码块)。该代码可以工作,但我希望使用最大值存储地址。在这种情况下,在运行程序后,我希望HL存储地址3003H,因为它是具有最高值的地址。编辑很好,这在可读性方面有了巨大的改进,最后的一段使这成为了一个真正的问题。在我看来,
BC
在循环期间是备用的(如果8085具有类似于Z80的寄存器),因此,您可以在找到新的最大值时将
HL
复制到它,然后在末尾将
BC
复制到
HL