一位数乘法的汇编语言实现(一)

⼀位数乘法的汇编语⾔实现(⼀)
使⽤的是16位微程序设计,指令为TEC-2000 16位教学计算机的指令系统
1984美国忌讳第二部4桥矿
要实现的功能:通过键盘键⼊⼀个数字,接收之后显⽰出来,然后⾃动补上*号,接着再次键⼊⼀个数字,然后⾃动补上=号,接着输出运算结果。
本⽂章实现的是,⼦程序:获得输⼊的⼀个数字的值,将该输⼊的值存放到R0寄存器中,如果按下的按键不是⼀个数字,则继续等待输⼊,直到键⼊的值为数字时,才结束程序。
gps数据格式这个⼦程序会使⽤R0寄存器存放键⼊的按键对应的数值,同时会改变R2和R3寄存器的值
代码功能简介
汇编语⾔指令汇编指令的功能
MVRD DR,DATA DATA -> DR 或 DR = DATA 给寄存器DR赋值
IN PORT[PORT] -> R0 从外界设备输⼊
OUT PORT R0 -> [PORT] 将R0的值往外界设备输出
SHR DR DR/2 -> DR,C 将寄存器DR的值向右移动⼀位,移出的位存⼊C中
AND DR,SR DR and SR -> DR 将DR与SR的值做‘’且‘’操作
SUB DR,SR DR - SR -> DR 将DR - SR的值存⼊DR中
CMP DR,SR DR - SR (解释在⽂章稍后位置)
JRNC ADR    C = 0 时跳转到地址ADR处继续执⾏程序
JRC ADR    C = 1 时跳转到地址ADR处的位置继续执⾏程序
RET表⽰程序结束,类似于return
注:DATA表⽰⼗六位进制的⼀个具体的数字
DR、SR表⽰寄存器
PORT为串⾏端⼝号
ADR表⽰地址,绝对地址
CZVS:C表⽰进位位,Z表⽰是否为0,V表⽰是否溢出,S表⽰符号位。(具体含义请⾃⾏学习)
关键字解释
GOTO:并不是标准汇编语⾔,因为跳转的话需要写上绝对地址,⽽绝对地址并不是每⼀次都⼀样,但是⼜要将代码表达出来,则使⽤这种⽅式,表⽰要跳转的位置。
代码块功能介绍
代码块1:
IN 81  //检查串⾏输⼊⼝是否有按键被按下
SHR R0
SHR R0
JRNC GOTO:IN 81 //如果没有按键被按下的话,就向上回到IN 81那⼉,循环检查是否有按键被按下
IN 80  //将串⾏输⼊⼝的数据,存⼊R0寄存器
此代码块实现从键盘接收⼀个按键的ASCII码的值。先由IN 81,将81串⼝的信息接收到R0,再通过SHR将R0的⼆进制值向右移动两位。*因为将⼆进制数整体向右移动,左边⾼位补0,⽽原⼆进制数的最低位将被遗失,这个遗失的值在汇编语⾔中会保存在C中。*通过判断第⼆次移动,所遗失的值,来得到键盘上是否有按键被按下。
如果第⼆次移动所遗失的值,为0,则表⽰没有按键被按下,这时候就跳转回IN 81的位置,继续等待按键按下。
如果遗失的值为1,则程序会继续向下执⾏,那么就会从80串⼝接收键盘按下的值,然后存到R0中,这个时候存⼊的值,是那个按键所对应的ASCII码的值,详情参见ASCII码表。
代码块2
MVRD R2,0030 //定义输⼊的下界 ASCII 0
MVRD R3,003A //定义输⼊的上界 ASCII 9之后的那⼀个
CMP R0,R2
JRNC GOTO:IN 81 //如果输⼊的字符的ASCII码⽐0⼩,就回到IN 81那⼉,重新等待输⼊
CMP R0,R3
大明宫词导演JRC GOTO:IN 81 //如果输⼊的字符的ASCII码⽐9⼤,就回到IN 81那⼉,重新等待输⼊
CMP DR,SR 指令表⽰进⾏运算 DR-SR,不会改变寄存器的值,⽽会改变C的值,⽽JRNC与JRC皆是根据C的值来进⾏操作的。如果DR>=SR,那么C的值就是1,如果DR<SR,那么C的值就是0。
这个代码块⽤来判断键⼊的值是否为数字的ASCII码,如果不是则重新等待键⼊,如果是则程序继续向下执⾏。
因为CMP只能判断⼤于等于和⼩于两种状态,所以下届⽤0,上界⽤9之后的那⼀个
服装信息系统
代码总览
//获得输⼊的⼀个数字值的⼦程序,将获得的值存放在R0中,会改变R2和R3的值
CIN  //因为此程序为⼦程序,之后要在主程序中调⽤,所以⼈为的给⼀个名字
MVRD R0,0000
IN 81  //检查串⾏输⼊⼝是否有按键被按下
SHR R0
SHR R0
JRNC GOTO:IN 81 //如果没有按键被按下的话,就向上回去IN 81那⼉,循环检查按键
IN 80  //将串⾏输⼊⼝的数据,存⼊R0
//可省略
MVRD R2,00FF
AND R0,R2 //清空R0中⾼⼋位的字节内容
MVRD R2,0030 //定义输⼊的下界 ASCII 0,0030为48的⼗六位进制表⽰法
MVRD R3,003A //定义输⼊的上界 ASCII 9之后的那⼀个
CMP R0,R2
JRNC GOTO:IN 81 //如果输⼊的字符的ASCII码⽐0⼩,就回到IN 81那⼉,重新等待输⼊
CMP R0,R3
JRC GOTO:IN 81 //如果输⼊的字符的ASCII码⽐9⼤,就回到IN 81那⼉,重新输⼊
五月病OUT 80  //输出读⼊的字符
SUB R0,R2 //将读⼊的字符ASCII码值换算成具体数值
RET
注:此代码不是标准的汇编语⾔代码,直接使⽤会报错
汇编语⾔在TEC-2000机上的代码截图展⽰
乡村医生从业管理条例

本文发布于:2024-09-23 01:33:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/230843.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按键   代码   汇编   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议