寻址方式与汇编语言.ppt

上传人:ni****g 文档编号:571417970 上传时间:2024-08-10 格式:PPT 页数:45 大小:834KB
返回 下载 相关 举报
寻址方式与汇编语言.ppt_第1页
第1页 / 共45页
寻址方式与汇编语言.ppt_第2页
第2页 / 共45页
寻址方式与汇编语言.ppt_第3页
第3页 / 共45页
寻址方式与汇编语言.ppt_第4页
第4页 / 共45页
寻址方式与汇编语言.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《寻址方式与汇编语言.ppt》由会员分享,可在线阅读,更多相关《寻址方式与汇编语言.ppt(45页珍藏版)》请在金锄头文库上搜索。

1、寻址方式与汇编语言寻址方式与汇编语言20102010年年7 7月月控制科学与工程学院控制科学与工程学院 汇编语言的指令格式汇编语言的指令格式 汇编语言汇编语言 寻址方式寻址方式 1. 机器语言用机器能够直接识别的二进制指令代码(即机器码或可执行的目标代码)编写的程序称为机器语言。 执行速度快不易记忆,十分繁琐。特点:特点:特点:特点:单片机语言单片机语言功能:将累加器功能:将累加器A A赋值赋值1 1机器码:机器码:86 0186 018686:告诉单片机要实现什么功能:告诉单片机要实现什么功能0101:就是数:就是数1 12. 汇编语言用机器指令系统的助记符(能反映指令特征和操作性质的英文单

2、词或英文缩写),用符号代替操作数来编写的程序称为汇编语言程序。 汇编语言实际上也是机器语言 用汇编语言编写的程序不仅执行速度快,又可以有效地利用机器本身的专有特性,从而提高机器的工作效率。 用汇编语言编写的程序由于面向机器,在一种机型上不能运行另一种机型的汇编程序,通用性差 。特点:特点:特点:特点:功能:将累加器功能:将累加器A A赋值赋值1 1汇编语言:汇编语言: LDAA #$1LDDALDDA:LOAD Accumulator ALOAD Accumulator A#$1#$1:就是数:就是数1 1汇编语言指令格式汇编语言指令格式汇编语言对格式有严格的要求。典型的汇编语言有4部分组成:

3、 label: MOVB #$66 , X ;注释 标号 操作码 源操作数 目的操作数 注释操作码是指令功能的英文缩写,表示指令的功能,由助记符组成。操作数表示指令操作的对象,不同的指令操作的对象形式不同。注释说是为了方便阅读加的中文或者英文注释。可有可无。汇编语言是与硬件有关的语言,都是针对某一种类型的CPU。不同公司的产品,其汇编语言中使用的助记符可能会略有差异,但是语法格式都是一样的。9S12单片机指令系统每条指令必须有操作码,操作数可以是0-3个9S12内核的指令系统一共有601条指令。汇编语言与机器语言指令是一一对应的。汇编常量的表示汇编常量的表示十进制: 100,255十六进制:$

4、55、$1234八进制:77,1000二进制:%01010101字符串: jkl”990、”ADDX008”寻址方式寻址方式寻址:操作数指定了参与运算的数或者数所在的地址。在单片机的存储空间中,寻找指令规定的操作数的地址。 9S12内核有8种寻址方式。隐含寻址立即数寻址直接寻址扩展寻址相对寻址变址寻址累加器变址寻址带自动加、减的5位偏移量变址寻址1. 隐含寻址隐含寻址定义:只有操作码,没有操作数或操作数为寄存器,不显示操作数。如:NOP、PSHA、PSHB、PSHX、PSHY,隐含操作数分别为无、A、B、X、Y。一般是单字节指令隐含寻址举例隐含寻址举例;PC=C003,A=CB,SP=500N

