8085微处理器程序执行及结果检查
我们将学习如何使用8085在8085套件中编写程序。我们还将学习如何调试程序并在成功执行后检查结果。
让我们看看8085套件的典型键盘结构。(不同制造商的不同套件,其键盘样式可能会有所不同)
下表将显示不同控制键的功能。有16个字母数字键(0-9,A-F)提供数据和地址:
按键 | 功能 |
---|---|
RESET | 重置系统 |
VCT INT | 向量中断。它通过键盘产生硬件中断RST 7.5 |
SHIFT | 为所有按键提供二级命令 |
GO | 执行程序 |
SI | 单步执行模式 |
EXREG | 检查寄存器。它允许查看不同寄存器的值。 |
PRE | 指向之前的内存地址 |
DEL | 删除程序的一部分 |
INS | 插入程序的一部分 |
B.M | 块移动。这有助于将内存块移动到任何RAM区域 |
FILL | 用常数值填充某个RAM区域 |
REL | 重新分配为某个内存区域编写的程序。 |
INS DATA | 将一个或多个数据插入内存 |
STRING | 查找位于特定地址/地址的数据字符串 |
MEMC | 比较两个内存块是否相等 |
现在我们将看到一个示例程序,其中十六个字节的数据存储在8050H到805FH的内存位置中。将整个数据块传输到从8070H开始的新内存位置。
程序
T状态 | 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|---|
10 | 8000 | 21, 50, 80 | START | LXI H, 8050H | 将HL设置为源内存指针 |
10 | 8003 | 11, 70, 80 | LXI D, 8070H | 为目标地址设置DE | |
7 | 8006 | 06, 10 | MVI B,10H | 将B设置为计数16个字节 | |
4 | 8008 | 7E | NEXT | MOV A,M | 从源内存获取数据字节 |
7 | 8009 | 12 | STAX D | 将数据字节存储到目标位置 | |
6 | 800A | 23 | INX H | 将HL指向下一个源位置 | |
6 | 800B | 13 | INX D | 将DE指向下一个目标位置 | |
4 | 800C | 05 | DCR B | 递减计数器 | |
10 | 800D | C2, 08, 80 | JNZ NEXT | 如果计数器不为0,则转到传输下一个字节 | |
5 | 8010 | 76 | HLT | 停止 | |
| 总共17个字节 |
总T状态 = 外循环T状态 + 内循环T状态
= (10+10+7+5) + ((4+7+6+6+4+10) x 16 - 3)
= 32 + (37 x 16 – 3)
= 32 + 589
= 621
8085套件的调试选项。
命令 | 功能/格式 |
---|---|
检查/修改内存 | 显示/修改内存位置的内容 EXAM MEM <address> NEXT [[<data>] NEXT/PREV] EXEC |
检查/修改寄存器 | 显示/修改8085寄存器内容。 EXAM REG <reg key> [[<data>] NEXT]* EXEC |
单步执行 | 执行单个用户程序指令 SINGLE STEP <start address> NEXT [[<start address>] NEXT]* EXEC |
Go | 将控制权从监视器转移到用户程序 GO <address> EXEC |
块移动/块复制 | 将数据块从一部分移动/复制到另一部分 BLK MOVE <start address> NEXT <end address> NEXT <destination address> EXEC |
插入 | 在用户程序中插入一个或多个指令 INSERT [<low limit>] NEXT [<high limit>] NEXT <low insert address> NEXT <number of bytes> NEXT [[<data>] NEXT]* EXEC |
删除 | 删除用户程序中的一个或多个指令 DELETE [<low limit>] NEXT [<high limit>] NEXT <low delete address> NEXT <high delete address> EXEC |
块移动操作演示
内存地址的初始状态
源地址 | 值 | 目标地址 | 值 |
---|---|---|---|
8000 | 00H | 8100 | XXH |
8001 | 11H | 8101 | XXH |
8002 | 22H | 8102 | XXH |
8003 | 33H | 8103 | XXH |
8004 | 44H | 8104 | XXH |
8005 | 55H | 8105 | XXH |
8006 | 66H | 8106 | XXH |
8007 | 77H | 8107 | XXH |
8008 | 88H | 8108 | XXH |
8009 | 99H | 8109 | XXH |
按键:
<块移动>,8000H <下一步>,8009H <下一步>,8100H <执行>
内存地址的最终状态
源地址 | 值 | 目标地址 | 值 |
---|---|---|---|
8000 | 00H | 8100 | 00H |
8001 | 11H | 8101 | 11H |
8002 | 22H | 8102 | 22H |
8003 | 33H | 8103 | 33H |
8004 | 44H | 8104 | 44H |
8005 | 55H | 8105 | 55H |
8006 | 66H | 8106 | 66H |
8007 | 77H | 8107 | 77H |
8008 | 88H | 8108 | 88H |
8009 | 99H | 8109 | 99H |
块插入和块删除操作演示
内存地址的初始状态
源地址 | 值 |
---|---|
8000 | 00H |
8001 | 11H |
8002 | 22H |
8003 | 33H |
8004 | 44H |
8005 | 55H |
8006 | 66H |
8007 | 77H |
8008 | 88H |
8009 | 99H |
按键:
<插入> 8000H <下一步>,8009H <下一步>,8005H <下一步>,5 <下一步>,AAH <插入>,BBH <下一步>,CCH <下一步>,DDH <下一步>,EEH <下一步>
<删除>,8000H <下一步>,800EH <下一步>,8005H <下一步>,8009H <执行>
内存地址的最终状态
源地址 | 值 |
---|---|
8000 | 00H |
8001 | 11H |
8002 | 22H |
8003 | 33H |
8004 | 44H |
8005 | AAH |
8006 | BBH |
8007 | CCH |
8008 | DDH |
8009 | EEH |
800A | 55H |
800B | 66H |
800C | 77H |
800D | 88H |
800E | 99H |
这里我们使用的是带有8000H到FFFFH地址映射的32K内存空间62256(U3)。为了结束程序,我们可以使用RST 5 (EFH)返回到监视器程序,而不是使用HLT (76H)指令。因为它可以帮助我们调试程序是否导致停止和挂起。
广告