8085程序以n个数字的数组搜索数字

2021年5月14日16:39:56 发表评论 1,323 次浏览

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

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

例子 -

8085程序以n个数字的数组搜索数字1
8085程序以n个数字的数组搜索数字2

算法

  1. 通过以下命令使内存指针指向内存位置2050LXI H 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. 程序结束

程序–

内存地址 记忆 注释
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 如果ZF = 0则跳转
200E MVI A F0 A <-F0
2010 STA 3051 M [3051] <-A
2013 HLT 结束
2014 MVI A 0F A <-0F
2016 STA 3051 M [3051] <-A
2019 DCR C C <-C – 01
201A JNZ 2008 如果ZF = 0则跳转
201D HLT 结束

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

  1. LXI H 2050 –用20初始化寄存器H并用50初始化寄存器L
  2. MOV C, M –将由寄存器H和L表示的间接存储位置M的内容分配给寄存器C
  3. LDA 3050 –在累加器A中加载存储单元3050的内容
  4. MOV B, A –将寄存器B中A的内容移动
  5. INX H –HL增加1, 即M增加1, 现在M将指向下一个存储位置
  6. MOV A, M –移动累加器A中存储位置M的内容
  7. CMP B –从A减去B并更新8085标志
  8. 2014年JNZ –如果重置零标志即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 –停止执行程序并停止任何进一步的执行

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: