第3 指令系统与汇编语言程序设计 3.1 CPU内部寄存器 区别于I/O寄存器! 6个16bit: D(A+B), X, Y, SP,

Slides:



Advertisements
Similar presentations
1 1.2 信息的表示与存储  数据:数据是对客观事物的符号表示。 如,数值、文字、语言、图形、图像等都是不同形 式的数据。  信息:信息是既是对客观事物变化和特征的反映,又 是事物之间相互作用、相互联系的表征。 信息必须数字化编码,才能用计算机进行传送、存 储和处理。 信息具有针对性和时效性。
Advertisements

第五章 企业所得税、个人所得税.
教员信息 姓 名:仲崇权 单 位:电子与信息工程学院 电 话: 办公室:创新院大厦720房间 :
计算机基础 第一章 计算机基础知识 机电系计算机教研室
计算机应用基础 计算机基础知识.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
计算机组成原理 北京理工大学计算机科学工程系 赵清杰 北京理工大学计算机科学工程系.
大学计算机应用基础 信息工程学院 吴 杰 学年第一学期.
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第一章 常用逻辑用语.
§1.2 命题及其关系、充分条 件与必要条件 基础知识 自主学习
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
单片机原理与应用.
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
題目:LED電子數位時鐘 第 二組 組員: 陳柏霖 李育昇.
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
单片机原理与应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
A3-1 數字系統 A3-2 資料表示法 A3-3 資料的儲存
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第2章 MCS-51单片机指令系统与汇编语言程序设计
计算机文化基础 第一章 计算机的基础知识.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
课程:《单片机原理及应用》 教材:《单片机原理及应用》 学时:理论32+实验32=64 教学内容与要求:见教学大纲
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
8051's UART mode0 output 通訊二甲 B 洪紹凱.
學習講座—數學科.
微处理器设计2 刘鹏 College of ISEE Zhejiang University
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
數位邏輯與實習 曾建勳 Week 2.
第2章 单片机的结构原理与 简单应用 (课时:10学时).
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
计算机原理及系统结构 第十八讲 主讲教师:赵宏伟                 学时:64.
第6章 向量处理机 包仲贤 兰州兰州理工大学计算机与通信学院 2019年2月16日星期六 计算机系统结构 第六章 向量处理机.
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
(第2版).
組合語言和程式範例.
多項式方程式 網頁設計規劃書 第四組 蔡瑋倫,吳柏萱,張哲誌.
第四章 指令系统及汇编语言程序设计.
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
8051單晶片 蘇恆生 老師.
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
微机原理与接口技术 西安邮电大学计算机学院 王忠民.
5-6 串列埠模式0輸出埠擴充實習.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
基础篇 微型计算机系统 硬件系统 软件系统 操作系统基础 作业 计算机编码和数制 系统综述.
ARM指令集 Author : Steve Furber Advisor: Mei-Ling Chiang Speaker: 徐翔宇
结束 放映 1.1 数制及编码 数制及其转换 编码 返回 2019/5/1.
4-9 Timer/Counter 控制七段速度
位指令 I0.0 I0.1 Q 8.0 Q 8.1 I 1.0 ( MCR< ) (MCRA) Q 8.0 I 0.0 I 1.1
九年级 上册 22.3 实际问题与二次函数 (第1课时).
第三章 计算机系统的组成与工作原理.
充分条件与必要条件.
四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A
 第四章 消费税法律制度 经济法基础 模板来自于
FPPA 程式設計 這一章開始正式進入FPPA程式設計的世界,我會從一個簡單的程式開始解說,一邊介紹專案開發時最常應用的技巧還有程式控制的手段,一邊把系統規畫的概念導入給大家,讓大家對專案的規畫能有一個初步的概念。
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
单片机原理及接口技术 前修课程:数模电、微机原理.
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
國中自然與生活科技 三年級 第二章 力與運動.
實驗的目的 單擺實驗 平均速度與瞬時速度的迷思 氣墊軌道實驗 2005年10月
Presentation transcript:

