山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件

上传人:我*** 文档编号:145863859 上传时间:2020-09-24 格式:PPT 页数:42 大小:138KB
返回 下载 相关 举报
山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件_第1页
第1页 / 共42页
山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件_第2页
第2页 / 共42页
山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件_第3页
第3页 / 共42页
山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件_第4页
第4页 / 共42页
山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件》由会员分享,可在线阅读,更多相关《山东大学飞思卡尔单片机教学第5章 汇编语言程序设计课件(42页珍藏版)》请在金锄头文库上搜索。

1、,第五章 汇编语言程序设计,5-1 汇编语言程序设计基础 5-2 常用汇编伪指令 5-3 宏定义 5-4 汇编程序设计举例,内容提要:,标号(LABEL) 操作码(OPCODE) 操作数(OPERAND) 注释(COMMENTS) 语句标号应以英文字母开头,可以包含字母、数字和下划线。标号后面加冒号“:”表示的是当前语句的地址。以“*”开头表示该行为注解行,不参与编译。 操作码表示指令代码,为指令助记符。 操作数描述指令的寻址方式和相关的参数。第一个操作数和操作码之间用空格分开,后面的操作数与前面的操作数用逗号“,”分开。 注释有助于编程人员或读者看懂程序,因此要养成写注释的好习惯。通常的汇编

2、器都要求以分号“;”开头。正确的注释方法不是对每行的翻译,而是对几行或一段程序的功能和使用方法进行说明。,5-1 汇编语言程序设计基础,汇编语言格式,常量的表示,十进制整数(decimal),由0 9的数字序列组成。例如,100,256,1024。 十六进制整数(hexadecimal),由“$”符号后面加0 9、A F组成。例如,$05,$EF,$FFA5。 八进制整数(octal),由“”后面跟0 7的数字组成。例如,55,1000,2000。 二进制整数(binary),由“”后面跟0或1的数字序列组成。例如,101,00101101。 字符串常量(String),是由单引号()或双引号

3、(“”)引起来的可打印字符组成。若字符串的内容包含单引号,则该字符串只能用双引号表示。若字符串内容包含双引号,则该字符串只能用单引号表示。例如,ABCD, “ABCD”, A, “B”, A“B, “AB”。,1. ORG指令 读作Original,通知编译器从某地址定位代码。 例如,ORG$4000;通知编译器从$4000地址开始定位下面的代码。 2. EQU指令 格式为 :EQU 该指令表示标号与表达式等价。表达式不可以是没有定义或后面定义的符号。 例如,MaxElement:EQU20;最大元素数20 MaxSize:EQUMaxElement*4;最大占用空间80,5-2 常用汇编伪指

4、令,3. SET指令 SET指令与EQU指令类似同样用来定义标号和常量的关系,但是SET指令定义的常量后面还可以使用SET指令重新赋值。 例如,Count:SET1 One:DC.BCount Count:SET2 Two:DC.BCount 经过以上定义后,常量One的值为1,常量Two的值为2。,4. DC指令 DC(Define Constant)指令用于定义常量。语法如下: :DC . , 其中size可以是B(默认)、D、L,分别表示1个字节、2个字节、4个字节。与该指令同义的还有以下几条指令: FCB等价于DC.B,FDB、DCW等价于DC.W,FQB、DCL等价于DC.L 举例说

5、明: Somedata: DC.B0101,12,10,$10 String1:DC.B$A,$B,$C,$D String2:DC.W$A,$B,$C,$D String3:DC.L$A,$B,$C,$D,5. FCC指令 定义字符串可以使用FCC指令,其效果和DC.B相同。 例如,String:FCCABCD 从String开始的数据单元的内容依次为ABCD的ASCII码,即$41 $42 $43 $44。 6. DCB指令 DCB(Define Constant Block)用于定义常量块。使用该指令可以方便的将某段内存空间初始化为某个固定的数值。语法如下: :DCB ., 其中size

