例子1:设计一个小程序, 用次数控制在终端屏幕上输出'0'到'9'十个数字符。
A 2020
MVD R2, OA ; 送入输出字符个数
MVD R0, 30 ; '0'字符的ASCII码
OUT 00 ; 输出保存在R0低位字节的字符
DEC R2 ; 输出字符个数减1
JZ, 2031 ; 判10个字符输出完否,已完,则转移到程序结束处
PUSH R0 ; 未完,保存R0的值到堆栈中
(2029)IN 01 ; 查询接口状态,判字符串行输出完成否,
SHR R0 ;
JNC, 2029 ; 未完成,则循环等待
POP R0 ; 已完成,准备继续输出下一字符,从堆栈恢复R0的值
INC R0 ; 得到下一个要输出的字符
JR 2024 ; 转去输出字符
(2031)RET
这个程序只使用基本汇编语句。理解中的一个难点,是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句。具体解释见有关串行接口讲解部分的内容。
该程序的执行码放在2020起始的连续内存区中。若送入源码的过程中有错,系统会进行提示,等待重新打入正确汇编语句。在输入过程中,在应打入语句的位置直接打回车则结束输入过程。
接下来可用G 2020命令运行该程序。
思考题:当把IN 01, SHR R0, JNC, 2029三个语句换成4个MOV
R0,R0语句, 该程序执行过程会出现什么现象? 试分析并实际执行一次。
类似的,若要求在终端屏幕上输出'A'到'Z'共26个英文字母,应如何修改例1中给出的程序? 请验证之。
|