第3 指令系统与汇编语言程序设计 3.1 CPU内部寄存器 区别于I/O寄存器! 6个16bit: D(A+B), X, Y, SP, 第3 指令系统与汇编语言程序设计 兼容以前的S12 CPU 丰富、强大、灵活,高速16位处理,共400多条 按功能:数据传送、算术运算、逻辑运算、位操作、移位、控制、特殊等, 寻址方式多。 3.1 CPU内部寄存器 区别于I/O寄存器! 6个16bit: D(A+B), X, Y, SP, PC, CCR 重庆大学通信工程学院 任勇、王永东

概念---CPU执行指令时确定操作数所在单元地址的方式。 3.2 寻址方式 概念---CPU执行指令时确定操作数所在单元地址的方式。 操作数来自:寄存器、指令代码、存储单元(都有地址) S12(X)有9大种寻址方式: (1)隐含寻址(INH) 如 ROLA (循环左移,操作数A隐含在指令中) (2)立即数寻址(IMM) 如 LDAA #$FF (将十六进制数FF调入A中,#表示) (3)直接寻址(DIR) 如 LDAA $55 (8位地址) (4)扩展寻址(EXT) 如 LDAA $200A (16位地址) (5)相对寻址(REL) SHIFT: LDAA #$55 BRA SHIFT (相对地址跳转) 重庆大学通信工程学院 任勇、王永东

特征:以变址寄存器X、Y、SP、PC的内容为基址,再加或减个值,构成最终的地址 5位/9位/16位常数偏移量的变址寻址 (6)变址寻址(IDX) 特征:以变址寄存器X、Y、SP、PC的内容为基址,再加或减个值,构成最终的地址 5位/9位/16位常数偏移量的变址寻址 如 LDD 6,X ;(6+X)D(A), (6+X+1)D(B) LDAB $FF,Y ;($FF+Y)B LDAA $7200,PC ;($7200+PC)A (7)累加器变址寻址(IDX) 累加器内容做偏移量的变址寻址 如 LDAA B,X ;(B+X)A LDAA D,Y ;(D+Y)A (8)自加自减的变址寻址(IDX) 自动加减(1~8),先加、先减、后加、后减 如 STAA 1,-X ;X-1X,A(X) STAA 1,-SP ;SP-1SP, A(SP) (等效PSHA) LDX 2,SP+ ;(SP)X, SP+2SP (等效PULX) (9)间接变址寻址(IDX) 16位常数/累加器D偏移量的间接变址寻址 (内存中再取新地址) 如 LDAA [1000,X] ;((1000+X))A JMP [D,PC] ;((D+PC))PC 变址寻址---重要而常用,表象:指令操作码后的操作数是X,Y,SP,PC (指针) 重庆大学通信工程学院 任勇、王永东

分类(表3-1): 3.3 指令概览 数据传送指令 助记方法:英语含义,如: 算数运算指令 逻辑指令 程序控制指令 中断指令 CPU控制指令 3.3 指令概览 分类(表3-1): 数据传送指令 算数运算指令 逻辑指令 程序控制指令 中断指令 CPU控制指令 其它指令 注: 1、浏览书中指令内容 2、以后编程时再查阅、体会 助记方法:英语含义,如: CLR = CleaR LDAA = LoaD Accumulator A STAB = STore Accumulator B TAB = Transfer A to B MOVB =Move Byte BEQ =Branch EQual zero …… 重庆大学通信工程学院 任勇、王永东

LDAA #$1F 3.3.1 数据传送类指令 1、寄存器加载指令: LoaD (注:影响标志位) LDAB $40B0 LDD 2,X 3.3.1 数据传送类指令 1、寄存器加载指令: LoaD (注:影响标志位) 助记符 功能 操作 LDAA 将数据载入寄存器A (M)→A LDAB 将数据载入寄存器B (M)→B LDD 将数据载入寄存器D (M:M+1)→(A:B) LDS 将数据载入寄存器SP (M:M+1)→SPH:SPL LDX 将数据载入变址寄存器X (M:M+1)→XH:XL LDY 将数据载入变址寄存器Y (M:M+1)→YH:YL LDAA #$1F LDAB $40B0 LDD 2,X LDY 2,SP+ 重庆大学通信工程学院 任勇、王永东

