预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共72页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章汇编语言程序设计4.1伪指令 伪指令是对汇编过程起控制作用,但本身并没有对应的机器代码的指令。例:ORG2000H MOVSP,#60H MOVR0,#2FH MOVR2,#0FFH ORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址是2000H,即 存储器地址目标程序 2000H758160 2003H782F 2005H7AFF2、等值指令EQU 指令格式: 字符名称EQU数字或汇编符号 例:PA8155EQU8001H;即给标号PA8155赋值为8001H。 功能:使指令中的字符名称等价于给定的数字或汇编符号。 使用等值指令可给程序的编制、调试、修改带来方便,如果在程序中要多次使用到某一地址,由EQU指令将其赋值给一个字符名称,一旦需要对其进行变动,只要改变EQU命令后面的数字即可,而不需要对程序中涉及到该地址的所有指令逐句进行修改。但要注意,由EQU等值的字符名称必须先赋值后使用,且在同一个源程序中,同一个标号只能赋值一次。3、定义字节指令DB 指令格式: [标号:]DB8位二进制数表 功能:把8位二进制数表依次存入从标号开始的连续的存储单元中。 格式中,标号区段可有可无,DB指令之后的8位二进制数表是字节常数或用逗号隔开的字节串,也可以是用引号括起来的ASCII码字符串(一个ASCII字符相当于一个字节)。ORG1000H BUF1:DB38H,7FH,80H BUF2:DB‘abcd’ ORG伪指令指定了标号BUF1的地址为1000H,而DB伪指令是将其后的二进制数表38H,7FH,80H依次存放在1000H,1001H,1002H3个连续单元之中,BUF2也是一个标号,其地址与前一条伪指令连续,即1003H,1004H,1005H,1006H地址单元中依次存放abcd的ASII码.4、定义字指令DW 指令格式: [标号:]DW16位数据表 该指令的功能与DB相似,区别仅在于从指定地址开始存放的是指令中的16位数据,而不是字节串。每个16位数据要占两个存储单元,高8位先存,低8位后存,这和MCS-51指令中的16位数据存放顺序是一致的。5、汇编结束指令END 指令格式: [标号:]END 格式中标号可有可无。 功能:提供汇编结束标志。汇编程序遇到END后就停止汇编,对END以后的语句不予处理,故END应放在程序的结束处。6、预留存储区指令DS 指令格式: [标号:]DS字节数N 功能:从标号所在单元开始预留N个连续的单元。7、赋值指令SET 指令格式: 字符名称SET数字或汇编符号 功能:类似于EQU命令,不过SET可重复定义。8、定义位地址指令BIT 指令格式: 符号地址BIT位地址 功能:给位地址定义一个符号地址。9、定义内部RAM地址指令DATA 指令格式: 符号地址DATA内部RAM地址 功能:给内部RAM单元定义一个符号地址。10、定义外部RAM地址指令XDATA 指令格式: 符号地址XDATA外部RAM地址 格式中标号可有可无。 功能:给外部RAM单元定义一个符号地址。标号的命名规则:一般以字母或下划线开头,后跟字母、数字或下划线,长度不超过8个字符。 注意:不能用系统定义的关键字作为标号。4.2汇编语言程序设计START:MOVR1,#40H;设置R1为数据指针 MOVA,@R1;取出第一个单元中的内容 ANLA,#0FH;取第一个数的低半字节 SWAPA ;移至高半字节 INCR1 ;修改数据指针 XCHA,@R1 ;取第二个单元中的内容 ANLA,#0FH;取第二个数的低半字节 ORLA,@R1 ;拼字 MOV50H,A ;存放结果 RET4.2.2分支程序设计例3x,y均为8位二进制数,设x存入R0,y存入R1,求解:y=syn(x)图4.2程序流程图正确程序如下: SUBF:MOVA,R0 JZZERO JBACC.7,NEG MOVR1,#1 SJMPENDF ZERO:MOVR1,#0 SJMPENDF NEG:MOVR1,#0FFH ENDF:RET例4比较两个无符号数的大小。 设外部RAM的存储单元ST1和 ST2中存放两个不带符号的二进制数, 找出其中的大数存入外部RAM中的 ST3单元中。程序如下: ORG1000H ST1 EQU2000H ST2EQU2100H ST3EQU2200H START:CLRC ;清零Cy MOVDPTR,#ST1;第一个数的指针 MOVXA,@DPTR;取第一个数 MOVR2,A;保存 MOVDPTR,#ST2;第二个数的指针 MOVXA,@DPTR;取第二个数 CLRCSUBBA,R2;两数比较 JNCBIG2;若第二个数(A中)大,则转 XCHA,R2;第一个数大 BIG1:MOVDPTR,#ST3 MOV