问题–在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 | 结束 |
- 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 –停止执行程序并停止任何进一步的执行
推荐阅读
- AWS中安全组和网络ACL之间的区别
- Android测试(从零开始3—— Instrumented单元测试1)
- Android 自动化测试框架
- Android开发BUG及解决方法2
- Android二维码之创建
- Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题
- android导入项目常见问题解决
- Android数据传递全局变量的使用方法
- Android开发之方向传感器的使用? (2011-10-13 20:56:05)转载▼