Casl汇编语言辅导
2008-04-28 09:33:27 来源:WEB开发网核心提示:2、数字与 ASCII 码之间的相互转换:十进制数字 0~9 的 ASCII 码是 30H~39H ,所以只要将十进制数(BCD 码)加 30H 就是对应的 ASCII 码,Casl汇编语言辅导(4),十六进制数转换成 ASCII 码可分成两段, 0~9 的 ASCII 码是 30H~39H ,完成转换
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 |
更多精彩
赞助商链接