问题–在8085中编写汇编语言程序, 以在n个数字的数组中搜索给定的数字。如果找到数字, 则将F0存储在内存位置3051中, 否则将0F存储在3051中。
假设–数组中元素的数量存储在存储位置2050。数组从起始存储地址2051存储, 用户要搜索的编号存储在存储位置3050。
例子 -
算法–
- 通过以下命令使内存指针指向内存位置2050LXI H 2050指令
- 将数组大小的值存储在寄存器C中
- 要在寄存器B中搜索的商店编号
- 将内存指针增加1, 使其指向下一个数组索引
- 将数组的元素存储在累加器A中, 并将其与B的值进行比较
- 如果两者相同, 即ZF = 1, 则将F0存储在A中, 并将结果存储在存储器单元3051中, 然后转到步骤9
- 否则将0F存储在A中并将其存储在内存位置3051中
- 将C减01并检查C是否不等于零, 即ZF = 0, 如果为true, 则转到步骤3, 否则转到步骤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的寄存器:
- LXI H 2050 –用20初始化寄存器H并用50初始化寄存器L
- MOV C, M –将由寄存器H和L表示的间接存储位置M的内容分配给寄存器C
- LDA 3050 –在累加器A中加载存储单元3050的内容
- MOV B, A –将寄存器B中A的内容移动
- INX H –HL增加1, 即M增加1, 现在M将指向下一个存储位置
- MOV A, M –移动累加器A中存储位置M的内容
- CMP B –从A减去B并更新8085标志
- 2014年JNZ –如果重置零标志即ZF = 0则跳转到存储位置2014
- MVI A F0 –将F0分配给A
- STA 3051 –将A的值存储在3051中
- HLT –停止执行程序并停止任何进一步的执行
- MVI A 0F –将0F分配给A
- STA 3051 –将A的值存储在3051中
- DCR C –将C减01
- JNZ 2008 –如果重置零标志, 则跳转到内存位置2008
- HLT –停止执行程序并停止任何进一步的执行