5、OP;PC=C004,A=CB,SP=500PSHA;A=CB,SP=4FF,4FF=CBNOP是单字节指令,只让程序计数器PC加1PSHA首先移动SP指针,再压入数值在立即数寻址方式下,指令中的操作数(参与运算的数)就直接存放在机器代码中,紧跟在操作码之后。这条指令汇编成机器代码后,操作数作为指令的一部分存放在操作码之后的主存单元中。称这种操作数为立即数立即数寻址方式常用来给寄存器赋值。 注:立即数前加#2. 立即数寻址立即数寻址LDAA #$55;表示将十六进制立即数55加载到累加器A中LDX #1234;表示将十进制数1234加载到X中 LDY #%01010101;表示将二进制数001

6、00110加载到Y中 3. 直接寻址直接寻址操作数是单字节地址,范围是$00$FF,共256个单元,一般访问I/O寄存器。如: LDAA $55表示将$55内存单元的数据加载到累加器A。 执行前:55=0,A=CB 执行后:55=0,A=04. 扩展寻址扩展寻址操作数为16位地址,可访问64K空间。如:LDX $4000将$4000和$4001内存单元的数据加载到X。FREESCALE的MCU采用“低字节数放高位地址单元,高字节数放低位地址单元”。(1)若:$4000=$12,$4001=$34 执行LDX $4000指令后,XH=$12, XL=$34(2)又如: STAA$4000;执行结

7、果为A的内容存到$4000单元STAA:Store Accumulator A5. 相对寻址相对寻址相对转移指令。操作数为单字节如:LABEL1: BRA LABEL1 BRA:Branch always6. 变址寻址变址寻址操作数由基地址寄存器(X、Y、SP、PC)加偏移量构成。如:若X=$1000LDAA 0,X ;A=$1000LDAA 7,X;A=$1000+7LDAA-150, X;A=$1000-150LDAA 1000, X;A=$1000+1000 LDAA 1000,X ;将X+1000地址单元中的 值作为指针,指向的内存单元的值加载到累加器A中 7.累加器变址寻址累加器变址

8、寻址偏移量非立即数,存放在累加器A、B、D中。如:若X=$1000 LDAB A,X;B=X+A LDAA D,X;A=X+D8.带自动加减的带自动加减的5位偏移量间接寻址位偏移量间接寻址有“先加、先减、后加、后减”四种方式。基址寄存器可以是X,Y,SP。主要用于数据块复制。如:MOVW 2, X+, 4, +Y ;执行该指令,将X开始单元的两个单元内容(一个字)传送到Y+4开始的两个单元,传送完成后X内容加2。 MOVW: move a word of data from one memory location to another指令系统指令系统数据传输(加载寄存器、传送到内存、内存之间的

9、传输、寄存器间的传输、数据交换、加载有效地址、堆栈操作)指令数学运算(加减乘除、十进制调整、最值等)指令逻辑运算(移位、求补、取反等)指令比较测试指令条件转移、无条件转移、循环指令查表插值指令模糊运算指令系统控制指令(中断、调用、返回等)数据传输指令数据传输指令LOAD指令指从内存到寄存器数据传送LDAA、LDAB、LDD、LDS、LDX、LDY如:LDAA #$55 ;将 立即数$55加载到A LDX $2000 ;将$2000和$2001单元数据加载到XSTORE指令指从寄存器到内存数据传送STAA、STAB、STD、STS、STX、STY如:STAA $1000;将A的内容存到$1000

10、单元STY $2000;将Y的内容存到$2000和$2001单元MOVE指令指从内存到内存数据传送MOVB、MOVW如:MOVB $2000,X ;将$2000单元内容存到X内容指向单元 MOVW 2,X+,4,Y+;将X和X+1内容指向单元存到Y和Y+1指向单元数据传输指令TRANSFER传送指令指从寄存器到寄存器数据传送:TAB、TAP、TBA、TFR、TPA、TSX、TSY、TXS、TYS如:若累加器A中的数据为$55 执行TAB指令后,累加器B中的数据为$55。EXCHANGE交换指令指寄存器的数据与寄存器数据交换:EXG、XGDX、XGDY、SEX如:若A中数据为$55,B中数据为$

