【问题标题】:8085 - How can I compare 2 values in a Stack8085 - 如何比较堆栈中的 2 个值
【发布时间】:2017-12-12 19:29:52
【问题描述】:

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

英特尔语法

【问题讨论】:

  • @Ruan_Lopes 不同的架构。

标签: assembly 8085


【解决方案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- ... 位数,您必须先比较最高字节。如果设置了零标志,这意味着两个字节是相同的。在这种情况下,您将比较下一个字节,直到最低字节或不再设置零标志。

【讨论】:

    猜你喜欢
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多