汇编语言常用子程序
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 码
评论