【例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 |
3、利用加减法及移位指令做乘法:
1)左移指令可将操作数乘 2 的整数次方(2、4、8、16);右移指令可将操作数除以 2 的整数次方。
若操作数是无符号数,用逻辑移位指令;若操作数是有符号数,用算术移位指令。
【例1】将 GR0 中的二进制数乘以 8。
SLL | GR0,3 |
【例2】将 GR0 中的带符号二进制数除以 4。
SRA | GR0,2 |
2)将移位指令和加减法结合起来可完成乘数不是 2 的整数次方的乘法运算。
【例1】将 GR0 中的二进制数乘以 10。
START | ||
SLL | GR0,1 | |
ST | GR0,REG | |
SLL | GR0,2 | |
ADD | GR0,REG | |
RET | ||
REG | DS | 1 |
END |
【