工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1079|回复: 5

Casl汇编语言辅导

[复制链接]
发表于 2003-9-2 14:14 | 显示全部楼层 |阅读模式
一、Casl汇编语言语法介绍
学习一个汇编语言需要掌握3个要点:CPU 的可编程寄存器结构、寻址方式及指令系统、伪指令
1、COMETCPU 的可编程寄存器
COMETCPU 字长 16 位,采用从左到右的编号。bit0 在最左边(最高位),bit15 在最右边(最低位)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1)16 位通用寄存器五个:
GR0、GR1、GR2、GR3、GR4
通用功能:各种算术逻辑运算
特殊功能:除 GR0 外都可作变址寄存器(地址指针)XR,GR0 可看成累加器
GR4 兼作堆栈指针(SP)
2)指令计数器 PC 一个(16位)
存放正在执行的那条指令的第 1 个字的地址(一条指令占二个字),指令结束时,PC 中存放下一条指令的地址(一般为原指令地址 +2 )。
3)状态寄存器 FR 一个(二位)
运算结果 FR0 FR1  
大于  0 0
等于 0 1
小于 1 0
可以把 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指令
ADD   ┐   
SUB   │   
AND  ├ GR,ADR[,XR]  
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 指令)
【例4】LEA GR1,-1,GR1 寄存器 GR1 的内容减 1(相当 8086 汇编中的 DEC 指令)
【例5】LEA GR1,N,GR1 寄存器 GR1 的内容加 N(相当于立即数加法)
【例6】LEA GR1,-N,GR1 寄存器 GR1 的内容减 N(相当于立即数减法)
9)无条件转移指令JMP与条件转移指令JPZ(不小于转)、JMI(小于转)、JNZ(不等于转)、JZE(等于转)
JMP    ┐   
JPZ    │   
JMI    ├ ADR[,XR]  
JNZ   │   
JZE   ┘
●当地址码中缺 [XR] 时,所有转移指令为直接转移( ADR 即为转移地址)
   当地址码中有 [XR] 时,所有转移指令为间接相对接转移
●JPZ 与 JMI 根据符号位 FR0 作为判断条件
  JNZ 与 JZE 根据零位位 FR1 作为判断条件
10)进栈 PUSH 与出栈 POP
(1)进栈指令 PUSH:
PUSH ADR[,XR]
(SP)-1→SP,E→(SP)
(2)出栈指令 POP:
POP GR  
((SP))→GR,(SP)+1→SP
注意:出栈指令的目的寄存器是 GR0~GR4,而进栈指令的源操作数不包括 GR0。
11)子程序调用CALL与返回 RET指令
(1)子程序调用指令 CALL:
CALL ADR[,XR]
(SP)-1→SP,(PC)+2→(SP),E→(PC)
(2)子程序返回指令 RET
RET
((SP))→PC,(SP)+1→SP
4、伪指令
1)START:程序开始
2)END:程序结尾
3)常量定义指令 DC:
此伪指令与其它汇编语言中的 DB 指令似。利用 DC 指令可定义:
(1)定义十进制常数:
十进制常数名 DC n
其中 -32768 < n ≤65535
(2)定义字符串常数:
字符串常数名 DC '字符串'  
(3)定义十六进制常数:
十六进制常数名 DC #h
其中 0000 ≤ h ≤FFFF
(4)定义地址:
地址常数 DC LABLE  
其中 LABLE 是程序中的地址标号
因为 Casl 没有立即数运算指令,所以需要与立即数进行算术逻辑运算时,都要将立即数定义为内存常数进行运算
4)变量定义指令 DS:用来保留指定字数的存储区域
[LABLE] DS n
其中 n 是十进制常数(≥0),当 n=0 时,存储区域不存在,但标号 LABLE 仍然有效,即代表下一字的地址。
5)宏指令:IN、OUT、EXIT
Casl 中有进行输入、输出及结束程序等宏指令,而没有定义输入、输出符号指令,这类处理由操作系统完成
程序中出现宏指令时,Casl 生成调用操作系统的指令串,但是,生成的指令串字数不定
执行宏指令时,GR 的内容保持不变,而 FR 的内容不确定
(1)输入宏指令 IN:
[LABLE] IN ALABLE,NLABLE  
宏指令 IN 从输入装置上输入一个记录,纪录中的信息(字符)依次按字符数据的形式存放在标号为 ALABLE 开始的区域内,已输入的字符个数以二进制数形式存放在标号为 NLABLE 的字中,纪录之间的分隔符号不输入
(2)输入宏指令 OUT:
[ LABLE] OUT ALABLE,NLABLE  
宏指令 OUT 将存放在标号为 ALABLE 开始的区域中的字符数据作为一个记录向输出装置输出,输出的字符个数由标号为 NLABLE 的字的内容指定。输出时,若要纪录间的分隔符号,由操作系统自动插入输出
(3)宏指令 EXIT :
[LABLE] EXIT
宏指令 EXIT 表示程序执行的终止,控制返回操作系统
由于高程指导书中有些写的不是很好,固整理一份资料放在这边,希望对大家有所帮助。
发表于 2003-9-3 08:34 | 显示全部楼层
[em06][em06][em06]

编译器你哪里找来那么多这些帖子~~~
厉害~~
最好高程每一章都有一份,嘻嘻
回复

使用道具 举报

 楼主| 发表于 2003-9-7 03:49 | 显示全部楼层
最近在看这方面的,大家一起学习啦,哈哈
有好东西就拿出来共享
回复

使用道具 举报

发表于 2003-9-7 10:46 | 显示全部楼层
编译器,不要转贴了好不好??分享一下你自己的一些编程代码吧,我很羡慕你能这么强,教教我阿!!
回复

使用道具 举报

 楼主| 发表于 2003-9-7 18:45 | 显示全部楼层
这个论坛很多高手的,我很菜的,嘻嘻。在casl上没什么必要自己写很多代码吧,我看他也是为了高程而已,这个论坛就是大家交流的地方嘛,有什么疑问大家提出来大家讨论讨论研究研究
回复

使用道具 举报

发表于 2003-10-28 02:25 | 显示全部楼层
不懂ing!!!!!!!!!
走人先 ̄ ̄ ̄ ̄
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-29 09:02

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表