8085 - 如何比较堆栈中的2个值

时间:2017-12-12 19:29:53

标签: assembly 8085

我想知道如何比较堆栈中的2个值以发现较小的值。我是一个乞丐,所以我不确定我是否应该使用累加器以及如何,考虑到它只是一个8位寄存器而一个堆栈使用每个值的寄存器对。如果你能帮助我,我将不胜感激,谢谢!!

英特尔语法

1 个答案:

答案 0 :(得分:1)

如果你不能pop堆栈中的值,你将不得不这么做; 8085(也不是Zilog Z80)CPU都不可能直接从堆栈读取。

您必须将指针复制到HL寄存器对的值,并读取(HL)内存位置的内存。

请注意,8085不允许您直接将堆栈指针复制到HL,而只是将其添加到HL

示例:我们希望将位于堆栈上的字节(SP + 5)与位于地址(SP + 10)的字节进行比较。

然后我们执行以下操作(此处为8080/8085语法,而不是Z80语法):

LXI H, 5   ; Set HL to 5
DAD SP     ; Add the address of the stack to HL -> HL contains (SP+5)
MOV A,M    ; Load the byte at (HL) into the accumulator
LXI H, 10  ; Set HL to 10
DAD SP     ; Add the address of the stack to HL -> HL contains (SP+10)
CMP M      ; Compare the byte at (HL) to the accumulator

CMP指令之后,根据比较结果设置标志。

如果要比较16位,24位,32位...数字,则必须首先比较最高字节。如果设置了零标志,则表示两个字节都相同。在这种情况下,您将下一个字节与最低字节进行比较,或直到不再设置零标志。