8085 - 如何比较堆栈中的 2 个值
8085 - How can I compare 2 values in a Stack
我想知道如何比较 Stack 中的 2 个值以发现较小的值。我是初学者,所以我不确定我是否应该使用累加器以及如何使用,考虑到它只是一个 8 位寄存器,而 Stack 为每个值使用成对的寄存器。如果你能帮助我,我将不胜感激,谢谢!!
英特尔语法
如果您不能 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 位数字,你必须首先比较最高字节。如果设置了零标志,这意味着两个字节是相同的。在这种情况下,您比较下一个字节,直到最低字节或直到不再设置零标志。
我想知道如何比较 Stack 中的 2 个值以发现较小的值。我是初学者,所以我不确定我是否应该使用累加器以及如何使用,考虑到它只是一个 8 位寄存器,而 Stack 为每个值使用成对的寄存器。如果你能帮助我,我将不胜感激,谢谢!!
英特尔语法
如果您不能 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 位数字,你必须首先比较最高字节。如果设置了零标志,这意味着两个字节是相同的。在这种情况下,您比较下一个字节,直到最低字节或直到不再设置零标志。