2、寄存器存储指令:STore(影响标志位) 助记符 功能 操作 STAA 将寄存器A中内容送入内存单元 (A)→M STAB 将寄存器B中内容送人内存单元 (B)→M STD 将寄存器D中内容送入内存单元 (A)→M, (B)→M+1 STS 将堆栈SP中内容送入内存单元 (SPH:SPL)→M:M+1 STX 将变址寄存器x中内容送人内存单元 (XH:XL)→M:M+1 STY 将变址寄存器Y中内容送入内存单元 (YH:YL)→M:M+1 STAA $3F STD -$2000,PC STY 2,+SP 重庆大学通信工程学院 任勇、王永东

3、寄存器传送指令: Transfer 注意:TAB、TBA影响标志位,TFR不影响标志位; 助记符 功能 操作 TAB 将寄存器A中内容送入寄存器B (A)→B TBA 将寄存器B中内容送人寄存器A (B)→A TFR 寄存器之间的数据传送 (A、B、CCR、D、X、Y、SP) →A、B、CCR、D、X、Y、SP TSX 将寄存器SP中内容送入寄存器X (SP)→X TSY 将寄存器SP中内容送入寄存器Y (SP)→Y TXS 将寄存器X中内容送入寄存器SP (X)→SP TYS 将寄存器Y中内容送入寄存器SP (Y)→SP TPA 将寄存器CCR中内容送人寄存器A (CCR)→A TAP 将寄存器A中内容送人寄存器CCR (A)→CCR 注意:TAB、TBA影响标志位,TFR不影响标志位; 实际只有上述3条指令,其余写法是为了兼容老版本MCU 8位到16位:通过符号位扩展后传送 16位到8位:舍弃高8位,只传送低8位 例: TAB TFR A, Y TAP ( 相当于 TFR A, CCR) 重庆大学通信工程学院 任勇、王永东

建议:平常使用时,不应使用位数不匹配的方式进行数据交换。 4、寄存器交换指令: Exchange 建议:平常使用时,不应使用位数不匹配的方式进行数据交换。 重庆大学通信工程学院 任勇、王永东

