| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
二、汇编语言常用子程序
作者:佚名    文章来源:网络    点击数:    更新时间:2006-12-9
 

1、拆字与拼字:

【例1】将 GR0 中的四位 BCD 码从高到低依次存放到 GR2 所指的四个内存单元中。

START LEA GR3,4 ;循环计数器 L1 ST GR0,REG ;保护其余几位 BCD 码 AND GR0,C000F ;屏蔽高 3 位,留下最低 1 位 BCD 码 ST GR0,3,GR2 ;将此位 BCD 码存放到 GR2 所指第四个内存单元 LD GR0,REG ;恢复其余几位 BCD 码 SRL GR0,4 ;将已处理过的此位 BCD 码移出 LEA GR2.-1,GR2 ;地址指针减 1 LEA GR3,-1,GR3 ;循环计数器减 1 JNZ L1 ;未处理完,继续 RET C000F DC #000F ;十六进制常数,屏蔽屏蔽高 3 位 BCD 码用 REG DS 1 ;暂存单元 END

 

【例2】将存放在 GR2 所指的四个内存单元中的四位 BCD 码依从高到低顺序压缩到 GR0 中 。

START LEA GR0,0 ;GR0 清 0 LEA GR3,4 ;循环计数器 L1 SLL GR0,4 ;将已处理过的 BCD 码移到高位 LD GR1,0,GR2 ;GR1 用作临时工作寄存器 AND GR1,C000F ;屏蔽高 12 位 ST GR1,0,GR2 ;对内存单元中的 BCD 码预处理 ADD GR0,0,GR2 ;将已处理过的此位 BCD 码加到 GR0 低位 LEA GR2.1,GR2 ;地址指针指向下一位 BCD 码 LEA GR3,-1,GR3 ;循环计数器减 1 JNZ L1 ;未处理完,继续 RET C000F DC #000F ;十六进制常数,屏蔽高 12 位二进制数 END

2、数字与 ASCII 码之间的相互转换:

十进制数字 0~9 的 ASCII 码是 30H~39H ,所以只要将十进制数(BCD 码)加 30H 就是对应的 ASCII 码。

十六进制数转换成 ASCII 码可分成两段, 0~9 的 ASCII 码是 30H~39H ,即加 30H ;A~F 的ASCII 码是 41H~45H ,即加 37 H。

【例1】将 GR0 中的四位 BCD 码化成 ASCII 码从高到低依次存放到字符串变量 STR 中。

START LEA GR2,3 ;相对于 STR 首址的地址指针 LEA GR3,4 ;循环计数器 L1 ST GR0,REG ;保护其余几位 BCD 码 AND GR0,C000F ;屏蔽高 3 位,留下最低 1 位 BCD 码 ADD GR0,C30 ;转换成 ASCII 码 ST GR0,STR,GR2 ;将 ASCII 码存放到 GR2 所指第四个内存单元 LD GR0,REG ;恢复其余几位 BCD 码 SRL GR0,4 ;将已处理过的此位 BCD 码移出 LEA GR2.-1,GR2 ;地址指针减 1 LEA GR3,-1,GR3 ;循环计数器减 1 JNZ L1 ;未处理完,继续 RET C000F DC #000F ;十六进制常数,屏蔽高 3 位 BCD 码用 C30 DC #30 ;十六进制常数 30 STR DS 4 REG DS 1 ;暂存单元 END

 

【例2】将 GR0 中的 16 位二进制数化成四位十六进制数 ASCII 码从高到低依次存放到字符串变量 STR 中。

START LEA GR2,3 ;相对于 STR 首址的地址指针 LEA GR3,4 ;循环计数器 L1 ST GR0,REG ;保护其余几位二进制数 AND GR0,C000F ;屏蔽高 12 位,留下最低 4 位二进制数 CPL GR0,C0A ;< 10 否? JMI L2 ;< 10 跳过加 7 ,只加 30H ADD GR0,C7 ;≥ 10,加 30H 前先加上 7 L2 ADD GR0,C30 ;加上 30H ST GR0,STR,GR2 ;将 ASCII 码存放到 GR2 所指第四个内存单元 LD GR0,REG ;恢复其余几位二进制数 SRL GR0,4 ;将已处理过的此 4 位二进制数移出 LEA GR2.-1,GR2 ;地址指针减 1 LEA GR3,-1,GR3 ;循环计数器减 1 JNZ L1 ;未处理完,继续 RET C000F DC #000F ;十六进制常数,屏蔽屏蔽高 12 位二进制数 C30 DC #30 ;十六进制常数 30 C0A DC #0A ;十六进制常数 0A C7 DC 7 ;常数 7 STR DS 4 REG DS 1 ;暂存单元 END
 

【例3】将字符串 STR 中的四位十六进制数的 ASCII 码化成 16 位二进制数放到 GR0 中 。

START LEA GR0,0 ;GR0 清 0 LEA GR2,0 ;相对于 STR 首址的地址指针 LEA GR3,4 ;循环计数器 L1 SLL GR0,4 ;将已处理过的十六进制数移到高位 LD GR1,STR,GR2 ;GR1 用作临时工作寄存器 AND GR1,C00FF ;屏蔽高 8 位 SUB GR0,C30 ;减去30H CPL GR0,C0A ;< 10 否? JMI L2 ;< 10 ,完成转换 SUB GR0,C7 ;≥ 10,再减去 7 L2 ST GR1,STR,GR2 ;将 STR 中的 ASCII 码转换成十六进制数 ADD GR0,STR,GR2 ;将此位十六进制数加到 GR0 低位 LEA GR2.1,GR2 ;地址指针指向下一位 ASCII 码 LEA GR3,-1,GR3 ;循环计数器减 1 JNZ L1 ;未处理完,继续 RET C00FF DC #00FF ;十六进制常数,屏蔽高 8 位用 C30 DC #30 ;十六进制常数 30 C0A DC #0A ;十六进制常数 0A C7 DC 7 ;常数 7 STR DS 4 END

[1] [2] 下一页


相关文章