6、可以是B(默认)、D、L,分别表示1个字节、2个字节、4个字节。下面举例说明。 Label1:DCB.B 10,$00 Label2:DCB.L 10,$FFFFFFFF 将Label1开始的10个字节全部清零,将Label2开始的10个4字节空间全部初始化为$FFFFFFFF。,7. DS指令 DS(Define Space)指令用于为变量预留内存空间。该指令语法如下: :DS. 其中size可以是B(默认)、D、L,分别表示1个字节、2个字节、4个字节。另有几条指令与该指令等价: RMB等价于DS.B,RMD等价于DS.W,RMQ等价于DS.L 下面举例说明该指令的用法。 A:RMB1 B

7、:RMD1 C:RMD2 以上伪指令相当于分别定义了3个变量他们的数据宽度分别是1个字节,2个字节和4个字节。,8. ABSENTRY指令 该指令用于定义程序的入口点。语法为ABSENTRY。举例如下, ABSENTRY entry ORG $FFFE Reset:DC.W entry ORG $70 entry:NOP NOP main: LDS #$1FFF NOP BRA main 9. XDEF指令 定义外部变量,相当于C语言中的GLOBAL、PUBLIC,表示定义的变量可以在其它模块或文件中引用。例如: XDEFSCI_GET_CHAR 表示SCI_GET_CHAR这个子程序是可以被

8、其它的C程序或外部模块调用的。此处编译器是对大小写敏感的。,10. XREF指令 声明外部模块,表示此处声明的模块是在其它模块中定义的。例如: XREFSCI_GET_CHAR 11. END指令 END指令通知编译器后面的内容忽略。因此写在END后面的指令将不会被编译,也不会生成相应的机器码。,12. SECTION指令 格式为 :SECTIONSHORT SECTION指令用来声明可以重定位的段信息,指定某一段是代码还是数据等,放于什么位置。相同的名字的段代表相同的段,后面出现的同名段中的内容将被排放在前一个同名段的最后一条语句或指令之后。SHORT指明本段可以使用直接寻址模式(DIR)。

9、是为了与MASM兼容的可选参数。 代码段(code SECTION)至少要包含一条汇编指令,只包含DC、DCB的段则是常量段(constant SECTION),包含DS或空的段是数据段(data SECTION)。如果一个段中包含DC和DS或汇编语句,这样的段不是数据段,默认会被定位在ROM中。,例如: aaa:SECTION NOP STOP bbb:SECTION PSHA PULA RTS aaa:SECTION INCA 汇编程序会将后面一个aaa段的INCA指令放在前一个aaa段的STOP指令之后,它们是同一个段。,编译程序会将引用宏的地方用宏定义的内容去取代。宏必须在它被引用之前

10、定义,定义的时候也可以包含已经定义的宏,但不可以嵌套定义。MACRO , ENDM 其中MACRO、ENDM是关键字,占位符用反斜杠后面跟数字0 9或大写字母A Z表示。0占位符是表示数据宽度的,通常前面加点.。 下面举个例子:MyMacro:MACRO DC.01,2 ENDM 在程序中引用的格式如下: MyMacro.B$40,$20 编译后的结果如下: DC.B$40,$20,5-3 宏定义,例1. 多字节无符号数加法,加数分别放在add1,add2开始的数据单元,高位低地址,低位高地址。结果放在sum开始的单元中。 ORG $1000 add1:FCB$01,$02,$03,$04,$

11、05,$06,$07,$08;第一个加数 add2:FCB$11,$12,$13,$14,$15,$16,$17,$18;第二个加数 sum: DS.B 9;和 ORG $4000 LDX#add1+7;X指向第一个加数的最低位 LDY#add2+7;Y指向第二个加数的最低位 LDAB#8;设置循环计数器,共8个字节 CLC;清进位位C,5-4 汇编程序设计举例,LOOP1: LDAA1,X-;取第一加数一个字节 ADCA1,Y-;加上第二加数的对应字节,加进位位C STAA 10,Y;存到结果单元 DBNEB,LOOP1;未完继续 BCCOVER;最高位相加后无进位,转到OVER LDAA