3、传送方向是 -> (例 MOVB $1000, $2000 ) 4、16位数据结构是高位在前,低位在后 5、内存数据传送指令:Move 特点: 1、不影响标志位 2、允许地址与地址间传送 3、传送方向是 -> (例 MOVB $1000, $2000 ) 4、16位数据结构是高位在前,低位在后 ( 例: MOVW #$100A, $1100 ) MOVB 1,X,2,Y 重庆大学通信工程学院 任勇、王永东

6、堆栈操作指令:PuSH、PULl 特点: 1、各寄存器都可以入栈、出栈 2、可以做8位、16位操作 3、入栈时SP-1(2),出栈时SP+1(2) 重庆大学通信工程学院 任勇、王永东

7、有效地址加载指令:LEA (Load Effective Address) LEAX $100A, Y 注:不影响标志位 重庆大学通信工程学院 任勇、王永东

3.3.2 算术运算类指令 1、加、减法指令:ADD、SUBtract 说明:ABA Add B to A ( A + B ) 3.3.2 算术运算类指令 1、加、减法指令:ADD、SUBtract 说明:ABA Add B to A ( A + B ) SBA Subtract B from A ( A – B ) 重庆大学通信工程学院 任勇、王永东

2、增量、减量指令: INCrement 、DECrement 重庆大学通信工程学院 任勇、王永东

3、比较、检测指令:CoMPara、TeST 特点: 1、CMP 作减法,结果不回传,只影响标志位 2、TST 固定减0,结果不回传,只影响标志位 重庆大学通信工程学院 任勇、王永东

4、求补运算指令: 特点: 1、用0去减该值 2、不对符号位进行判断 重庆大学通信工程学院 任勇、王永东

5、十进制调整指令:DAA (Decimal Adjust A) 例: LDD #$3275 ADDB #$69 EXG A,B DAA ADCA #$26 结果:D = ? 特点: 1、是在加法操作之后进行 2、是对A进行压缩BCD码加法调整 3、只有这一条调整指令 $5944 重庆大学通信工程学院 任勇、王永东

7、乘、除法指令:MULtiply、DIVide 6、符号扩展指令: SEX 说明:1、根据最高位的值将8位扩展为16位 2、源:A,B,CCR 目的:D,X,Y,SP 例:SEX A, X 7、乘、除法指令:MULtiply、DIVide 重庆大学通信工程学院 任勇、王永东

3.3.3 逻辑指令 1、基本逻辑运算指令 2、清零和取反指令: CLear、COMplement 重庆大学通信工程学院 任勇、王永东

BCLR相当与0的位与操作 ( BCLR $20, #$0F ) BSET相当与1的位或操作 ( BSET $20, #$0F ) 3、位操作和位检测指令 BCLR相当与0的位与操作 ( BCLR $20, #$0F ) BSET相当与1的位或操作 ( BSET $20, #$0F ) 注意该类指令与TST、AND的区别--- 指定的1位或几位,非整体;BIT影响标志位,但不修改操作数 重庆大学通信工程学院 任勇、王永东

ASR Arithmetic Shift Right ROR ROtate Right 4、移位指令 LSL Logic Shift Left ASR Arithmetic Shift Right ROR ROtate Right 重庆大学通信工程学院 任勇、王永东

特点:1、ASR补最高位,其余补0 2、移出去的进C标志 重庆大学通信工程学院 任勇、王永东

是在当前PC的值加上一个8位带符号数的偏移量,即跳转范围:-128~+127 3.3.4 程序控制类指令 1、无条件转移指令 JMP (Jump),可以在64K范围内跳转 2、短分支跳转指令 是在当前PC的值加上一个8位带符号数的偏移量,即跳转范围:-128~+127 BRA BRanch Always BRN BRanch Never BCC Branch if Carry Clear BCS Branch if Carry Set BEQ Branch if EQual BMI Branch if Minus BPL Branch if Plus BHI Branch if Higher BHS Branch if Higher or Same BLO Branch if Lower BGT Branch if Greater Than 重庆大学通信工程学院 任勇、王永东

注意: 1、只作检测,满足条件转移,不影响标志位 2、结果不回传 例:BRCLR $20, #$81, LP1 BRSET $20, #$80, LP2 重庆大学通信工程学院 任勇、王永东

3、长分支跳转指令 特点:1、是在当前PC的值加上一个16位带符号数的偏移量,即跳转范围:-32768 ~ +32767 2、与JMP指令实现的方法稍有不同,只能跳转32K距离。 3、与短跳转指令完全类似 重庆大学通信工程学院 任勇、王永东

4、循环控制指令 特点:1、不影响、不依赖标志位 2、转移范围是 -256 ~ +255 ADD: LDX #$0B00 LEAY 4, X LDAB #4 CLC LOOP: LDAA X ADCA 1,Y+ STAA 1,X+ DBNE B, LOOP 特点:1、不影响、不依赖标志位 2、转移范围是 -256 ~ +255 重庆大学通信工程学院 任勇、王永东

5、子程序调用与返回指令 特点: 1、BSR 调用范围为-128~+127,子程序以RTS指令返回 2、JSR调用范围为-32768~+32767,支持多种寻址方式,直接寻址方式必须在$0000~$00FF内 (例: JSR $50 ),子程序以RTS指令返回 3、CALL 用于调用64K以外的子程序,子程序以RTC指令返回 重庆大学通信工程学院 任勇、王永东

3.3.5 中断指令 特点: 1、进入中断时,硬件自动保护现场,RTI指令将恢复现场及断点 3.3.5 中断指令 特点: 1、进入中断时,硬件自动保护现场,RTI指令将恢复现场及断点 2、SWI指令不受I、X的限制,且执行时会自动将I置1(即自动关闭可屏蔽中断),中断向量表入口地址$FFF6-$FFF7 3、各硬件中断有固定的入口地址表,中断服务程序需用RTI指令返回 重庆大学通信工程学院 任勇、王永东

1、STOP进入伪停机模式,时钟被关闭,功耗最低;当有中断或复位时被唤醒 3.3.6 S12CPU控制类指令 特点: 1、STOP进入伪停机模式,时钟被关闭,功耗最低;当有中断或复位时被唤醒 2、WAI 进入等待模式,时钟仍在工作,当有中断或复位时被唤醒,唤醒速度快 重庆大学通信工程学院 任勇、王永东

S12X还提供了高级函数指令和模糊运算指令,主要有:小值、大值、插值、乘积累加等 3.3.7 其它指令 S12X还提供了高级函数指令和模糊运算指令,主要有:小值、大值、插值、乘积累加等 重要的其它指令---程序状态寄存器指令 特殊的数据访问指令,通常被用来改变程序状态寄存器CCR 指令 操作 寻址方式 ANDCC CLC CLI CLV ORCC PSHC PULC SEC SEI SEV (CCR)∧(M)= →CCR C=0 I=0 V=0 (CCR)∨(M) →CCR (SP)–1=>SP; (CCR) →M(SP) M(SP) =>CCR; (SP)+1→SP C=1 I=1 V=1 IMM INH 重庆大学通信工程学院 任勇、王永东

S12X指令系统提供了全局23位地址访问的指令,包括: GLDAA、GLDAB、GLDD、GLDS、GLDX、GLDY、GSTAA、GSTAB、GSTD、GSTS、GSTX、GSTY等, S12X总共新增了84条这类全局寻址指令。 全局地址[22:0]由CPU本地地址[15:0]和GPAGE寄存器[22:16]联合组成。 重庆大学通信工程学院 任勇、王永东

3.4 使用汇编语言的程序设计 程序:完成特定任务的指令的集合 程序设计语言:机器语言(二进制指令代码,可直接执行) 3.4 使用汇编语言的程序设计 程序:完成特定任务的指令的集合 程序设计语言:机器语言(二进制指令代码,可直接执行) 汇编语言(特定助记符指令语句,须编译) 高级语言(通用高级语句,须编译) 单片机应用系统的程序,多用汇编语言编制(*.asm文件)或C 一个汇编程序语句<--->一条单片机指令 多个汇编语言语句汇编语言程序(源代码) 注:程序需要特定的编译程序进行编译,生成二进制机器码 汇编语言: 面向MCU硬件,不易移植,但高效、代码量小,是学习基础 重庆大学通信工程学院 任勇、王永东

[标号:] 操作码 [操作数1] [,操作数2] [;注释] 标号---该指令的符号地址,标定程序入口或转移位置 汇编语言指令格式 [标号:] 操作码 [操作数1] [,操作数2] [;注释] 标号---该指令的符号地址,标定程序入口或转移位置 注:标号必须以字母开始,分大小写 操作码---助记符,指令所实现的操作功能 注:不分大小写;前面无标号时,至少应保留一个空格;必有 操作数---参加操作的数据对象,地址、常数或表达式 注:寄存器寻址已归纳到隐含寻址中,当操作数部分出现寄存器时,通常是寄存器变址寻址;分大小写 注释---为方便阅读、修改而加的注释;可有可无 注:以“;”开始,本行其后的内容不再编译 注意:必须在英文输入法或中文半角字符模式下书写指令,全角字符  错 重庆大学通信工程学院 任勇、王永东

SHIFT:STAA PORTB ;B口循环输出;前面须有标号,表示循环入口地址 BSR DELAY ;调用延时子程序 注意:指令必须在半角字符模式下书写,全角字符不能被汇编语言程序识别。还要注意程序书写的规范和风格,如各部分最好按列对齐、统一用大写字母等,以便阅读和维护。 下面为一个飞思卡尔汇编语言程序实例: L1: LDAA #$FF ;赋初值 STAA DDRB ;设置B口方向为输出 LDAA #$FE ;赋初值 SHIFT:STAA PORTB ;B口循环输出;前面须有标号,表示循环入口地址 BSR DELAY ;调用延时子程序 ROLA ;隐含寻址,不需要操作数 BRA SHIFT ;循环 ;-------------- ;该行仅有注释,可以是下面子程序的说明 DELAY: … … ;DELAY子程序 重庆大学通信工程学院 任勇、王永东

# 立即数的标记 如:LDAA #$32 ;立即数 LDAA $32 ;地址 常数数据的表示方法 Freescale规定,加前缀 $ 十六进制 % 二进制 @ 八进制 ’ ASCII 无 十进制 # 立即数的标记 如:LDAA #$32 ;立即数 LDAA $32 ;地址 重庆大学通信工程学院 任勇、王永东

汇编程序使用的辅助性语句,并不生成机器码 起始地址伪指令 ORG 赋值伪指令 EQU 字节常量伪指令 FCB (DC.B) 汇编程序伪指令 汇编程序使用的辅助性语句,并不生成机器码 起始地址伪指令 ORG 赋值伪指令 EQU 字节常量伪指令 FCB (DC.B) 双字节常量伪指令 FDB (DC.W) 字符量伪指令 FCC 例: 注:定界符可以是 ’、/、”,建议用 ’ ORG $0008H START: LDAA #$FF PORTB EQU $0001 BIT0 EQU %0000001 BSET PORTB,BIT0 ;等价于 BSET $0001,%00000001 ORG $0200 TABLE: FCB $13,18,N1+6,21 ORG $1000 LIST: FDB $0519,$2000 ORG $2000 STAR: FCC ’ABCD’ 重庆大学通信工程学院 任勇、王永东

;********************************** ADD8: LDX #$0B01 LEAY 8,X LDAB #8 3.4.2 汇编语言编程实例 1. 基本数据传递与算术运算程序 【例3-1】BCD加法,见书 【例3-2】大小排序,见书 2.循环控制程序 【例3-3】2个8字节数求和 ;********************************** ADD8: LDX #$0B01 LEAY 8,X LDAB #8 CLC LOOP: LDAA X ADCA 1,Y+ STAA 1,X+ DBNE B,LOOP RAM区 $0B01 . $0B09 被加数0字节 被加数1字节 … 加数0字节 加数1字节 重庆大学通信工程学院 任勇、王永东

硬件延时---内部定时器实现,精确,不占CPU 软件延时---循环执行指令,粗略,占用CPU 【例3-4】2ms延时。 CPU执行时间: 3. 延时子程序 硬件延时---内部定时器实现,精确,不占CPU 软件延时---循环执行指令,粗略,占用CPU 【例3-4】2ms延时。 CPU执行时间: T = N x TB T---总执行时间,此2ms N---总时钟周期数 TB---总线时钟周期(如1/8M=125ns) 则需N=T/TB=2ms/125ns=16000 程序运行: N=4+2+3+(1+3)(TCOUNT-1)+(1+1)+3+5 故:TCOUNT=3996.25≈3996 注:其它时间可套用此,如20ms改TCOUNT为39996(或40000) ;************************************* JSR DELAY1 ;4 TCOUNT EQU 3996 ;无 DELAY1: PSHX ;2 LDX #TCOUNT;3 DLOOP: DEX ;1 BNE DLOOP ;3/1 PULX ;3 RTS ;5 重庆大学通信工程学院 任勇、王永东

又【例3-5】双重循环的100ms延时。 忽略配合指令的执行时间,粗略估算: 内循环=200 x (1+1+3)T =1000T 总时间=100x1000T =100000T 2MHz晶振时,总线频率=1MHz  T=1us 子程序延时时间即100ms ;//////////////////////////////////////////////////////////////////// ;子程序DELAY:利用寄存器X、Y, ; 执行两重循环实现延时。 DELAY: PSHX PSHY LDX #100 DELAY1: LDY #200 DELAY2: NOP ;1T NOP ;1T DBNE Y,DELAY2 ;3T DBNE X,DELAY1 PULY PULX RTS 注:其它延时时间套此;但MCU总线频率不同---延时不同 重庆大学通信工程学院 任勇、王永东

4. 数据查表程序 【例3-6】将A中的两个4位十六进制数转换为ASCII码,分别存入$2080、$2081中。(0~9的ASCII码:$30~$39,A~F:$41~$46) ;主程序段******************** ORG $8000 HEXA: TFR A,X ANDA #$0F JSR TRANS STAB $2080 TFR X,A LSRA STAB $2081 …… ;************************************************** ;子程序TRANS:十六进制数转换为ASCII码 ;入口参数:(A)=十六进制数,高4位为0 ;出口参数:(B)=ASCII码 TRANS: PSHX ;X压栈 LDX #TABLE ;置表地址 LDAB A,X ;查表,(X+A)B PULX ;X出栈 RTS ; 返回 TABLE: FCC ‘0123456789ABCDEF’ 重庆大学通信工程学院 任勇、王永东

5. 多分支结构程序(类似查表) ; 根据4x4键盘的键号执行相应子程序。 ……………… KeyMain: JSR Key16 ;调用键号获取子程序(键号:0~15,16无键按下) LDAA Key_Numb ; 加载键号到A,Key_Numb地址预先有定义 LSLA ; A = A × 2(分支编号) LDX #Jmp_Table ;给X赋表首地址 LDY A, X ;给Y赋为(X+A),即加偏移A后查得分支地址 JSR Y ;跳转到Y指的分支地址 Jmp_Table: FDB Key0Sub ;各个分支入口地址列表,双字节! FDB Key1Sub FDB Key15Sub FDB KeyNo Key0Sub: … … ;键号0功能 RTS Key1Sub: … … ;键号1功能 Key15Sub: … … ; 键号15功能 KeyNo: RTS ; 无键按下,直接返回 重庆大学通信工程学院 任勇、王永东

Freescale MCU汇编编程几个提示------ 1、程序是被编译成二进制码放在程序存储器(FLASH)的,通过PC递加,自动逐条执行;PC值指向的下一条将要执行的指令。 2、程序处理主要是通过访问寄存器、数据存储器(RAM)的各单元实现所需功能要求的,而CPU寄存器(A,B,X,Y,CCR)是经常要用到的工作寄存器。 3、理解MCU的存储器空间分配图,寄存器、RAM、FLASH是统一编址在64K地址空间的,每单元8位(1 Byte);访问寄存器使用其功能符号形式,访问RAM区可用16位地址形式($xxxx)。 4、主程序通常是:初始化以后,循环等待或原地等待---是个无限循环。 子程序用标号定义开始,用RTS结束;主程序用BSR或JSR调用之; 中断服务子程序也用标号定义开始,结束则用RTI;需要声明中断向量对应的程序入口,其执行是当中断发生时自动被执行的。 5、适当伪指令:辅助编程,便于修改、理解等。 6、规范与格式:大写、缩进、对齐、注释。文件名、子程序名、标号名自明。 7、编程方法: 熟悉指令,理解范例,套用实践,举一反三 由小到大,优化整理,结合硬件,完备应用 重庆大学通信工程学院 任勇、王永东

本章习题: S12X指令系统的分类? S12X指令系统有几种寻址方式? 变址寻址方式的指令中,作为基址的可以是哪些寄存器? 数据载入寄存器、寄存器数据存入内存、寄存器数据传入寄存器、内存数据移入内存这4类指令对应的助记符的关键字的英文含义是什么? 理解S12XCPU的各条指令格式和功能。 列出S12X汇编程序设计中的常数表示方法? 什么是伪指令?常用伪指令的功能有哪些? 读懂各个程序实例。 编写汇编程序:延时500ms的子程序。(两重循环,16MHz晶振) 编写汇编程序:10个整数的冒泡法排序程序。 重庆大学通信工程学院 任勇、王永东