11、aa执行EXG A,B后,A中数据为$aa,B中数据为$55。LEA有效地址加载指令:LEAS、LEAX、LEAY如:LDY #$2000 LEAS 4,Y+ 执行后SP的值为$2000,Y的值为$2004。数据传输指令堆栈操作指令:单字节压栈出栈PSHA、PSHB、PSHC PULA、PULB、PULC 如PSHA指SP减一,A数据传送到SP指向单元 PULA指SP指向单元数据传送到A,SP加一双字节压栈出栈PSHD、PSHX、PSHYPULD、PULX、PULY如PSHD指SP减二,D数据高位(A)传送到SP指向单元,低位(B)传送到SP+1指向单元。 PULD指SP指向单元数据传送到D高

12、位(A),SP+1指向单元数据传送到低位(B), SP加二。 数据传输指令举例;+加载/存储+LDAA #$55;A累加器加载$55STAA $480;把A的内容存到内存$480LDAB $480;$480内容加载到BINCB;B内容自加1STD $485;D内容送$485;+传送交换指令+LDAB #$AA;立即数$AA送BTAB;A送BLDAB #$AA;立即数$AA送BEXG A,B;A B交换;+MOVE指令+MOVW #$1234,$490;立即数$1234传送到$490和$491单元数学运算指令加法指令ADD:8位加法指令ABA、 ADDA、 ADDB、 ADCA、ADCB16位加

13、法指令ABX、ABY、 ADDD减法指令SUB:8位减法指令SBA、SUBA、SUBB、SBCA、SBCB16位减法指令SUBD十进制调整指令:DAA (只能用在结果在A中的加法指令)加一指令:INC、INCA、INCB、INS、INX、INY减一指令:DEC、DECA、DECB、DES、DEX、DEY数学运算指令乘法指令MUL:无符号16位数乘法EMUL(D)(Y)送Y:D有符号16位数乘法EMULS (D)(Y)送Y:D无符号8位数乘法MUL(A)(B)送A:B除法指令DIV:无符号32位数除以16位数EDIV有符号32位数除以16位数EDIVS无符号16位数除以16位数的小数除法FDIV

14、无符号16位数除以16位数IDIV有符号16位数除以16位数IDIVS乘加指令EMACS数学运算指令最大、最小值指令MAXA、 MINA :A中数据与内存单元字节型数据比较,较大的传送到AMAXM、 MINM:A中数据与内存单元字节型数据比较,较大的传送到内存单元EMAXD、 EMIND :D中数据与内存单元中两个相临字节型数据组成的字数据比较,大者送DEMAXM 、EMINM:D中数据与内存单元中两个相临字节型数据组成的字数据比较,大者送内存单元数学运算综合举例在$2000单元开始存放字节型数据$10,$30,$04,$A0,在$2010单元开始存放字节型数据$11,$1A,$09,$1F,

15、分别使用加、减、乘、除四中运算处理对应位置的数据。并把结果存到$2020开始的内存单元中。例子程序见word文档实际程序见:2-shuxue-example逻辑运算指令与指令:ANDA、ANDB、ANDCC如LDY #$1000 ANDA YA与$1000单元数据与运算,结果保存到A异或指令:EORA、EORB或指令:ORAA、ORAB、ORCC清零指令:CLC、CLI、CLV、CLR、CLRA、CLRB把进位、中断屏蔽、溢出标志、内存单元,A,B清零取反指令:COM、COMA、COMB对内存单元、A、B进行取反运算并存储求补指令:NEG、NEGA、NEGB对内存单元、A、B进行求补运算并存储

