| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
二、汇编语言常用子程序
作者:佚名    文章来源:网络    点击数:    更新时间:2006-12-9
 
 

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
 
 

【例2】将 GR0 中的二进制数乘以 7。

START ST GR0,REG SLL GR0,3 SUB GR0,REG RET REG DS 1 END

4、二进制数与十进制数的转换

1)二化十:

将二进制数转换为十进制数的一种常用算法是将被转换的二进制数依次被 10i( 对 16 位二进制数,i为 4、3、2、1、0)除,所得的商即为该十进制数位的值,其余数再被下一个 10i 除。一般用减法代替除法,即一边减 10i,一边计数器加 1,直到不够减再进行下一位 10i-1。以求得十进制数的各位数。

例如:一个相当于十进制数 34635 的二进制数,可先用 10000 去减,可减 3 次,得万位数是 3;再用 1000 去减,得千位数是 4;……

【例1】将 GR0 中的二进制数转换为十进制数的ASCII 码放入字符串 STR 中。

START LEA GR1,0 ;减数表及字符串指针 LEA GR2,5 ;循环计数器 L1 LEA GR3,48 ;该十进制位的数码预置 0 的 ASCII 码 L2 LEA GR3,1,GR3 ;数码位的 ASCII 码加 1 SUB GR0,SNO,GR1 ;操作数减去 10 JPZ L2 ;够减,继续 ADD GR0,SNO,GR1 ;不够减,操作数及数码位的 ASCII 码恢复 LEA GR3,-1,GR3 ST GR3,STR,GR1 ;转换好的该位 ASCII 码存入结果字符串 LEA GR1,1,GR1 ;地址指针加 1 LEA GR2,-1,GR2 ;循环计数器减 1 JNZ L1 ;未结束,继续下一位 RET SNO DC 10000 DC 1000 DC 100 DC 10 DC 1 STR DS 5 ;转换结果字符串 END

1)十化二:

将十进制数转换为二进制数的算法基础是下面公式:

N = (Dn-1*10n-1+Dn-2*10n-2+……+D1*101+D0*100

  = ((…((Dn-1*10+Dn-2)*10+……+D1)*10+D0)*10

可以用循环程序实现此公式,*10 可用移位及加法指令完成。

【例2】将存放在字符串 STR 中的五位十进制数(<65536)的 ASCII 码转换成二进制数放到 GR0 中 。

START LEA GR0,0 ;转换结果寄存器清 0 LEA GR2,5 ;循环计数器 LEA GR1,0 ;地址指针(偏移量) L1 SLL GR0,1 ;转换结果*10,先乘以 2 ST GR0,REG ;暂存 2*X SLL GR0,2 ;2*X*4=8*X ADD GR0,REG ;8*X + 2*X LD GR3,STR,GR1 ;取一位 ASCII 码 AND GR3,C000F ;将 ASCII 码变成 BCD 码 ST GR3,REG ;结果暂存 ADD GR0,REG ;将新的一位 BCD 码加到转换结果中 LEA GR1,1,GR1 ;地址指针加 1 LEA GR2,-1,GR2 ;循环计数器减 1 JNZ L1 ;未结束,继续下一位 RET C000F DC #000F ;十六进制常数,屏蔽高 12 位二进制数 STR DC '35475' REG DS 1 ;暂存单元 END
 
 

5、求累加和

【例1】将变量 NUMBER 中的 5 个二进制数累加后放入变量 SUM 中。

START LEA GR2,NUMBER ;地址指针 LEA GR3,5 ;循环计数器 LEA GR0,0 ;累加和清 0 L1 ADD GR0,0,GR2 ;累加 LEA GR2,1,GR2 ;地址指针指向下一个二进制数 LEA GR3,-1,GR3 ;计数器减 1 JNZ L1 ;未完,继续 ST GR0,SUM ;累加结束,累加和送入 SUM 单元 RET NUMBER DS 5 SUM DS 1 END
 

上一页  [1] [2] 


  • 上一篇文章:

  • 下一篇文章:
  • 相关文章
    汇编语言消息钩子使用教程
    简明x86汇编语言教程(7)编译优化概述
    简明x86汇编语言教程(6)利用子程序与中断
    简明x86汇编语言教程(5)串操作
    简明x86汇编语言教程(4)操作内存
    简明x86汇编语言教程(3)使用寄存器
    简明x86汇编语言教程(2)第二章 认识处理器
    简明x86汇编语言教程(1)汇编语言简介
    三、Casl汇编语言试题解释
    一、Casl汇编语言语法介绍