注册 登录
编程论坛 汇编论坛

解释下面汇编代码

相思豆 发布于 2017-03-01 17:45, 3482 次点击

设计一个小程序, 用次数控制在终端屏幕上输出'0'到'9'十个数字符。



从地址2020H 开始输入下列程序:
2020:MVRD R2,00OA ;送入输出字符个数
2022:MVRD R0,0030 ;“0” 的ASCII 码送寄存器R0
2024:OUT 80 ;输出保存在R0 低位字节的字符
2025:DEC R2 ;输出字符个数减1
2026:JRZ 202E ;判10 个字符输出完否,已完,则转到程序结束处
2027:PUSH R0 ;未完,保存R0 的值到堆栈中
2028:IN 81 ;查询接口状态,判字符串输出完否,
2029:SHR R0 ;
202A:JRNC 2028 ;未完成, 则循环等待
202B:POP R0 ;已完成, 准备输出下一字符并从堆栈恢复R0 的值
202C:INC R0 ;得到下一个要输出的字符
202D:JR 2024 ;转去输出字符
202E:RET
202F:↙
不太了解汇编语言,帮忙解释一下2024:OUT 80,R0低位字节字符指什么,保存R0的值到堆栈怎么理解
4 回复
#2
shanxidls2017-05-14 19:56
我是刚入门菜鸟级,顶一下,看看高手解释
#3
shanxidls2017-05-25 18:35
人家都闲太简单,我来练练,说的不对,请指正,我就班门弄斧了。
后面的解释很清楚, 比如输出字符个数A是十六进制的10,10次。
MVRD是将后面的数送入前面的寄存器。
.out当然是输出了,至于80是R0的低字节,我也不懂。
DEC就是后面的数字减一,PUSH R0是将R0的值压入堆栈。IN是输入,IN 81是查询接口状态我不懂。
SHR是逻辑右移,jrnc 2028是当标志位c=0时,转移到2028处执行。POP R0是将R0从堆栈取出。
Inc R0是R0的值加一。jrz是z=1时跳转到后面的地址处执行;JR是无条件转到后面地址处执行。
RET就是结束。磕磕绊绊总算说完了
#4
shanxidls2017-05-26 11:26
补充,OUT和IN是写读端口指令(cpu和外设之间必须通过这两个指令交换数据),
RET是结束子程序,返回主程序。
#5
shanxidls2017-05-29 19:54
回复 3楼 shanxidls
POP R0是取栈顶(一次取一个字?)到段寄存器R0。答了这一小段题,错误百出。见笑了
1