【问题标题】:8085 program to filter out positive numbers from a memory location8085 程序从内存位置过滤掉正数
【发布时间】:2021-03-01 08:28:46
【问题描述】:

所以我需要过滤掉正数,如果小于 FFH 则显示总和,如果不显示 FFH。我在模拟器中输入代码并使用#DB 将数字存储在特定的内存位置。 但是当我一步一步运行它时,内存内容寄存器显示为00。如何解决它?

      MVI B,00
      MVI C,0A
      LXI H,4000

NEXT:      MOV A,M
      RAL
      JC REJECT
      RAR
      ADD B
      JC OVR
      MOV B,A

REJECT:    INX H
      DCR C
      JNZ NEXT
      STA 8070

OVR:       MVI A,FF
      HLT
# ORIGIN 4000H
# DB 28H, D8H, C2H, 21H, 24H, 30H, 2FH, 19H, F2H, 9FH

GNUSim8085

【问题讨论】:

  • 你应该指定你正在使用的汇编程序。
  • 添加任何两个负数总是会产生结转。这与签名溢出不同。 IIRC 8080 / 8085 没有标志,所以相当不方便。但是在任何给定的加法中,如果添加两个负数会产生一个正数,那就是有符号溢出。
  • 另外,0xFF-1,最大/最大负数(在 2 的补码中)。所以指令告诉你显示总和,除非总和是 0xFF,然后显示 FF。所以你总是必须显示精确的总和,比如用扩展精度来处理一个 2 字节的总和?
  • 或者您是否应该只保留正数,而不是删除它们,并将总和视为无符号数?这使得溢出检测和处理变得更加容易。

标签: assembly 8085


【解决方案1】:

“内存内容寄存器”是什么意思?如果您指的是M,它不是一个实际的寄存器,它表示HL 寄存器对指向的内存位置的内容。在您的代码末尾HL 将有400AH 和内存位置400AH 可以保存任何垃圾值。

由于您使用的模拟器通常将内存单元初始化为 0,因此您的模拟器显示 M 的内容为 0,这是完全正常的。你应该看的是寄存器A的内容。

【讨论】:

  • 另外一件事,我认为STA 8070H应该写在你的代码中MVI A,FFH之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2011-08-08
相关资源
最近更新 更多