这个程序的功能是完成向屏幕输出10个字符。
A820
MOV R2, OA ; 送入输出字符个数
MOV R0, 30 ; '0'字符的ASCII码
OUT 80 ; 输出保存在R0低位字节的字符
DEC R2 ; 输出字符个数减1
JR Z, 830 ; 判10个字符输出完否,已完,则转移到程序结束处
PUSH R0 ; 未完,保存R0的值到堆栈中
(828) IN 81 ; 查询接口状态,判字符输出完成否,
SHR R0 ;
JP NC, 828 ; 未完成, 则循环等待
POP R0 ; 已完成, 准备继续输出下一字符,从堆栈恢复R0的值
INC R0 ; 得到下一个要输出的字符
JP 824 ; 转去输出字符
(830) RET
这个程序只使用基本汇编语句。这里的重点是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句。这个串行口接的设备是计算机终端,在IN和OUT指令中用到该串行口的两个端口地址是80和81。指令
IN 81 读入接口的状态寄存器的内容,其最低位为1表示前一个字符已完成串行输出过程,CPU可以向串行口送下一个输出字符,为0则还不能送,需循环测试并等待。判别状态寄存器最低一位的值,是通将其右移(读入的内容在R0中)到进位触发器C中之后再检查C的值完成的。
思考题:当把IN 81, SHR R0, JP NC, 828三个语句换成4个NOP语句,该程序执行过程会出现什么现象? 试分析并实际执行一次。
|