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 <地址> NEXT [[<数据>] NEXT/PREV] EXEC |
| 检查/修改寄存器 | 显示/修改8085寄存器内容。EXAM REG <寄存器键> [[<数据>] NEXT]* EXEC |
| 单步执行 | 执行单个用户程序指令 SINGLE STEP <起始地址> NEXT [[<起始地址>]NEXT]* EXEC |
| GO | 将控制权从监视器转移到用户程序 GO <地址> EXEC |
| 块移动/块复制 | 将数据块从一个部分移动/复制到另一个部分 BLK MOVE <起始地址> NEXT <结束地址> NEXT <目标地址> EXEC |
| 插入 | 在用户程序中插入一个或多个指令 INSERT [<下限>] NEXT [<上限>] NEXT <插入起始地址> NEXT <字节数> NEXT [[<数据>] NEXT]* EXEC |
| 删除 | 删除用户程序中的一个或多个指令 DELETE [<下限>] NEXT [<上限>] NEXT <删除起始地址> NEXT <删除结束地址> 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 at U3。为了结束程序,我们可以使用RST 5(EFH)返回到监视器程序,而不是使用HLT (76H)指令。因为它可以帮助我们调试程序是否导致停止和挂起。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP