




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及其嵌入式应用教程单片机原理及其嵌入式应用教程06January2023单片机概述
26December2022单片机的发展单片机的发展处理器体系结构_冯.诺依曼结构存储器有程序存储器与数据存储器,一般前者用ROM,后者用RAM,他们与CPU的连接有两种方案:冯.诺依曼结构和哈佛结构。冯·诺伊曼结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。冯·诺伊曼结构计算机将代码作为一种特殊的数据来操作。这种结构方案如下图:程序存储器CPU数据存储器Motorola公司的微处理器采用此种结构存储器统一编址处理器体系结构_冯.诺依曼结构存储器有程序存储器与数据存储器哈佛结构哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令总线和数据总线有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。Intel公司的MCS-51/96系列的单片机就是采用这种结构这种结构方案如下图:程序存储器CPU数据存储器存储器分离编址哈佛结构哈佛结构是一种将程序指令存储和数据存储分开的存储器结I/O端口和寄存器的编址I/O端口分离编址:I/O端口独立开辟一个空间,用专门的I/O访问扩展线与指令实现I/O操作。如Intel公司的80×86指令系统有IN和OUT指令实现I/O口操作。I/O端口统一编址:将I/O地址与存储器地址统一在一个空间,分配不同的地址。寄存器编址原则类似。Motorola微控制器的寄存器占用存储器资源,为它们分配了一些专用的地址空间CPU程序存储器数据存储器I/O端口寄存器统一编址的体系结构I/O端口和寄存器的编址I/O端口分离编址:I/O端口独立开内部时序内部时序CPU08内部时序由4相(节拍)组成,分别为T1、T2、T3、T4,各相输出一个时钟脉冲,相位差90°。每4拍组成一个CPU时钟周期,可合并看成一个CPU总线时钟。定义T1上升沿为CPU总线时钟上升沿,地址总线上下一个新地址在T3上升沿开始有效。数据总线上的数据刷新与T1上升沿同步如总线时钟频率为8M,CPU的T节拍频率就为32M,锁相环时钟发生电路或晶振电路需输出32M的时钟频率。周期1周期2T1T2T3T4T1T2T3T4T1T2T3T4地址周期N数据周期N执行周期CPU时钟内部地址总线内部数据总线内部时序内部时序周期1周期2T1T2T3T4T1T2T3T4内部时序内部时序CPU08内部时序由4相(节拍)组成,分别为T1、T2、T3、T4,各相输出一个时钟脉冲,相位差90°。每4拍组成一个CPU时钟周期,可合并看成一个CPU总线时钟。定义T1上升沿为CPU总线时钟上升沿,地址总线上下一个新地址在T3上升沿开始有效。数据总线上的数据刷新与T1上升沿同步如总线时钟频率为8M,CPU的T节拍频率就为32M,锁相环时钟发生电路或晶振电路需输出32M的时钟频率。周期1周期2T1T2T3T4T1T2T3T4T1T2T3T4地址周期N数据周期N执行周期CPU时钟内部地址总线内部数据总线内部时序内部时序周期1周期2T1T2T3T4T1T2T3T4流水线技术流水线技术将每条指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程。例如将指令分为3步:取值译码执行取指译码执行取指译码执行取指译码执行T1T2T3T4T5T6采用流水线技术后,并没有加速单条指令的执行,但实现多条指令的不同步骤同时执行,总体上加快了指令流速度缩短程序执行时间取指译码执行第一条指令第二条指令第三条指令第四条指令…流水线技术流水线技术将每条指令分解为多步,并让不同指令的各步M68HC908GP32单片机基本结构概述06January2023基本结构概述M68HC908GP32单片机基本结构概述26Decemb
MC68HC908GP32TBMADCKBICOPLVIBRKMONSCISPITIM1TIM2PORTAPORTBPORTCPORTDPORTE88782CPU08FlashRAMSIMIRQCGMC与HC05向下兼容的中央处理器模块512BytesRAM32,292BytesFlash监控模块断点模块系统集成模块外部中断模块正常操作监视模块低电压禁止模块32kHz时钟发生器模块时基模块8个键盘中断8通道/8-BitA/D转换33个双向I/O口所有I/O引脚允许10mA灌电流10mA拉电流两个2通道16-Bit定时器
输入捕捉
输出比较
脉宽调制输出PWM异步串行通信接口SCI同步串行外围接口SPIDIP40,QFP44MC68HC908GP32TBMADCKBICOPLVIBR0页直接寻址可实现位操作速度快,代码效率高32256字节Flash存储区控制及状态寄存器区32192字节未定义3字节未定义区16字节未定义区307字节监视ROM区43字节未定义区Flash块保护寄存器93字节未定义区36字节Flashu复位和中断向量区$FFFF$FF0F$FF0D$FE0C$FE00$FDFF$8000$7FFF$0240$023F$0040$003F$0000$FF10$FE1F$FE20$FF52$FF53$FF7D$FF7E$FF7F$FFDB$FFDC映象寄存器:通过存储器地址访问的寄存器寄存器与存储器一样被分配地址,软件通过读写寄存器地址访问寄存器设备(没有专用I/O指令)。要使用寄存器名前需用伪指令确定寄存器名和地址的对应关系程序和数据存储器(都用相同的存储器,统一编址映象)32kFlash512字节RAM64字节I/O寄存器区512ByteRAMHC08GP32存储器组织0页直接寻址32256字节Flash存储区控制及状态寄存器区M68HC08中央处理器结构701587015070150算术逻辑运算部件ALUAHXSPCCRPCCPU寄存器M68HC08中央处理器结构7M68HC08系列单片机的CPU寄存器16-bit
16-bit
16-bit
EasierSignedArithmetic
累加器(A)Accumulator(A)堆栈指针(SP)StackPointer(SP)程序计数器(PC)ProgramCounter(PC)条件寄存器(CCR)ConditionCodeRegister(CCR)进位/借位标志Carry/Borrow(MSB)负标志位Negative(MSB=1)中断屏蔽标志位InterruptMask半进位标志位Half-Carry(forBCD)零标志位Zero溢出标志位Two’sComplimentOverflowVXXXXX0000011707011HINZC15变址寄存器(H:X)IndexRegister(HX)XHM68HC08系列单片机的CPU寄存器16-bit累06January2023寻址方式与指令系统26December2022寻址方式与指令系统隐含寻址隐含寻址INHInherentCPU08有16种寻址方式执行指令的所有信息均在操作码中,CPU不需要从寄存器、存储器中取操作数,操作数隐含在累加器、变址寄存器或状态寄存器中。具有隐含寻址方式的指令均为单字节指令INCA ;累加器A内容加1,机器码$4C INCX ;变址寄存器X内容加1,机器码$5CDECA ;累加器A内容减1,机器码$4ADECX ;变址寄存器X内容减1,机器码$5ACEI ;中断屏蔽位I清0,机器码$9ASEI ;中断屏蔽位I置1,机器码$9B隐含寻址隐含寻址INHInherentCPU08有16立即寻址操作数包含在操作码的后继字节中。立即寻址主要用于访问常数,多为二字节指令,第一个字节为操作码,第二字节为操作数,在立即寻址方式中操作数为立即数,立即数前要加符号前缀“#”,说明是操作数值而不是地址。立即寻址IMMImmediateLDA#%01011010 ;将二进制数%01011010送累加器A,机器码为$A65A,%表示后面的操作数是二进制数。ADD#$30 ;将累加器A的内容与立即数$30进行不带进位加运算,结果存至A,机器码$AB30,$表示后面的操作数为16进制数LDHX#$8030 ;三字节指令,给变址寄存器H:X赋值$8030,机器码为$458030,执行后H的(H)=$80,(X)=$30LDX#-10;默认十进制立即寻址操作数包含在操作码的后继字节中。立即寻址主要用于访问直接寻址直接寻址DIRDirect操作数的有效地址包含于操作码后的一个字节中。由于操作数的有效地址仅1字节,由此直接寻址方式只能对存储器0页的256个字节空间($0000~$00FF)进行操作。0页存储器有I/O控制和状态寄存器,常用的用户数据也尽量放在0页,这样访问可节省程序空间,提高访问速度。直接寻址指令一般为双字节指令第一字节是操作码,第二字节是操作数有效地址。STA$40 ;将累加器A中的值送$40单元 STA$40A$40$7FLDA$40 ;将$40单元内容送累加器A中 LDA$40A$40$7F$7F$7FLDA#$77STA$40LDA$40直接寻址直接寻址DIRDirect操作数的有效地址包含于扩展寻址扩展寻址EXTExtended操作数的有效地址包含于操作码后的两个字节中。由于操作数有效地址2字节,可寻址64k存储空间。扩展寻址一般为三字节第二、三字节是操作数有效地址LDA$0200 ;将$0200单元内容送累加器A,机器码为$C60200STA$0240 ;将累加器A的内容送$0200单元,机器码为$C7024SourceFormOperationDescriptionEffectonCCRAddressModeOpcodeOperandCyclesVHINZCLDA#oprLoadAfromMA←(M)0---IMMA6ii2LDAoprDIRB6dd3LDAoprEXTC6hhll4↓↑↓↑扩展寻址扩展寻址EXTExtended操作数的有效地址包变址寻址_无偏移量变址寻址无偏移量变址寻址操作数的有效地址在16位变址寄存器H:X中。由于H:X为16位,可访问64k空间。无偏移量变址寻址指令为单字节指令LDA,X ;将H:X指定的存储单元的内容送A,机器码为$F60242$7FLDA,XH:X起到16位指针的作用AHX$0240$0241$0242$0243$0244$7F变址寻址_无偏移量变址寻址无偏移量变址寻址操作数的有效地址在变址寻址_8位偏移量变址寻址8位偏移量变址寻址操作数的有效地址是16位变址寄存器H:X中的无符号整数与操作码后的一个字节无符号整数之和,也可以访问64k空间。8位偏移量变址寻址指令为双字节指令LDA$10,X ;将H:X中的值加上偏移量$10所得地址的存储单元的内容送A,机器码为$E610$7FLDA$10,X偏移量为&10H:X内容不变…0200…AHX$0200$0201$020F$0210$7F变址寻址_8位偏移量变址寻址8位偏移量变址寻址操作数的有效地变址寻址_16位偏移量变址寻址16位偏移量变址寻址操作数的有效地址是16位变址寄存器H:X中的无符号整数与操作码后的两个字节无符号整数之和,也可以访问64k空间。16位偏移量变址寻址指令为三字节指令LDA$100,X ;将H:X中的值加上偏移量$100所得地址的存储单元的内容送A,机器码为$D60100$7FLDA$100,X偏移量为&100H:X内容不变…0100…AHX$0100$0101$020F$0200$7F变址寻址_16位偏移量变址寻址16位偏移量变址寻址操作数的有8位偏移量和16位偏移量8位偏移量为无符号整数设LDHX#$0090STA$C0,X将累加器内容送$0150单元16位偏移量为符号数STA$FFFE,X将累加器A的内容送$8E单元STA-$10,X将累加器A的内容送$80单元8位偏移量和16位偏移量8位偏移量为无符号整数查表程序LOOK:LDATab,X;LDA32773,XBRA*TabFCB$00,$01,$04,$09FCB$10,$19,$24,$31FCB$40,$51000104091625364964818005TabH:X00:07查找表首地址800E+7变址:H:X不变,改变偏移量偏移量不变,改变H:X查表程序000104091625364964818005Ta变址寻址变址寻址以H:X作为指针无偏移量变址寻址(IX)STA,X8位偏移量变址寻址(IX1)ADD$10,X16位偏移量变址寻址(IX2)AND$1030,X如(H:X)=$1030,操作数地址为$1030$1040$2060变址寻址变址寻址无偏移量变址寻址(IX)S堆栈堆栈由栈区和堆栈指针构成。栈区是一组按先进后出(FILO)方式工作的寄存器或存储单元,用于存放数据。堆栈指针(SP)是用来指示栈顶地址的寄存器,用于自动管理栈区,指示数据存入(进栈)或取出(出栈)的位置。$0100$00FF$00FE$00FD$00FCSPA$0100$00FFB$00FE$0100$00FF$00FE$00FD$00FCSP$00FEBA$00FF$0100堆栈堆栈由栈区和堆栈指针构成。栈区是一组按先进后出(FILO堆栈类型硬件堆栈:栈区由微处理器内部的寄存器组构成;软件堆栈:由软件在内存中开辟一个特定的RAM区构成栈区。堆栈指针用来指示栈顶位置,可由用户设初值,一旦设定后栈底位置即确定,此后SP内容即栈顶位置由CPU自动管理。随着堆栈操作的进行,SP的值会自动变化,其变化方向因栈区的编址方式分为向下增长型和向上增长型。向下增长型堆栈:数据进栈时,SP自动减量,向上浮动而指向新栈顶。数据出 栈时,SP自动增量,向下浮动指向新栈顶,M68HC08就是向 下增长型。向上增长型堆栈与之相反堆栈主要用于中断处理和子程序调用堆栈类型硬件堆栈:栈区由微处理器内部的寄存器组构成;堆栈指针堆栈寻址堆栈寻址堆栈指针是16位寄存器,堆栈寻址就是将堆栈指针作变址寄存器使用。堆栈寻址有8位偏移量(SP1)和16位偏移量(SP2)两种例如:SP1: LDA$10,SP ;将SP中的值加上$10所得和作为存储器单元地址,将其内容送A,机器码$9EE610如(SP)=$0200,指令将($0210)送ASP2:ADC$0120,SP ;;将SP中的值加上$0120所得和作为存储器单元地址,将其内容与A的值进行带进位加法,结果送A,机器码$9ED90120如(SP)=$0200,(A)=$35,进位位C=1,($0120+$0200)=$35,指令执行后(A)=$6B堆栈寻址堆栈寻址堆栈指针是16位寄存器,堆栈寻址就是将堆栈指堆栈寻址_8位偏移量堆栈变址寻址8位偏移量堆栈变址寻址(SP1)操作数的有效地址是16位堆栈指针(SP)中的无符号整数与操作码后的一个字节无符号整数之和,也可以访问64k空间。8位偏移量堆栈变址寻址指令为三字节指令LDA$10,SP ;将SP中的值加上偏移量$10所得地址的存储单元的内容送A,机器码为$9EE610$7FLDA$10,SPA偏移量为&10SP内容不变0200SP$0200$0201…$020F$0210…$7F堆栈寻址_8位偏移量堆栈变址寻址8位偏移量堆栈变址寻址(SP堆栈寻址_16位偏移量堆栈变址寻址16位偏移量堆栈变址寻址(SP2)操作数的有效地址是16位堆栈指针(SP)中的无符号整数与操作码后的一个字节无符号整数之和,也可以访问64k空间。16位偏移量变址寻址指令为三字节指令LDA$100,SP ;将SP中的值加上偏移量$100所得地址的存储单元的内容送A,机器码为$9EE610$7FLDA$100,SP偏移量为&100SP内容不变0100ASP$0100$0101…$01FF$0200…$7F堆栈寻址_16位偏移量堆栈变址寻址16位偏移量堆栈变址寻址(存储器-存储器寻址这类指令将将一个存储单元的内容传送到另一个存储单元,其中至少有一个地址是在0页存储器-存储器寻址有4种:立即寻址到直接寻址(IMD)直接寻址到直接寻址(DD)自动变址寻址到直接寻址(IX+D)直接寻址到自动变址寻址(DIX+)存储器-存储器寻址这类指令将将一个存储单元的内容传送到另一个立即寻址到直接寻址(IMD)和直接寻址到直接寻址(DD)立即寻址到直接寻址方式(IMD):三字节指令,第一个字节为操作码,第二字节为立即数,第三字节为8位地址MOV#$FF,$00 ;立即数$FF送$00单元源目的直接寻址到直接寻址方式(DD):三字节指令,第一个字节为操作码,源操作数和目的操作数都是直接地址MOV$60,$00 ;$60单元内容送$00单元源目的这类指令通常用于初始化寄存器和变量,如MOV#$FF,PTA由于直接地址是8位,这两种寻址方式只能实现0页内的传送立即寻址到直接寻址(IMD)和直接寻址到直接寻址(DD)立即自动变址寻址到直接寻址(IX+D)双字节指令,第一字节是操作码,第二字节为目的地址,源操作数是16位变址寄存器H:X,将H:X所指向单元内容送目的存储器地址单元,然后H:X中的值自动加1,指向下一单元HX0100$7F$0041$0042…$0100$0101…$0040$01020141$7FLDHX#$0100MOVX+,$40$66LDA#$7FSTA$0100LDA#$66STA$0101LDHX#$0100MOVX+,$40MOVX+,$41立即寻址扩展寻址立即寻址扩展寻址扩展寻址自动变址到直接寻址可实现64k内任一地址到0页内的直接传送自动变址寻址到直接寻址(IX+D)双字节指令,第一字节是操作直接寻址到自动变址寻址(DIX+)双字节指令,第一字节是操作码,第二字节为源操作数8位地址,目的操作数是16位变址寄存器H:X,将将源操作数地址存储单元内容送到H:X所指向单元,然后H:X中的值自动加1,指向下一单元HX0240$7F$0041$0042…$0240$0241…$0040$02420241$7FLDHX#$0240MOV$40,X+MOV#$7F,$40MOV#$66,$41LDHX#$0240MOV$40,X+MOV$41,X+立即寻址到直接寻址扩展寻址直接寻址到自动变址可实现0页向64k内任一地址的直接传送$66直接寻址到自动变址寻址(DIX+)双字节指令,第一字节是操作程序执行过程LDHX#$40MOV#$44,$40LDA#$55ADD,XSTA$100BRA$4500406E4440A655FBC901008000800180028003800480058006800780088009800A800B8000PC458001008002408003PC+18006PC+18008PC+18009PC+1程序执行过程LDHX#$404500406E4440A65相对寻址(REL)相对寻址用于转移指令。计算机运行时程序计数器PC总指向下一条待执行指令的地址在相对寻址方式中,CPU首先测试给定的条件,如果满足条件,则发生相对转移将当前程序计数器PC的值加上指令码所占字节数,再加上指令操作码后的8位有符号数,使程序转移到PC指定的新地址处,否则执行该指令的下一条指令。相对寻址方式的指令为双字节指令,一个为操作码,另一个是相对偏移量,转移范围为相对于存放机器码地址的-126~+129用户在编汇编语言程序时,不必自己计算相对偏移量,只要写出待跳转的地址标号代替偏移量,汇编程序会在汇编时自动计算偏移量,并检查是否超过有效转移范围相对寻址(REL)相对寻址用于转移指令。相对寻址例main:CLC ;设置进位标志位C为0BCCP1;如C为0,转P1LDA#$FF ;(A)←$FFBRAP2 ;无条件转P2P1:LDA#$00 ;(A)←$00P2:BRA$ ;原地踏步98CLC2404BCC*+68003A6FFLDA#0xFF80052002BRA*+48007A600LDA#0x0020FEBRA*+0800B000000BRSET地址代码指令相对寻址例main:98CLC地相对寻址说明98CLC2404BCC*+68003A6FFLDA#0xFF80052002BRA*+48007A600LDA#0x0020FEBRA*+0800B000000BRSET地址代码指令80012404BCC*+624为操作码,04为偏移量PC总指向下一条待执行指令,因此当执行本条转移指令BCCP1时,PC正指向8003,即(PC)=8003,如转移条件满足,8003加上偏移量04,PC的新值为8007,即PC指向8007,正是符号地址P1-待跳转的地址至于BCC*+6,则是BCCP1编译后的源码书写格式,“*”或“$”表示当前指令位置,不要与机器码2404混淆P1:P2:800920FEBRA*+0BRA为无条件转移指令,20为操作码,偏移量$FE是-2的补码,执行本条指令时PC已指向800B,800B-2=8009,PC又指向8009,实现原地跳转,不继续往下执行或者说*+0表示当前指令位置不变PC相对寻址说明98CLC地址相对寻址执行过程982404A6FF2002A60020FE000000800080018003800580078009800BCLCBCCP1LDA#$FFBRAP2LDA#$00BRA$BRSETCLC BCCP1 ;2404LDA#$FFBRAP2 P1:LDA#$00 P2:BRA$ 8000PC8001C=0800380078003+04=8007相对寻址执行过程982404A6FF2002A60020FE无偏移量变址后加1寻址在MHC08指令系统中,只有一条指令采用这种寻址方式,这是一条相对转移指令:CBEQX+,rel如H:X所指向的存储单元中的值和累加器A的值相等则转移,否则顺序执行下一条指令。但无论转移或不转移H:X的值都自动加1同样,编程时无需计算偏移量,写成程序标号即可((H:X))=(A)?noH:X←(H:X)+1H:X←(H:X)+1顺序执行跳转执行yes如H:X=$0200$0200的内容是$67则将$67与A的内容比较决定程序执行方向$0200$670200$67A=?H:X$0201无偏移量变址后加1寻址在MHC08指令系统中,只有一条指令采8位偏移量变址后加1寻址在MHC08指令系统中,只有一条指令采用这种寻址方式,这是一条相对转移指令:CBEQopr,X+,rel先将8位偏移量opr与H:X所指向的存储单元中的值相加,所得和为地址的存储单元中的值和累加器A的值相等则转移,否则顺序执行下一条指令。但无论转移或不转移H:X的值都自动加1同样,编程时无需计算偏移量,写成程序标号即可$0200((H:X)+opr)=(A)?noH:X←(H:X)+1H:X←(H:X)+1顺序跳转执行yes如H:X=$0200,偏移量opr=$10,$0210的内容是$67,则将$67与A的内容比较决定程序执行方向$670210$67A=?0200H:X$02018位偏移量变址后加1寻址在MHC08指令系统中,只有一条指令寻址方式小结隐含寻址(INH)立即寻址(IMM)直接寻址(DIR)扩展寻址(EXT)变址寻址变址寄存器变址堆栈指针变址无偏移量变址寻址(IX)8位偏移量变址寻址(IX1)16位偏移量变址寻址(IX2)8位偏移量堆栈寻址(SP1)16位偏移量堆栈寻址(SP2)存储器到存储器寻址立即寻址到直接寻址(IMD)直接寻址到直接寻址(DD)自动变址寻址到直接寻址(IX+D)直接寻址到自动变址寻址(DIX+)转移用到的寻址方式相对寻址(REL)无偏移量后加1寻址(IX+)8位偏移量后加1寻址(IX1+)寻址方式小结隐含寻址(INH)变址寻址变址寄存器变址堆栈指针寻址方式例寻址方式例指令表SourceFormOperationDescriptionEffectonCCRAddressModeOpcodeOperandCyclesVHINZCLDA#oprLoadAfromMA←(M)0---IMMA6ii2LDAoprDIRB6dd3LDAoprEXTC6hhll4ANDoprLogicANDA←(A)&(M)0---EXTC4hhll4ANDopr,xIX2E4eeff4ANDopr,xIX1F4ff3BEQrelBranchifEqualPC←(PC)+2+rel?(z)=1------REl27rr3LDHXoprLoadH:XfromMH:X←(M:M+1)0---DIR55dd4LDHX#oprIMM45iijj↓↑↓↑↓↑↓↑A累加器CCR条件寄存器dd直接寻址方式操作数hhll扩展寻址方式操作数的高位和低位eeff16位偏移量变址寻址的高位和低位↓↑↓↑M存储器位置opr操作数PC程序计数器relPC相对转移字节指令表SourceOperationDescriptionE数据传送指令LDA#$80 ;十六进制立即数$80A,#表示立即数IMM→STA$10,X ;(A)((H:X)+$10)将A的数据送到以H:X中的数加上偏移量$10,形 ;成的地址单元。如H:X=$0210,A=$55,运行后($0220)=$55IX1→LDA$80 ;($80)A将$80单元内容送A,$80表示内存单元地址, ;($80)表示内存单元的内容DIR→LDHX#$023F ;16位传送指令,立即数$02H,$3FX,IMM→→HX→LDHX$40 ;16位传送指令,($40)H,($41)XDIR→→STHX$40 ;16位传送指令,(H)($40),(X)($41)DIR→16位传送LDHX#$023FLDHX$40$40$41AABBHXAABB023FSTHX$40HXAABB$40$41AABB数据传送指令LDA#$80 ;十六进制立即数$80数据传送指令_寄存器间传送→TXS ;(H:X)-1SPH:SPLH:X中的值减1后送SP,如H:X=$023F,则 ;SP=$023E,TXS通常用来设置堆栈指针→TSX ;(SPH:SPL)+1H:XSP中的值加1后送H:X,如(SP)=$023E,则 ;H:X=$023F。→例:设置栈顶LDHX#$023FTXS数据传送指令_寄存器间传送→TXS ;(H:X)-1数据传送指令_堆栈$0100$00FF$00FE$00FD$00FCSPAA$0100$00FFBB$00FE$0100$00FF$00FE$00FD$00FCSP$00FEBBAA$00FF$0100PUSHHPUSHXAAHXBBSP总是指向栈顶堆栈操作永远是对栈顶操作进栈:先进栈,SP-1出栈:先SP+1,数据出栈HXPULXPULH指令顺序:先进后出方不会错乱数据传送指令_堆栈$0100$00FF$00FE$00FD$存储器间传送指令
LDHX#$0100MOV#$AA,$40MOV$40,X+存储器间传送指令LDHX#$0100算术类指令溢出11半进位中断屏蔽负标志0标志进位位0110100011001加法指令ADD:不带进位加ADDC:带进位加LDA#$88ADD#$88大多数算术指令中的一个操作数隐含是累加器,运算结果也保存在AA:10001000+10001000000100001ACCRC:上电复位状态VHINZC00100算术类指令溢出11半进位中断屏蔽负标志0标志进位位01101加法指令
LDA#$FFADC#$01运行后:V=0H=1N=0Z=1C=1A:11111111
00000001+00000001/01AC:C=1/0LDA#$FFINCA运行后:A=0V=0N=0Z=1但C和H不变这是ADD#$1和INC指令不同之处加法指令LDA#$FF运行后:A:11取反指令和比较指令取反指令:LDA#-$1;注意CodeWarrior
;负数书写格式COMA;$FF-($FF)=0→AMOV#$AA,$80COM$80;$55→$80比较指令:比较指令将两个操作数(其中一个是(A、X或(H:X))作了一次减法,但仅影响标志位,两个操作数都不变MOV#$AA,$80LDA#$AACMP$80;$AA-$AA=0,所以Z=1,说明相等16位比较:MOV#$12,$80MOV#$34,$81LDHX#$1200CPHX$80;(H:X)=$1200,($80)=$12,($81)=$34
;$1200-$1234<0,N=1,C=1,Z=0说明 ;两数不等,且(H:X)<($80)($81)取反指令和比较指令取反指令:比较指令:MOV#$AA,$8算术指令SourceFormOperationDescriptionEffectonCCRAddressModeOpcodeOperandCyclesVHINZCINCoprincreamentM←(M)+1---DIR3Cdd4ADCoprAddwithcarryA←(A)+(M)+(C)-DIRB9dd3SUBoprAddwithoutcarryA←(A)-(M)-DIRB9dd3CMPoprCompareAwithM(A)-(M)-DIRB1dd3TST,XTestforNegativeorZero(X)-$000---INH5D1AIS#oprAddImmediateValue(single)toSPSP←(SP)+(16<<M)------IMMA7Ii2↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑↓↑算术指令SourceOperationDescription符号位的扩展_AIS,AIX计算机中符号数以补码形式表示最高位位符号位:+1(00000001)2(01)16-1(11111111)2(FF)168位符号数([-128,+127])扩展为16位,就是将符号位扩展到高8位中+1(00000000000000001)2-1(11111111111111111)2LDHX#$02TXS ;(SP)=(01)16=(0000000000000001)2
AIS#$80;1111111110000000
1111111110000001+SPSP设置只能由H:X传送立即数只能是8位符号数AIX#opr8H:X←(H:X)+(16<<M);-128<=#opr8<=127符号位的扩展_AIS,AIX计算机中符号数以补码形式表示最高逻辑运算指令逻辑运算类指令都是对累加器A和另一操作数按位进行,结果返回AVHNZC0-↕↕-
LDA#$AA;10101010AND#$A5;^10100101A10100000要将某位取反,可对该位用1去异或,而其余各位用0异或LDA#$00;00000000EOR#$40;⊕01000000A01000000逻辑运算指令逻辑运算类指令都是对累加器A和另一操作数按位进行位操作指令位测试指令BIT:计算机进行BIT指令时实际是对累加器A和操作数进行了一次AND运算,与AND的区别是“与”运算结果不存入累加器A,因此两个操作数都不变,仅改变标志位。清位:BCLRn,addr8MOV#$FF,$80;($80)=11111111BCLR0,$80;($80)=11111110由于是直接寻址addr8,因此只能0页寻址,对存储器前256个单元操作,其位操作空间位256×8=2048。指令中n=0~7,不影响任何标志位置位:BSETn,addr8清/置标志位C:CLC C←0SEC C←1清/置位中断屏蔽位:CLII←0开中断SEII←1关中断第0位位操作指令位测试指令BIT:清位:由于是直接寻址addr8,算术移位指令算术左移ASL和逻辑左移LSL,相当操作数×21000000
0CAASLA0算术右移ASR,相当操作数÷2,右移时符号位复制以保持数值符号不变1011111
0CAASRA1(01000000)2=64,64×2=128=(10000000)2(10111110)2=-66,-66/2=-33=(11011111)2算术移位指令算术左移ASL和逻辑左移LSL,相当操作数×21循环左移指令循环左移ROL,进位位C与操作数作为整体循环移位1000000
0CAROLAASLA10000000
10
C00000001ROLA循环左移指令循环左移ROL,进位位C与操作数作为整体循环移位跳转指令跳转指令无条件转移指令条件转移指令相对转移指令绝对转移指令测试状态标志条件转移指令测试外中断(IRQ)条件转移指令位测试转移指令减1不为0转移指令比较相等转移指令调用子程序指令相对调用指令绝对调用指令返回指令从子程序返回指令从中断返回指令除位测试转移指令外,所有转移指令不影响标志位跳转指令跳转指令无条件转移指令条件转移指令相对转移指令测试状位测试转移指令位测试转移指令将测试位送标志位C,然后判断转移。M:存储器位置,rel相对转移数SourceFormOperationDescriptionEffectonCCRAddressModeOpcodeOperandCyclesVHINZCBRSETn,opr,relBranchifBitninMsetPC←(PC)+3+rel?(Mn)=1-----↕DIR(b0)DIR(b1)DIR(b3)DIR(b4)DIR(b5)DIR(b6)DIR(b7)DIR(b8)00020406080A0C0Eddrrddrrddrrddrrddrrddrrddrrddrr55555555BSETn,oprSETBitninMMn←1----
--DIR(b0)l10dd4位测试转移指令位测试转移指令将测试位送标志位C,然后判断转移位测试例1
MOV#%01000000,$40 BRCLR6,$40,P1 LDA#$FF BRAP2 P1: LDA#$00 P2: BRA$$40单元位6=0?ynP1:A←$FFP2:A←$00位测试例1 MOV#%01000000,$40$40单元相对转移和绝对转移2004A6FF2002A60020FE0000000080008002800480068008800A800DBRAP1LDA#$FFBRAP2LDA#$00BRA$BRSETBRAP1 ;2404LDA#$FFBRAP2 P1:LDA#$00 P2:BRA$ 8000PC80028006BRArel:(PC)+rel→PC绝对转移指令JMP:PC←跳转地址相对转移和绝对转移2004A6FF2002A60020FE0相对和绝对转移指令
JMPP2 ORG$8110P2:LDA#$AA8000CC8110JMP0x8110...8110A6AALDA#0xAA
BRAP2 ORG$8110P2:LDA#$AA8000200EBRA*+16;abs=8010...8110A6AALDA#0xAA比较ORG$8080、$8081、$8082等情况相对和绝对转移指令 JMPP28000CC8110减1不为0转移指令DBNZArel:A←(A)-1PC←(PC)+3+rel,?(result)≠0
LDX#$0 LDA#$3P1:INCX DBNZAP1延时程序:LDA#$3DBNZA$思考:A=?可得到最大延时CLRA
MOV#$2,$40P: LDA#$3P1:NOP DBNZAP1 DBNZ$40,P思考:NOP执行了几次?X=0X=X+1A=A-1whileA≠0A=0减1不为0转移指令DBNZArel:A←(A)-1P转子程序和返回指令SourceFormOperationDescriptionEffectonCCRAddressModeOpcodeOperandCyclesVHINZCBSRrelBranchtoSubroutinePC←(PC)+2;push(PCL)SP←(SP)-1;push(PCH)SP←(SP)-1PC←(PC)+rel-
-
-
-
-
-RELADrr4RTSReturnfromSubroutineSP←(SP)+1;pull(PCH)SP←(SP)+1;pull(PCH)-
-
-
-
-
-INH814转子程序和返回指令SourceOperationDescri相对和绝对转移调用子程序指令
JSRP2 ORG$8110P2:LDA#$AARTSCD8110JSR0x8110800320FEBRA*+0;abs=8003...A6AALDA#0xAA811281RTS
BSRP2 ORG$8110P2:LDA#$AARTSAD0EBSR*+16;abs=8010800220FEBRA*+0;abs=8003...A6AALDA#0xAA811281RTS比较ORG$8080、$8081、$8082等情况相对和绝对转移调用子程序指令 JSRP2CD8110转子程序和返回过程
MAIN:800045023F LDHX#$023F800394TXS8004AD02BSRSUB_P800620FE BRA$SUB_P:80089DNOP800981RTSuuuuuuuuuuSP023E堆栈将返回地址8006弹出到PC,程序从中断处8006继续执行8006进堆栈保护,SP-2子程序首地址8008进PC,开始执行子程序程序023D023E023F023C023B栈区023Cuu0680转子程序和返回过程MAIN:SUB_P:uuuuuuuuu十进制调整和半字节交换指令BCD数78+35=113LDA#$78ADD#$35;(A)=$ADDAA;(C)=1,(A)=13减法不能用DAALDA#$74NSA ;(A)=47MOV#$74,$80LDA$80AND#$0FSTA$82LDA$80NSAAND#$0FSTA$81BRA$011101000000111100000100^010001110000111100000111^740704808182NSA经常用于BCD码的处理例:将压缩BCD转换成非压缩BCD码7404744707NSA十进制调整和半字节交换指令BCD数78+35=113LDA06January2023程序设计基础26December2022程序设计基础汇编语言程序格式机器语言:用二进制编码和储存的机器指令(机器码)汇编语言:用助记苻表示指令的功能和特征代替机器指令。由于机器只能识别机器码,汇编语言源程序只有经汇编后生成机器语言的目标程序才能运行汇编语言源程序格式:标号:操作码操作数注释
LOOP:LDA0,X;X变址寻址置送累加器A标号标号有两种形式:
(1) 标号的第一个字符是“*”时,表示该行是注释行,汇编程序忽略注释 行。
(2) 可执行语句标号的第一个字符必须是英文字母,后面可接英文字母 数字、美元苻$和下划线_。标号区分大小写。标号在此起符号地址 的作用,表示转移语句的转向地址或程序的起始地址或数据地址。标号后的“:”不是必须的汇编语言程序格式机器语言:用二进制编码和储存的机器指令(机器汇编语言源程序格式操作码操作码分两类指令码伪指令码,由汇编程序用于控制汇编操作,不是执行指令操作数操作数部分指明了指令的寻址方式和操作数,操作数可由符号、表达式组成,各部分由“,”分割操作数格式M68HC08寻址方式例无操作数累加器和隐含DAA,INCX,ASRX<表达式>直接、扩展或相对LDA$40,STX$100,BRA$#<表达式>立即数LDHX#$023F<表达式>,X变址LDA$10,X<表达式>,<表达式>位置位或清零BCLER4,$40<表达式>,<表达式>,<表达式>位测试和转移BRSET4,$40,P汇编语言源程序格式操作码操作数操作数格式M68HC08寻址方汇编语言中的表达式表达式由符号、常数、运算符和括号组成。表达式的运算结果为操作数。表达式可由运算符+、-、*、/、%、&、|、^等连接苻号和常数或字符“*”(表示当前PC的值,也可用“$”)符号功能符号功能+加%取余-减&逻辑与*乘|逻辑或/除^异或MC68HC08允许使用的运算符及其功能STA$80+$10;编译后STA0x90STA$90%$90;编译后STA0x00STA$80^$01;编译后STA0x81
LDATAB+1,X BRA*TAB:FCB$AA,$BB汇编语言中的表达式表达式由符号、常数、运算符和括号组成。表达伪操作指令汇编语言有一类不与任何处理器指令对应的伪指令,它们为汇编程序将符号指令编译成机器码提供信息:地址、数据、定位和分段等,伪指令不生成代码。赋值伪指令:标号:EQU<表达式>注释如:coefficientEQU5;系数为5DDRAEQU$0004;A口方向寄存器地址 将常用的地址或数值用EQU定义为一个符号有 助于阅读和修改定位伪指令:
ORG <表达式>注释如:ORG$8100源程序或数据编译后存放在$8100开始的存储 空间 结束伪指令:
END表示本汇编程序到此结束伪操作指令汇编语言有一类不与任何处理器指令对应的伪指令,它们常数定义伪指令 ORG$80Table: FCB‘ABC’,$AA,$BBTable1: FDB$023F,$AA ORG$8030Table_C:FCC'AB'main:Entry: LDATable2MOVTable+4,$90 ORG$8010Table2: FCB$E1,$50,$01 ENDDB
或FCB:定义字节和字符串DW或FDB:定义字。DC或FCC:定义字符串,如用FCC, 一句只能定义一个字符串程序汇编后:414243AABB85023F00AA41428010E15001程序运行后:A=E1,($90)=BB思考:可否LDHXTable1常数定义伪指令 ORG$80DB或FCB:定义存储区域保留伪指令DS或RMB:(<标号>)RMB<表达式>;也可用DS从标号位置起保留一块存储区,其字节长度等于表达式的值。汇编后将存储区初始化为0可用RMB.B和RMS.W分别表示后面保留的存储区以字节或字(双字节)作单位DS.B3保留3字节DS.W3保留6字节
ORG$80Sum1:RMB3Sum2:RMB1Table:FCB$AA,$BBmain:Entry: MOV#$2,Sum1 MOV#$3,Sum2 BRA$END汇编后
008000000000AABB运行后008002000003AABB存储区域保留伪指令DS或RMB:汇编语言程序设计汇编语言程序设计简单程序_单字节16进制数转换为BCD码254/100=2……5454/10=5……4HA00254100X542B1DS.B1B2DS.B1B3DS.B1LDA#254CLRHLDX#100DIV;分离百位STAB1LDX#10 ;余数分离十位和个位
PSHHPULACLRHDIVSTAB2PSHHPULASTAB3BRA*2B10054用堆栈传送数据005410455B24B3;用堆栈实现A←H;用堆栈实现H内容;送存储器简单程序_单字节16进制数转换为BCD码254/100=2…简单程序_单字节BCD整数转换成单字节十六进制整数LDA#%10011000;(98)BCDCLRHLDX#16DIV ;分离十位和个位PSHH ;个位进栈LDX#10MUL;将十位转换为十六进制ADD1,SP;加个位BRA*BCD数98在计算机中存放形式为10011000即$98对98=9*10+8;对$98=9*16+8算法为:$98/16=9……8实际数值为9*10+8HA00$9816X89910×+8uuuu8FESP十进制和16进制权不同简单程序_单字节BCD整数转换成单字节十六进制整数LDA简单程序_将压缩BCD码拆开转换为ASCII码
ORG$80Data_BCDDS.b1Data_ASCIIDS.b2
LDHX#$0010LDAData_BCDDIVORA#$30STAData_ASCIIPSHHPULAORA#$30STAData_ASCII+1BRA*采用除$10方法(相当于右移4位)将BCD数拆开010010010000100100000100BCDHBCDL000000000000BCDH0000BCDL00010000HAAHX*用半字节屏蔽方法编程,比较程序字节数、执行周期数简单程序_将压缩BCD码拆开转换为ASCII码简单程序_双字节求补
ORG$80DATAHFCB$00DATAL:FCB$01main:Entry: BSRDNEGBRA*DNEG:
NEG DATAL ;00-DATAL CLRA
SBC DATAH STA DATAH RTS
算法1:0-DATA→DATA算法2:取反加1main:Entry: BSRDNEGBRA*DNEG: COMDATAH;取反高位 LDADATALCOMA;取反低位
ADD#$1 ;双字节加1STADATALCLRA
ADCDATAHSTA DATAHRTS0000DHDLDHDL+01简单程序_双字节求补 ORG$80算法1:0分支程序_简单分支程序
ORG$0080Data1:FCB$12Data2:FCB$34codesectionMyCode:SECTIONmain:Entry:LDAData1CMPData2BHICMP_EndMOVData2,Data1STAData2CMP_End:BRA*比较两个无符号数,按先大后小排列Flag:DS.b1Flag_MarkEQU7main:MOV#$00,DDRAMOV#$FF,PTAPUEMOV#$00,FlagBRCLR7,PTA,ExBSETFlag_Mark,FlagBRAP_EndEx:BCLRFlag_mark,FlagP_End:BRA*根据PTA口状态设置标志位分支程序_简单分支程序 ORG$0080比较两个无分支程序_多重分支
ORG$0080XX:FCB$03Y:DS.B1main:LDAXXCMP#$5BHSBE5DECXX
BRAP_EndBE5:CMP#10BHIB10CLRXX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆艺术工程职业学院《科技信息检索》2023-2024学年第一学期期末试卷
- 自然辩证法概论(视频课)知到课后答案智慧树章节测试答案2025年春安徽农业大学
- 山西林业职业技术学院《材料分析测试技术》2023-2024学年第二学期期末试卷
- 达州中医药职业学院《体育场地与设施》2023-2024学年第一学期期末试卷
- 河北石油职业技术学院《生物信息学实践》2023-2024学年第二学期期末试卷
- 长春汽车工业高等专科学校《第三方物流管理》2023-2024学年第一学期期末试卷
- 晋中职业技术学院《学科前沿讲座》2023-2024学年第一学期期末试卷
- 2025届海南省鲁迅中学高三下学期一模考试英语试题含解析
- 江苏室内绿化施工方案
- 古人重视品德的名言
- 《产业转型与创新》课件
- “艾梅乙”感染者消除医疗歧视制度-
- 2025-2030年中国测序仪市场运行态势及发展规划分析报告
- 《物理前沿科学》课件
- 餐厅市场调研与定位
- 2025电动自行车安全技术规范培训课件
- 网络直播承诺书范本范本
- DB21-T 3943-2024 消防控制室管理
- 规划课题申报范例:高校毕业生高质量就业服务体系建设研究(附可修改技术路线图)
- 2025北京语言大学新编长聘人员招聘21人笔试备考试题及答案解析
- 银屑病小讲课
评论
0/150
提交评论