汇编语言常用子程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、汇编语言常用子程序

1、拆字与拼字:

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

START

LEA GR3,4;循环计数器

L1ST 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;循环计数器

L1SLL 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;循环计数器

L1ST 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 码用

C30DC#30 ;十六进制常数30

STR DS 4

REG DS 1 ;暂存单元

END

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

START

LEA GR2,3;相对于STR 首址的地址指针

LEA GR3,4;循环计数器

L1ST GR0,REG;保护其余几位二进制数

AND GR0,C000F;屏蔽高12 位,留下最低4 位二进制数

CPL GR0,C10;< 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 位二进制数

C30DC#30 ;十六进制常数30

C10DC10 ;十进制常数10

C7DC7 ;常数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;循环计数器

L1SLL GR0,4;将已处理过的十六进制数移到高位

LD GR1,STR,GR2;GR1 用作临时工作寄存器

AND GR1,C00FF;屏蔽高8 位

SUB GR1,C30;减去30H

CPL GR1,C0A;< 10 否?

JMI L2;< 10 ,完成转换

SUB GR1,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 位用

C30DC#30 ;十六进制常数30

C0A DC#0A ;十六进制常数0A

C7DC7 ;常数7

STR DS 4

END

3、利用加减法及移位指令做乘法:

1)左移指令可将操作数乘 2 的整数次方(2、4、8、16);右移指令可将操作数除以 2 的整数次方。

若操作数是无符号数,用逻辑移位指令;若操作数是有符号数,用算术移位指令。

【例1】将 GR0 中的二进制数乘以 8。

SLL GR0,3

相关文档
最新文档