📜  8085程序,用于在n个数字的数组中搜索一个数字

📅  最后修改于: 2021-06-28 16:31:22             🧑  作者: Mango

问题–在8085中编写汇编语言程序,以在n个数字的数组中搜索给定的数字。如果找到数字,则将F0存储在内存位置3051中,否则将0F存储在3051中。

假设–数组中的元素计数存储在存储位置2050。数组从起始存储地址2051存储,用户要搜索的编号存储在存储位置3050。

例子 –


算法 –

  1. 通过LXI H 2050指令使内存指针指向内存位置2050
  2. 将数组大小的值存储在寄存器C中
  3. 在寄存器B中要查询的商店编号
  4. 将内存指针增加1,使其指向下一个数组索引
  5. 将数组的元素存储在累加器A中,并将其与B的值进行比较
  6. 如果两者相同,即ZF = 1,则将F0存储在A中并将结果存储在存储器单元3051中,然后转到步骤9
  7. 否则将0F存储在A中并将其存储在内存位置3051中
  8. 将C减01,然后检查C是否不等于零,即ZF = 0,如果为true,则转到步骤3,否则转到步骤9
  9. 程序结束

程序 –

MEMORY ADDRESS MNEMONICS COMMENT
2000 LXI H 2050 H <- 20, L <- 50
2003 MOV C, M C <- M
2004 LDA 3050 A <- M[3050]
2007 MOV B, A B <- A
2008 INX H HL <- HL + 0001
2009 MOV A, M A <- M
200A CMP B A – B
200B JNZ 2014 Jump if ZF = 0
200E MVI A F0 A <- F0
2010 STA 3051 M[3051] <- A
2013 HLT END
2014 MVI A 0F A <- 0F
2016 STA 3051 M[3051] <- A
2019 DCR C C <- C – 01
201A JNZ 2008 Jump if ZF = 0
201D HLT END

说明–使用的寄存器A,B,C,H,L和间接存储器M:

  1. LXI H 2050 –用20初始化寄存器H,用50初始化寄存器L
  2. MOV C,M –将间接存储器位置M的内容(由寄存器H和L表示)分配给寄存器C
  3. LDA 3050 –将存储器单元3050中的内容加载到累加器A中
  4. MOV B,A –将A的内容移到寄存器B中
  5. INX H –将HL递增1,即M递增1,现在M将指向下一个存储位置
  6. MOV A,M –在累加器A中移动存储位置M的内容
  7. CMP B –从A减去B并更新8085标志
  8. JNZ 2014 –如果重置零标志(即ZF = 0),则跳转到存储位置2014
  9. MVI A F0 –将F0分配给A
  10. STA 3051 –将A的值存储在3051中
  11. HLT –停止执行程序,并停止任何进一步的执行
  12. MVI A 0F –将0F分配给A
  13. STA 3051 –将A的值存储在3051中
  14. DCR C –将C减01
  15. JNZ 2008 –如果重置零标志,则跳至内存位置2008
  16. HLT –停止执行程序,并停止任何进一步的执行