项目5 转换指令
1.标准转换指令
(1)数字转换
字节转为整数(BTI)、整数转为字节(ITB)、整数转为双整数(ITD)、双整数转为整数(DTI)、双整数转为实数(DTR)、BCD码转为整数(BCDI)和整数转为BCD码(IBCD)。以上指令将输入值IN转换为指定的格式并存储到由OUT指定的输出值存储区中。例如:可以将双整数值转为实数值;也可以在整数和BCD码格式之间相互转换。
(2)四舍五入和取整
四舍五入指令(ROUND)将一个实数转为一个双整数值,并将四舍五入的结果存入OUT指定的变量中。取整指令(TRUNC)将一个实数转为一个双整数值,并将实数的整数部分作为结果存入OUT指定的变量中。
(3)包络段数
段码指令(SEG)允许产生一个点阵,用于点亮七段码显示器的各个段。
图1
图2 标准转换指令的有效操作数
(4)BCD码转为整数和整数转为BCD码的操作
BCD码转整数指令(BCDI)将一个BCD码IN的值转换成整数值,并且将结果存入OUT指定的变量中。IN的有效范围是0到9999的BCD码。
整数转BCD码指令(IBCD)将输入的整数值IN转换成BCD码,并且将结果存入OUT指定的变量中。IN的有效范围是0到9999的整数。
(5)双整数转为实数指令的操作
双整数转实数指令(DTR)将一个32位,有符号整数值IN转换成一个32位实数,并将结果存入OUT指定的变量中。
(6)双整数转为整数指令的操作
双整数转整数指令(DTI)将一个双整数值IN转换成一个整数值,并将结果存入OUT指定的变量中。如果所转换的数值太大以致于无法在输出中表示则溢出标志
(7)整数转为双整数指令的操作
整数转双整数指令(ITD)将整数值IN转换成双整数值,并且存入OUT指定的变量中。符号位扩展到高字节中。
(8)字节转为整数指令的操作
字节转整数指令(BTI)将字节值IN转换成整数值,并且存入OUT指定的变量中。字节是无符号的,因而没有符号位扩展。
(9)整数转为字节指令的操作
整数转字节指令(ITB)将一个字的值IN转换成一个字节值,并且存入OUT指定的变量中。只有0到255中的值被转换,所有其他值会产生溢出并且输出不会改变。
提示:如果想将一个整数转换成实数,先用整数转双整数指令,再用双整数转实数指令。
(10)四舍五入取整和取整指令的操作
四舍五入取整指令(ROUND)将实数值IN转换成双整数值,并且存入OUT指定的变量中。如果小数部分大于等于0.5,则数字向上取整。
取整指令(TRUNC)将一个实数值IN转换成一个双整数,并且存入OUT指定的变量中。只有实数的整数部分被转换,小数部分舍去。
如果所转换的不是一个有效的实数,或者其数值太大以致于无法在输出中表示,则溢出标志位置位并且输出不会改变。
图3 示例:标准转换指令
图4
2.段码指令的操作
要点亮七段码显示器中的段,可以使用段码指令。段码指令将IN中指定的字符(字节)转换生成一个点阵并存入OUT指定的变量中。点亮的段表示的是输入字节中低4位所代表的字符。图给出了段码指令使用的七段码显示器的编码。
图5 七段码显示器的编码
图6 示例:段码指令
3.ASCII码转换指令
有效的ASCII码字符为十六进制的30到39和41到46。在ASCII码和十六进制数之间相互转换ASCII码转十六进制数指令(ATH)将一个长度为LEN从IN开始的ASCII码字符串转换成从OUT开始的十六进制数。十六进制数转ASCII码指令(HTA)将从输入字节IN开始的十六进制数,转换成从OUT开始的ASCII码字符串。被转换的十六进制数的位数由长度LEN给出。能够被转换的ASCII码字符串或者十六进制数的最大数量为255。有效ASCII码输入有效的ASCII码输入字符是0到9的十六进制数代码值30到39,和大写字符A到F的十六进制数代码值41到46这些字母数字字符。
图7
图8 ASCII码转换指令的有效操作数
4.(1)整数转ASCII码指令的操作数
整数转ASCII码(ITA)指令将一个整数字IN转换成一个ASCII码字符串。格式FMT指定小数点右侧的转换精度和小数点是使用逗号还是点号。转换结果放在OUT指定的连续8个字节中。
ASCII码字符串始终是8个字节。整数转ASCII码指令的格式操作数如图所示。输出缓冲区的大小始终是8个字节,nnn表示输出缓冲区中小数点右侧的数字位数。nnn的合理范围是0到5。将小数点右侧的位数定为0,使得所显示的数值没有小数点。对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。高4位必须为0。图6-15中给出了一个数值的例子,其格式为使用点号(c=0),小数点右侧有三位小数(nnn=011)。输出缓冲区的格式符合以下规则:
_ 正数值写入输出缓冲区时没有符号位。
_ 负数值写入输出缓冲区时以负号(--)开头。
_ 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。
_ 数值在输出缓冲区中是右对齐的。
图9 整数转ASCII(ITA)指令的FMT操作数
(2)双整数转ASCII码指令操作
双整数转ASCII码(DTA)指令将一个双字IN转换成一个ASCII码字符串。格式操作数FMT指定小数点右侧的转换精度。转换结果存储在从OUT开始的连续12个字节中。
输出缓冲区的大小总是12个字节。
图 描述了双整数转ASCII码指令的格式操作字符串截取指令数。nnn表示输出缓冲区中小数点右侧的数字位数。nnn的合理范围是0到5。将小数点右侧的位数定为0,使得所显示的数值没有小数点。对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。高4位必须为0。
图10 中给出了一个数值的例子,其格式为使用点号(c=0),小数点右侧有四位小数(nnn=100)。输出缓冲区的格式符合以下规则:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论