16、逻辑运算指令位测试指令:BITA、BITB将A或B与内存单元内容作与操作,改变标志位位操作指令:BCLR、BSETBCLR:将立即数取反与内存单元M内容与操作,将结果送内存单元BSET:将立即数与内存单元M内容或操作,将结果送内存单元逻辑左移指令:LSL、LSLA、LSLB、LSLD将内存字节、A、B、D内容带C左移逻辑右移指令:LSR、LSRA、LSRB、LSRD将内存字节、A、B、D内容带C右移逻辑运算指令算术左移指令:ASL、ASLA、ASLB、ASLD同逻辑左移算术右移指令:ASR、ASRA、ASRB将内存字节、A、B内容右移一位,最高位不变,最低位移动到C。循环左移指令:ROL、RO

17、LA、ROLB循环右移指令:ROR、RORA、RORB逻辑运算指令举例取数$55,使用逻辑运算指令使低4位清零,然后低4位置一;对结果取反操作;逻辑右移一位;与内存单元中$00作位测试;查看结果。逻辑运算指令举例S1: FCB $00;定义参加比较数据LDAA #$55;A=55ANDA #$F0 ;A=50ORAA #$0F ;A=5FNEGA;A=A1LSRA;A=50 C=1BITA S1;Z=1比较测试指令比较指令:CBA、CMPA、CMPB、CPD、CPS、CPX、CPY只做减法操作,不返回结果,影响标志位C(借位)、V(溢出),N(符号),Z(零)测试指令:TST、TSTA、TST

18、B测试内存单元、A或B是否为0,影响标志位N(符号),Z(零),V(总为0),C(总为0)。转移跳转循环指令短转移指令:无条件转移BRA、BRN有条件转移BCC、BCS、BEQ、BNE、BMI、BPL、BVC、BVS、BHI、BHS、BLO、BLS、BGT、BGE、BLT、BLE长转移指令:在短转移前加“L” 如:LBRA等。转移跳转循环指令循环控制指令:DBEQ、DBNEIBEQ、IBNETBEQ、TBNE跳转指令:JMP无条件跳转到标号处执行,范围为64K。DBEQ B,LABELLABEL: B减1,若为0LABEL : DBNE B,LABELB减1,若不为0比较测试转移跳转指令举例定

19、义程序标号,从该程序标号开始执行程序;做5次空循环延时;A,B都给$55,作CBA测试;若Z=1则跳转到程序末尾。比较测试转移跳转指令举例BRA J1;短转移到J1NOP;由于转移,此句不执行J1:LDAB #$05 ;B=05J2:NOP;延时的NOP指令DBNE B,J2;B-1,若B=0则继续,否则到J2LDAA #$55LDAB #$55;A=B=55CBA;做A-B操作,Z=1BEQ J3;若Z=1转J3NOP;此句不执行J3:NOP;转移到此执行查表插值指令查表插值指令查表插值指令:TBL ETBL例子请见课本115页系统指令子程序调用返回返回指令:短子程序调用BSR(-12812

20、7),子程序返回使用RTS长子程序调用JSR(64K范围),子程序返回使用RTS跨页子程序调用CALL(1M范围)、子程序返回使用RTC调用和返回同时把返回地址和PPAGE寄存器内容压栈和出栈中断指令:软件中断SWI,把返回地址和CPU寄存器依次全部压栈陷阱中断TRAP,把返回地址和CPU寄存器依次全部压栈中断返回RTI,把返回地址和CPU寄存器依次全部出栈系统指令其他指令:STOP 将PC、Y、X、D、CCR压栈,关闭时钟WAI将PC、Y、X、D、CCR压栈,关闭时钟,各自系统仍然运行,CPU等待中断BGND进入背景调试模式NOP空操作系统指令CPU12X在CPU12汇编指令集的基础上增加了不少新的指令。u(1)将原有的8位读改写指令扩展到16位u(2)增加了利用Gpage寄存器对连续8M寻址空间的读写指令u(3)增加了测试并置位指令处理信号量(semaphore)u(4)增加了MOVEB、MOVEW等,可实现从存储器到存储器的数据传送或将立即数直接写入存储器。谢谢!谢谢!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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