精品推荐
阅读排行
· PRO/E 十种技巧· [组图] 3ds Max 高级长篇人
· 路由技术介绍
· [组图] PRO/E的曲面设计
· 怎样学好PRO/E软件?
· [组图] 快速将你的相片矢量
· [组图] Photoshop制作珠宝文
· [组图] flash人物绘画教程
· 《俄罗斯方块》程序
· Pro/ENGINEER 学习资
| 作者:佚名 来源:www.pccode.net 整理 发布时间:2006-3-7 14:18:11 发布人:wongrs | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 一、Casl汇编语言语法介绍 学习一个汇编语言需要掌握3个要点:CPU 的可编程寄存器结构、寻址方式及指令系统、伪指令。 1、COMETCPU 的可编程寄存器 COMETCPU 字长 16 位,采用从左到右的编号。bit0 在最左边(最高位),bit15 在最右边(最低位)
1)16 位通用寄存器五个: GR0、GR1、GR2、GR3、GR4 通用功能:各种算术逻辑运算 特殊功能:除 GR0 外都可作变址寄存器(地址指针)XR,GR0 可看成累加器。 GR4 兼作堆栈指针(SP) 2)指令计数器 PC 一个(16位) 存放正在执行的那条指令的第 1 个字的地址(一条指令占二个字),指令结束时,PC 中存放下一条指令的地址(一般为原指令地址 +2 )。 3)状态寄存器 FR 一个(二位)
可以把 FR0 看成 SF(符号位),FR1 看成 ZF(零位位) 除了算术逻辑运算指令(包括移位指令)外,LEA 指令也会影响 FR 2、符号指令写法与寻址方式 OP GR,ADR[,XR] 其中 OP 为操作码;GR 为五个通用寄存器 GR0~GR4 之一;ADR 为一个 16 位的地址码;XR 为四个变址寄存器 GR1~GR4 之一,[ ]表示可以省略。 1)直接寻址:当 [,XR] 省略时,为直接寻址。 2)变址寻址:有效地址 E = ADR +(XR),当 ADR = 0 时,为寄存器间接寻址。 3)立即数寻址:Casl 没有立即数寻址。但在 LEA 指令中,当 [,XR] 省略时,可作立即数传送。没有立即数运算指令。 4)寄存器寻址:Casl 也没有寄存器寻址(对源操作数)。但 LEA 指令当 ADR = 0 时,可作寄存器寻址(只用于数据传送)。 3、Casl指令系统 1)取数指令 LD:内存→寄存器 LD GR,ADR[,XR] 2)存数指令 ST:寄存器→内存 ST GR,ADR[,XR] 3)加法 ADD、减法 SUB、逻辑与 AND、逻辑或OR、逻辑异或 EOR指令:
内存 OP 寄存器→寄存器 4)算术比较 CPA: 两个带符号数比较,结果不回送,只影响标志位。 CPA GR,ADR[,XR] 5)逻辑比较 CPL:两个无符号数比较,结果不回送,只影响标志位。 CPL GR,ADR[,XR] 6)算术左移 SLA、算术右移 SRA:把操作数看成带符号数。对寄存器操作数进行移位(GR 的第 0 位——符号位不变。右移时空出的其余位补与第 0 位相同的 1 或 0 ;左移时空出的位补 0 ),位数由有效地址 E 决定。
7)逻辑左移 SLL、逻辑右移 SRL:把操作数看成无符号数。对寄存器操作数进行移位(不管左右移,GR 空出的位补 0 ),位数由有效地址 E 决定。
8)取有效地址指令LEA:E→寄存器 LEA GR,ADR[,XR] 该指令有几个特殊用途: 【例1】LEA GR0,41H 把立即数 41H 送给 GR0 【例2】LEA GR0,0,GR1 把寄存器 GR1 的内容送给 GR0 【例3】LEA GR1,1,GR1 寄存器 GR1 的内容加 1(相当于 8086 汇编中的 INC 指令) 9)无条件转移指令JMP与条件转移指令JPZ(不小于转)、JMI(小于转)、JNZ(不等于转)、JZE(等于转)
●当地址码中缺 [XR] 时,所有转移指令为直接转移( ADR 即为转移地址) 当地址码中有 [XR] 时,所有转移指令为间接相对接转移 ●JPZ 与 JMI 根据符号位 FR0 作为判断条件 JNZ 与 JZE 根据零位位 FR1 作为判断条件 10)进栈 PUSH 与出栈 POP: (1)进栈指令 PUSH:
(SP)-1→SP,E→(SP) (2)出栈指令 POP:
((SP))→GR,(SP)+1→SP 注意:出栈指令的目的寄存器是 GR0~GR4,而进栈指令的源操作数不包括 GR0。 11)子程序调用CALL与返回 RET指令 4、伪指令 1)START:程序开始 2)END:程序结尾 3)常量定义指令 DC: 此伪指令与其它汇编语言中的 DB 指令似。利用 DC 指令可定义: (1)定义十进制常数:
其中 -32768 < n ≤65535 (2)定义字符串常数:
(3)定义十六进制常数:
其中 0000 ≤ h ≤FFFF (4)定义地址:
其中 LABLE 是程序中的地址标号 因为 Casl 没有立即数运算指令,所以需要与立即数进行算术逻辑运算时,都要将立即数定义为内存常数进行运算。 4)变量定义指令 DS:用来保留指定字数的存储区域
其中 n 是十进制常数(≥0),当 n=0 时,存储区域不存在,但标号 LABLE 仍然有效,即代表下一字的地址。 5)宏指令:IN、OUT、EXIT Casl 中有进行输入、输出及结束程序等宏指令,而没有定义输入、输出符号指令,这类处理由操作系统完成。 程序中出现宏指令时,Casl 生成调用操作系统的指令串,但是,生成的指令串字数不定。 执行宏指令时,GR 的内容保持不变,而 FR 的内容不确定。 (1)输入宏指令 IN:
宏指令 IN 从输入装置上输入一个记录,纪录中的信息(字符)依次按字符数据的形式存放在标号为 ALABLE 开始的区域内,已输入的字符个数以二进制数形式存放在标号为 NLABLE 的字中,纪录之间的分隔符号不输入。 (2)输入宏指令 OUT:
宏指令 OUT 将存放在标号为 ALABLE 开始的区域中的字符数据作为一个记录向输出装置输出,输出的字符个数由标号为 NLABLE 的字的内容指定。输出时,若要纪录间的分隔符号,由操作系统自动插入输出。 (3)宏指令 EXIT :
宏指令 EXIT 表示程序执行的终止,控制返回操作系统。 二、汇编语言常用子程序 1、拆字与拼字: 【例1】将 GR0 中的四位 BCD 码从高到低依次存放到 GR2 所指的四个内存单元中。
【例2】将存放在 GR2 所指的四个内存单元中的四位 BCD 码依从高到低顺序压缩到 GR0 中 。
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 中。
【例2】将 GR0 中的 16 位二进制数化成四位十六进制数 ASCII 码从高到低依次存放到字符串变量 STR 中。
【例3】将字符串 STR 中的四位十六进制数的 ASCII 码化成 16 位二进制数放到 GR0 中 。
3、利用加减法及移位指令做乘法: 1)左移指令可将操作数乘 2 的整数次方(2、4、8、16);右移指令可将操作数除以 2 的整数次方。 若操作数是无符号数,用逻辑移位指令;若操作数是有符号数,用算术移位指令。 【例1】将 GR0 中的二进制数乘以 8。
【例2】将 GR0 中的带符号二进制数除以 4。
2)将移位指令和加减法结合起来可完成乘数不是 2 的整数次方的乘法运算。 【例1】将 GR0 中的二进制数乘以 10。
【例2】将 GR0 中的二进制数乘以 7。
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 中。
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 中 。
5、求累加和 【例1】将变量 NUMBER 中的 5 个二进制数累加后放入变量 SUM 中。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| [ ] [返回上一页] [打 印] [收 藏] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上一篇文章:Casl汇编语言辅导(2)
下一篇文章:学写基于对话框的程序 |