12、#1;否则最高位加1 STAA 9,Y OVER: BRA *;结束 执行完后,sum开始的数据单元的结果为$00 $12 $14 $16 $18 $1C $1E $20,例2. 多字节无符号减法,被减数和减数分别放在sub1和sub2开始的数据单元,结果放在rst开始的单元,结果的第一个字节为符号位$00表示结果为正,$01表示结果为负。 ORG $1000 sub1:FCB$01,$02,$03,$04,$05,$06,$07,$08;被减数 sub2:FCB$11,$12,$13,$14,$15,$16,$17,$18;减数 rst: FCB $00,$00,$00,$00,$00,$0

13、0,$00,$00,$00;差 ORG $4000 LDS#rst+8;SP指向差的最低位 LDX#sub1+7;X指向被减数的最低位 LDY#sub2+7;Y指向减数的最低位 LDAB#8;设置循环计数器,共8个字节 CLC;清进位位C,LOOP1: LDAA1,X-;取被减数一个字节 SBCA1,Y-;减去减数对应的字节和进位位 STAA1,SP-;差存到结果单元 DBNEB,LOOP1;未完继续 BCCOVER;最后没有借位,则结束 MOVB#$01,SP;有借位,则将结果最高位单元置1表示结果为负 ;进一步处理 OVER: BRA *;结束,例3. 多字节压缩BCD码减法,BCD码的减

14、法,需先对减数求以10为模的补码,即用$9A减去减数,然后用被减数和减数的补码相加,再做二十进制调整,即可得到差。 但是对于多字节的减法,还要注意正确的借位,由于用DAA指令进行了调整,实际上当C0时是有进位的,C1时无进位,所以在进行下一个字节的运算之前要先对进位位做一下处理。 当被减数比减数小的时候,得出的结果同样是不正确的。需根据符号位,重新用减数减去被减数得到两者差的绝对值,再配合符号位,即可得正确结果。,minuend:FDB$2567,$5536,$2407;被减数 subtrahend:FDB$2568,$0126,$2508;减数 difference:FDB$0000,$00

15、00,$0000;差 sign:FCB$00;0表示结果为正,1表示结果为负 cnt:FCB$06;循环计数器 ORG $4000 LDS #minuend+5;SP指向被减数最低字节 LDX #subtrahend+5;X指向减数最低字节 LDY #difference+5;Y指向差的最低位字节 LDABcnt;B做循环计数器 CLC;清除进位位C LOOP1: LDAA#$9A; SBCA1,X-;求减数的补码 ADDA1,SP-;与被减数相加 DAA ;二十进制调整,STAA1,Y-;保存结果 BCCLBL1;调整进位,即对进位位取反 BCSLBL2; LBL1:SEC;设置进位位为1

16、BRALOOP2; LBL2:CLC;调整进位到此结束 LOOP2:DBNEB,LOOP1;未完继续 BCCOVER;如果结果为正结束 MOVB#1,sign;结果为负,置符号位 LDS#subtrahend+5;取减数地址放到SP LDX#minuend+5;被减数地址放到X LDY#difference+5;Y指向差 LDABcnt;用B循环计数 CLC;清进位位C BRALOOP1;跳转到LOOP1处,用减数被减数 ;再做一遍 OVER:BRA *;结束,例4. 多字节无符号数乘以单字节无符号数乘法,被乘数和乘数分别放在mul1、mul2开始的数据单元中,结果存放在rst开始的数据单元中。而多字节有符号数的乘法可以转化成无符号数的乘法进行运算。 ORG $1000 mul1:FCB$01,$02,$03,$04,$05,$06,$F5,$F5;被乘数 mul2:FCB$50;乘数 rst: FCB$00,$00,$00,$00,$00,$00,$00,$00,$00;积 O

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号