二、汇编语言常用子程序
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 ,所以只要