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