第3章汇编指令系统(3)
专题四 MCS-51指令系统-第三章 单片机的指令系统
8、指令字节数和机器周期数
第三章 单片机的指令系统
是必须掌握的内容。 Ø 一台计算机所有指令的集合, 称为该计算机的指令系统。 Ø 各种计算机都有专用的指令系统。
Ø 本章主要介绍单片机的寻址方式及指令系统,
学时分配:2学时 1—53+97+98+99 2学时 54—96 100
第三章 单片机的指令系统 • 3.1 MCS-51 指令系统概述
类
按指令字长分类
按指令执行时间分类
3.2 寻址方式
• 寻址方式:7种
– – – – – – – – – 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址间接寻址 相对寻址 位寻址 寻址方式与寻址空间 MCS-51单片机的两个突出特点
寄存器寻址——操作数存放在寄存器中
寄存器为 MOV A,R0 MOV R0,#01001111B R0~R7,A,DPTR,C SETB RS0 MOV R3,#56H
目的寻址为直接寻址
2) 20H ~2FH 可位寻址区的寻址方式
字节寻址方式: 直接寻址 direct
寄存器间接寻址@R0,@R1
位寻址: bit 直接寻址
例: MOV 26H,C ; 位寻址 (26H)1位
MOV 26H,A ;字节寻址(26H)8位
3) 30H ~7FH 数据缓冲区的寻址方式
字节寻址方式: 直接寻址 direct
MOV A,#23H
PUSH ACC
;
A寄存器寻址
POP
0E0H
;直接寻址
4、可做片内RAM的指针有:
R0,R1, 四个组共有8个 预先设置RS1、RS0,以选定组。 SETB RS0 CLR RS1; 1组
第三章 汇编语言程序设计
第3章 汇编语言程序设计 章
3.2 汇编语言源程序的格式
பைடு நூலகம்
名字: 名字:变量和标号
变量名 段名 过程名:指示性语句中的名字.内存单元的名 变量名/段名 过程名:指示性语句中的名字. 段名/过程名
定义. BUF DB ? 字,由DB/DW/DD定义. 由 定义 变量的三种属性: 变量的三种属性: 段值 SEG 偏移量 OFFSET 类型 BYTE/WORD/DWORD 标号:指令性语句中的名字.指令存放单元的符号地址. 标号:指令性语句中的名字.指令存放单元的符号地址. LOOPER: MOV AL,DATA[SI] 标号的三种属性: 标号的三种属性: 段值 SEG 偏移量 OFFSET 类型 NEAR/FAR 对于汇编程序来说,变量和标号都是存储单元的符号地址. 注:对于汇编程序来说,变量和标号都是存储单元的符号地址. 只是标号对应的存储单元中存放的是指令, 只是标号对应的存储单元中存放的是指令,而变量所对应的 存储单元存放的是数据. 存储单元存放的是数据.
令和数据. 令和数据. 汇编语言(Assenbly Lauguage):用助记符来编写 汇编语言( Lauguage): 指令,地址和数据也可用符号表示. 指令,地址和数据也可用符号表示.用汇编语言 编写的程序必须翻译成机器语言目标程序( 编写的程序必须翻译成机器语言目标程序(或目 标代码)才能执行,这种翻译过程称为汇编 汇编. 标代码)才能执行,这种翻译过程称为汇编. 高级语言:不针对某个具体的计算机,通用性强. :不针对某个具体的计算机,通用性强. 但高级语言编写的源程序同样必须"翻译" 但高级语言编写的源程序同样必须"翻译"成机 器语言,计算机才能执行, 器语言,计算机才能执行,所用的系统软件称为 编译程序或解释程序. 编译程序或解释程序.
在DSP应用中,虽然可以使用CC++高级语言编程,降低了
第3章汇编语言指令系统在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。
用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。
同时又要求编程者对指令系统有深刻的了解。
第3章汇编语言指令系统目录:3.1 C54x 汇编语言指令集介绍3.2 寻址方式3.3 C54x 系列DSP的指令系统参考:TMS320C54x DSP Reference Set Volume 2:Mnemonic Instruction Set.pdf, spru172c, 2001, TI官网3.1 C54x汇编语言指令集介绍C54x汇编语言源程序指令包括:➢汇编语言指令Assembly Language Instructions ➢汇编伪指令Assembler Directives➢宏指令Macro Directives本章介绍C54x DSP的汇编语言指令系统。
与其它CPU的指令集相同,汇编语言指令又称为硬指令,它们在汇编和连接后形成可执行的机器码,供DSP进行运算和其它操作。
TMS320C54x assembly language source programs consist of source statements that can contain assembler directives, assembly language instructions, macro directives, and comments.3.1.1 指令系统中的符号、缩写及操作符➢指令系统中采用的符号和缩写如下列表中所示序号符号含义1A累加器A2ALU算术逻辑运算单元3AR泛指通用辅助寄存器4ARx指定某一辅助寄存器AR0~AR75ARP ST0中的3位辅助寄存器指针6ASM ST1中的5位累加器移位方式位-16~15 7B累加器B8BRAF ST1中的块重复操作标志位9BRC块重复操作计数器10BITC或bit_code用于测试指令,指定数据存储器单元中的哪一位被测试,取指范围:0~15BIT Xmem, BITC3.1 C54x汇编语言指令集介绍3.1.1 指令系统中的符号、缩写及操作符(续)序号符号含义11C16ST1中的双16位/双精度算术运算方式位12C ST0中的进位位13CC2位条件码(0≤CC≤3)14CMPT ST1中的ARP修正方式位15CPL ST1中的直接寻址编辑标志位16cond表示一种条件的操作数,用于条件执行指令17[d],[D]延时选项18DAB D地址总线19DAR DAB地址寄存器20dmad16位立即数数据存储器地址(0~65535)序号符号含义21Dmem数据存储器操作数22DPST0中的数据存储器页指针(0≤DP≤511)23Dst目的累加器(A和B)24dst_与dst相反的目的累加器25EAB E地址总线26EAR EAB地址寄存器27extpmad23位立即数程序存储器地址28FRCT ST1中的小数方式位29hi(A)累加器的高阶位(AH或BH)30HM ST1中的保持方式位3.1.1 指令系统中的符号、缩写及操作符(续)序号符号含义31IFR中断标志寄存器32INTM ST1中的中断屏蔽位33K少于9位的短立即数34k33位立即数(0≤k3≤7)35k55位立即数(-16≤k5≤15)36k99位立即数(0≤k9≤511)37lk16位长立即数38Lmem利用长字寻址的32位单数据存储器操作数39mmr,MMR存储器映像寄存器40MMRx,MMRy存储器映像寄存器,AR0~AR7或SP3.1.1 指令系统中的符号、缩写及操作符(续)第3章汇编语言指令系统序号符号含义41n XC 指令后面的字数,取1或242N 指定状态寄存器,N=0为ST0,N=1为ST143OVA ST0中的累加器A 溢出标志44OVB ST0中的累加器B 溢出标志45OVdst 指定目的累加器(A 或B)的溢出标志46OVdst_另一个目的累加器(A 或B)的溢出标志47OVsrc 指定源累加器(A 或B)的溢出标志48OVM ST1中的溢出方式位49PA 16位立即数端口地址(0≤PA ≤65535)50PAR 程序存储器地址寄存器3.1.1 指令系统中的符号、缩写及操作符(续)XC n, cond [, cond [, cond]RSBX N, SBIT第3章汇编语言指令系统序号符号含义51PC程序计数器52pmad16位立即数程序存储器地址(0≤pmad≤65535)53pmem程序存储器操作数54PMST处理器工作方式状态寄存器55prog程序存储器操作数56[R]舍入选项57rnd舍入Round58RC重复计数器59RTN快速返回寄存器60REA块重复结束地址寄存器3.1.1 指令系统中的符号、缩写及操作符(续)第3章汇编语言指令系统序号符号含义61RSA 块重复起始地址寄存器62SBIT 用于指定状态寄存器位的4位地址(0~15)63SHFT 4位移位值(0~15)64SHIFT 5位移位值(-16~15)65Sind 间接寻址的单数据存储器操作数66Smem 16位单数据存储器操作数67SP 堆栈指针寄存器68src 源累加器(A 或B)69ST0,ST1状态寄存器0,状态寄存器170SXM ST1中的符号扩展方式位3.1.1 指令系统中的符号、缩写及操作符(续)RSBX N, SBIT序号符号含义71T暂存器72TC ST0中的测试/控制标志73TOS堆栈顶部74TRN状态转移寄存器(比较选择存储CSST单元内) 75TS由T寄存器的5~0位所规定的移位数(-16~31) 76uns无符号数77XF ST1中的外部标志状态位78XPC程序计数器扩展寄存器79Xmem16位双数据存储器操作数, 用于双数据操作数指令和单数据操作指令80Ymem16位双数据存储器操作数,用于双数据操作数指令3.1.1 指令系统中的符号、缩写及操作符(续)CMPS指令3.1.1 指令系统中的符号、缩写及操作符➢指令系统中的运算符号及优先级如下列表中所示序号符号运算功能求值顺序1+ -~ !取正、取负、按位求补、逻辑非从右至左2* / %乘法、除法、求模从左至右3+ -加法、减法从左至右4^指数从左到右5<< >>左移、右移从左至右6< ≤小于、小于等于从左至右7> ≥大于、大于等于从左至右8≠!=不等于从左至右序号符号运算功能求值顺序8=等于从左至右9&按位与运算(AND )从左至右10∧按位异或运算(exclusive OR )从左至右11|按位或运算(OR )从左至右3.1.1 指令系统中的符号、缩写及操作符➢指令系统中的运算符号及优先级如下列表中所示本节以LD 装载指令为例,说明指令的格式和其它一些有用信息。
第三章 MCS-51指令系统
3-1 指令格式 3-2 寻址方式 3-3 数据传送指令 3-4 算术运算指令
3-5 逻辑运算指令
3-6 位操作指令
3-7 控制转移指令
3-8 调用和返回指令
1
第三章 MCS-51指令系统
3-1 指令格式
一、 汇编语言指令格式 [标号:] 操作码 [操作数1],[操作数2][;注释] 例: LOOP: MOV A,#40H ;40H -> A
3-2 指令寻址方式
寻找操作数的方法叫寻址方式。
一、立即寻址方式 指令中给出实际操作数据(立即数), 一般用于为寄存器或存储器赋常数初值。
例:
8位立即数: MOV A,#40H ;A40H 16位立即数: MOV DPTR,#2100H ;DPTR2100H
9
第三章 MCS-51指令系统 二、直接寻址方式
24
第三章 MCS-51指令系统
(四)堆栈操作指令 入栈指令:PUSH n ;SPSP+1,(SP)(n) 出栈指令:POP n ;(n)(SP),SPSP-1 例:设 A=02,B=56H,执行下列指令后,SP= 30H , ? A= ? ,B= ? 30H 30H
SBR: MOV SP,#30H ;设栈底 PUSH A PUSH B MOV A,#0 B, #01
Y1,Y2,…,Yn
5
第三章 MCS-51指令系统
3-1 指令格式
二、 伪指令
汇编时不产生机器码,仅供汇编识别控制。
5.定义空间伪指令:DS 表达式 例3-6 ORG DS DB 0F00H 10H 20H,40H
汇编后,从0F00H开始,保留16个字节的内存单元, 然后从0F10H开始,按照下一条DB伪指令给内存单元赋值, 得(0F10H)=20H,(0F11H)=40H。
第三章MCS51系列单片机指令系统及汇编语言程序设计
SJMP rel ;PC+ 2 + rel→PC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码 偏移量,且SJMP rel指令为2字节指令,所以转移范围为-126D~+ 129D 【4】间接转移指令
表3.4 程序存储器空间中的32个基本2K地址范围
0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH
3. 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。通用寄存 器包括:A,B,DPTR,R0~R7。其中,R0~R7必须在 工作寄存器组之中。
例如:INC R0 ;(R0)+1→R0
需要注意的是,A和B既是通用寄存器,又是具有直 接地址的特殊功能寄存器。
4. 寄存器间接寻址
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够 用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必 须在工作寄存器组之中,SP仅用于堆栈操作。
MCS-51单片机共有111条指令,按功能分类, MCS-51指令系统可分为5大类:
➢ 数据传送类指令(共29条) ➢ 算术操作类指令(共24条) ➢ 逻辑操作类指令(共24条) ➢ 控制转移类指令(共17条) ➢ 布尔变量操作类指令(共17条)
1.数据传送类指令(共29条)
以累加器A为目的操作数类指令(4条)
第3章MCS-51指令系统
第3章 MCS-51指令系统 4. 伪指令 在汇编语言源程序中,除了包含可以转化为特定计算机系 统的机器语言指令所对应的汇编语言指令外,还可能包含一些 伪指令,如“ORG 2000H”、“END”等。“伪”者,假也,尽 尽 管它不是计算机系统对应的指令,汇编时也不产生机器码,但 管它不是计算机系统对应的指令,汇编时也不产生机器码, 汇编语言程序中的伪指令并非可有可无。伪指令的作用是指导 汇编语言程序中的伪指令并非可有可无。 源程序的汇编过程, 源程序的汇编过程,例如“ORG 2000H”伪指令,指示汇编程序 将该伪指令后的汇编语言指令对应的机器码从2000H单元开始存 放。
第3章 MCS-51指令系统
· 52/54子系列内部RAM后128字节(即地址编码为80~FFH) 各单元之间不能直接传送。原因是高128字节内部RAM只能使 用寄存器间接寻址方式,而一条指令中,最多只允许一个操作 数使用寄存器间接寻址方式。 数据传送指令一般不会影响程序状态字寄存器PSW中的标 志位,但当数据传送到累加器A时,PSW中的奇偶标志位P会改 变,原因是奇偶标志位P总是体现累加器A中“1”的个数的奇偶 性。
第3章 MCS-51指令系统 1. 内部 内部RAM与特殊功能寄存器之间的数据传送 与特殊功能寄存器之间的数据传送 表3-1 内部RAM与特殊功能寄存器之间的数据传送指令
指令名称 指令格式 MOV A,Rn 以累加器A作为 目的操作数 MOV A,direct MOV A,@Ri MOV A,#data 机器码 11101rrr 11100101 direct 1110011i 01110100 data 功能 A←Rn A←(direct) A←(Ri) A←data 指令周期 1 1 1 1
MOV 90H,0F0H ; 将特殊功能寄存器0F0H单元(即寄存器B) 内容传送到特殊功能寄存器90H ; 单元(即P1口锁存器)中
第3章 PIC单片机指令系统
第3章 指令系统3.1 3.2 3.3 3.4 汇编语言 寻址方式 PIC18F452指令系统 程序设计举例3.1汇编语言• 指令:是 指令:是CPU CPU根据人的意图来执行某种操作的命令。
根据人的意图来执行某种操作的命令。
• 程序设计语言:是实现人机交换信息的基本工具,分为机 器语言、汇编语言和高级语言。
• 机器语言:用二进制编码表示每条指令 机器语言:用二进制编码表示每条指令,是计算机能 ,是计算机能直接 直接 识别和执行的语言。
识别和执行 的语言。
• 汇编语言:是用助记符、符号和数字 汇编语言:是用助记符、符号和数字等来表示指令的程序 等来表示指令的程序 设计语言。
它与机器语言指令是一一对应的。
设计语言。
它与机器语言指令是一一对应的。
? 汇编语言编写的程序能否直接被计算机执行? • 高级语言:面向问题和计算过程的语言,可通用于各种不 同的计算机。
用户编程时不必了解所用计算机的指令系统。
Why study assembly language?• Many critical programs are written in assembly language • To better understand the functions and architecture of a computer system • To better understand the working of high level languages • To design efficient programs • A tool for writing system programs • Embedded systems development– Mixed languages programming3• PIC18F452 PIC18F452汇编语言指令格式 汇编语言指令格式 标记段: 标记段 :操作码 [目的 目的操作数 操作数][, ][,源 源操作数 操作数][ ][; ;注释 注释] ]MOVLW BTFSS BCF GOTO 0x7F WREG, 7 WREG, 0 Stop ;load test data ;clear bit 0Stop:• 其中操作码 其中操作码是必不可少的。
DSP(知识点+思考题)
DSP复习要点第一章绪论1、数的定标:Qn表示。
例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示2、‟C54x小数的表示方法:采用2的补码小数;.word 32768 *707/10003、定点算术运算:乘法:解决冗余符号位的办法是在程序中设定状态寄存器STl中的FRCT位为1,让相乘的结果自动左移1位。
第二章CPU结构和存储器设置一、思考题:1、C54x DSP的总线结构有哪些特点?答:TMS320C54x的结构是围绕8组16bit总线建立的。
(1)、一组程序总线(PB):传送从程序存储器的指令代码和立即数。
(2)、三组数据总线(CB,DB和EB):连接各种元器件,(3)、四组地址总线(PAB,CAB,DAB和EAB)传送执行指令所需要的地址。
2、C54x DSP的CPU包括哪些单元?答:'C54X 芯片的CPU包括:(1)、40bit的算术逻辑单元(2)、累加器A和B(3)、桶形移位寄存器(4)、乘法器/加法器单元(5)、比较选择和存储单元(6)、指数编码器(7)、CPU状态和控制寄存器(8)、寻址单元。
1)、累加器A和B分为三部分:保护位、高位字、地位字。
保护位保存多余高位,防止溢出。
2)、桶形移位寄存器:将输入数据进行0~31bits的左移(正值)和0~15bits的右移(负值)3)、乘法器/加法器单元:能够在一个周期内完成一次17*17bit的乘法和一次40位的加法4)、比较选择和存储单元:用维比特算法设计的进行加法/比较/选择运算。
5)、CPU状态和控制寄存器:状态寄存器ST0和ST1,由置位指令SSBX和复位指令RSBX控制、处理器模式状态寄存器PMST2-3、简述’C54x DSP的ST1,ST0,PMST的主要功能。
答:’C54x DSP的ST1,ST0,PMST的主要功能是用于设置和查看CPU的工作状态。
•ST0主要反映处理器的寻址要求和计算机的运行状态。
第3章_89C51的指令系统
⑤ 操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。
⑷ 注释:指令功能说明。
① 注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。 ② 注释必须以“;”开始。
指令有单字节指令、双字节指令、三字节不同长 度的指令,格式不同: (1)单字节指令:操作码、操作数 同在一个字 节中。
方括符[ ]表示可选项 标号代表指令所在地址,1-8个字母/数字,“:‖结尾
⑴
标号:指令的符号地址。
① 用于一段功能程序的识别标记或控制 转移地址。 ② 指令前的标号代表该指令的地址, 是用符号表示的地址。 ③ 一般用英文字母和数字组成。
④
标号必须用冒号“ :”与操作码分隔。
⑵
操作码:表示指令的操作功能。
MOV A,3AH ;将内RAM 3AH单元中的数据传送至A中
MOV A,P0 ;将特殊功能寄存器P0口中的数据传送至A中 说明:3AH和P0是以direct形式出现的直接地址 访问特殊功能寄存器SFR只能采用直接寻址方式。
直接寻址是给出操作数的直接地址。
3. 寄存器间接寻址方式 寄存器中存放的是操作数的地址,在寄存器前加前缀标志“@‖ 。 访问内部RAM或外部RAM的低256个字节时,只能采用R0或R1作 为间址寄存器。例如: MOV A,@Ri ;i=0或1 其中Ri中的内容为40H,把内部RAM40H单元内容送A。 寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对外部RAM的64K字节的间接寻址,例如: MOVX A,@DPTR (3)片外数据存储器的低256字节 例如:MOVX A,@Ri (4)堆栈区 堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针 (SP)作间址寄存器
第3章答案指令系统1-40
第3章指令系统1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。
1、指令:CPU根据人的意图来执行某种操作的命令指令系统:一台计算机所能执行的全部指令集合机器语言:用二进制编码表示,计算机能直接识别和执行的语言汇编语言:用助记符、符号和数字来表示指令的程序语言高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言2,什么是计算机的指令和指令系统?2、见第1题。
3,简述89C51汇编指令格式。
3、操作码[目的操作数] [,源操作数]4,简述89C51寻址方式和所能涉及的寻址空间。
5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址6,在89C51片内RAM中,已知(30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。
6、MOV A,40H ;直接寻址(40H)→AMOV R0,A ;寄存器寻址(A)→R0MOV P1,#0F0H ;立即数寻址0F0→P1MOV @R0,30H ;直接寻址(30H)→(R0)MOV DPTR,#3848H ;立即数寻址3848H→DPTRMOV 40H,38H ;直接寻址(38H)→40HMOV R0,30H ;直接寻址(30H)→R0MOV P0,R0 ;寄存器寻址(R0 )→P0MOV 18H,#30H ;立即数寻址30H→18HMOV A,@R0 ;寄存器间接寻址((R0)) →AMOV P2,P1 ;直接寻址(P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 注意:→左边是内容,右边是单元7,对89C51片内RAM的高128字节的地址空间寻址要注意什么7、用直接寻址,位寻址,寄存器寻址8,指出下列指令的本质区别。
第3章 8086(8088)CPU指令系统
20H 00H
00H 34H 12H
3000H:0000H
注: ◆基址因子BP访问默认为堆栈段 ◆不能同时取两个基址因子;也不 能同时去两个变址因子
16
+
3000H:3000H
AH
AL
第3章 8086/8088CPU指令系统
4.1.4 操作数寻址方式
●存储器寻址之相对基址加变址寻址(Base
9
第3章 8086/8088CPU指令系统
3.1.3 操作数寻址方式
4.1操作数寻址方式
所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操 作数的存放位臵,CPU在执行该指令时,按照指令格式中的表示找 到并对数据进行存取。 1.立即寻址(Immediate Addressing) 立即寻址中的操作数作为指令的一 部分存放在代码段中,在取指阶段数据 随指令一起被取到CPU,这种数据在指 令格式中的直接表现为常数。 如:MOV AL,34H
2
第3章 8086/8088CPU指令系统
汇编语言指令或符号指令:用字母和其它一些符 号组成的“助记符”与操作数等表示的指令称为汇编 语言指令或符号指令。 例如: MOV AX, BX ; AX←BX 而其二进制代码(机器代码)为89D8H,就是 1000 1001 1101 1000 B 不易理解,不易记忆。助记符是MOV。
操作码
操作数
4
第3章 8086/8088CPU指令系统
3.1.1 8086/8088指令格式
4.1操作数寻址方式
8086/8088机器指令格式通常1-6个字节组成。典型的指令格式 由2个字节组成,如下图所示。
操作码 D W MOD REG R/M
第3章--Cortex-M3-指令系统
3.2.2指令的可选后缀
(2)!后缀 如果指令地址表达式中不含!后缀,则基址寄存器中的地址值不会发生变化。 指令中的地址表达式中含有!后缀时,指令执行后,基址寄存器中的地址值将发 生变化,变化的结果如下: 基址寄存器中的值(指令执行后)=指令执行前的值+地址偏移量
例 3.3 分别执行下面两条指令有何区别?
18
3.3 指令的寻址方式
• 3.3.1 立即数寻址 • 3.3.2 寄存器寻址 • 3.3.3 寄存器间接寻址 • 3.3.4 寄存器移位寻址 • 3.3.5 基址变址寻址 • 3.3.6 多寄存器寻址 • 3.3.7 相对寻址 • 3.3.8 堆栈寻址
3.3.1立即数寻址
• 立即数寻址也叫立即寻址,操作数本身就在指令中给出,取出指令也就
第3章 Cortex-M3 指令系统
1
第3章 Cortex-M3 指令系统
• 3.1 指令基础 • 3.2 汇编语言 • 3.3 寻址方式 • 3.4 指令集
2
3.1 指令基础
• 3.1.1 程序设计语言的层次结构 • 3.1.2 程序的执行过程 • 3.1.3 Cortex M3寄存器
3.1.1程序设计语言的层次结构
S后缀通常用于对条件进行测试,例如是否有溢出,是否进位等;根据 这些变化,就可以进行一些判断,如是否大于,是否相等;从而可能影响 指令执行的顺序。
✓ 条件后缀和S后缀的关系如下: 如果既有条件后缀又有S后缀,则书写时S排在后面, 如:ADDEQS R1,R0,R2 该指令在Z=1时执行,将R0+R2的值放入R1,同时刷新条件标志位。
无法表示的32位数, 只有通过逻辑或算术运算等其它途径获得了. 比如0xffffff00, 可以通过0x000000ff按位取反得到.
汇编语言程序设计(第四版)第3章【课后答案】
汇编语言程序设计第四版【课后习题答案】--囮裑為檤第3章汇编语言程序格式〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用?〔解答〕伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?〔解答〕为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。
〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。
汇编语言对大小写不敏感。
如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?〔解答〕汇编语句有执行性语句和说明性语句;执行性语句由标号、硬指令助记符、操作数和注释四部分组成;说明性语句由名字、伪指令助记符、参数和注释四部分组成〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕⒈编辑文本编辑程序汇编语言源程序.asm⒉汇编汇编程序目标模块文件.obj⒊连接连接程序可执行文件.exe或.com⒋调试调试程序应用程序〔习题3.6〕区分下列概念:(1)变量和标号(2)数值表达式和地址表达式(3)符号常量和字符串常量〔解答〕(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。
(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。
第三章 AVR汇编指令
AVR 汇编语言系统
器件定义文件“m16def.inc” 函数
LOW(表达式) 返回一个表达式值的最低字节。 HIGH(表达式) 返回一个表达式值的第二个字节。 BYTE2(表达式) 与HIGH 函数相同。 BYTE3(表达式) 返回一个表达式值的第三个字节。 BYTE4(表达式) 返回一个表达式值的第四个字节。 LWRD(表达式) 返回一个表达式值的0~15 位。 HWRD(表达式) 返回一个表达式值的16~31 位。 PAGE(表达式) 返回一个表达式值的16~21 位。 EXP2(表达式) 返回(表达式值)2 次幂的值。 LOG2(表达式) 返回Log2(表达式值)的整数部分。
Rd,Rr Rd,Rr Rd,Rr Rd,Rr Rd,Rr
Rd,Rr
AVR指令系统-比较和跳转指令
无条件跳转指令
相对跳转 间接跳转 直接跳转 测试条件符合跳转指令
RJMP IJMP JMP
k k
条件跳转指令
状态寄存器中位为“1”跳转 状态寄存器中位为“0”跳转 相等跳转 不相等跳转 进位标志位C 为“1”跳转 进位标志位C 为“0”跳转
BRBS BRBC BREQ BRNE BRCS BRCC
s, s,
k k
k k
k k
AVR指令系统-比较和跳转指令
大于或等于跳转(对无符号数) 小于跳转(对无符号数) 结果为负跳转 结果为正跳转 大于或等于跳转(带符号数) 小于跳转(带符号数) 半进位标志为“1”跳转 半进位标志为“0”跳转 T 标志为“1”跳转 T 标志为“0”跳转 溢出标志为“1”跳转 溢出标志为“0”跳转 中断标志为“1”跳转 中断标志为“0”跳转
第三章指令系统(可编辑修改word版)
第三章指令系统习题参考答案(三)1、 80C51 系列单片机的指令系统有何特点?答:80c51 的指令系统的特点有:(1)执行时间短。
一个机器周期指令有64 条,2 个时间周期指令有45 条,而4 个机器周期指令仅有2 条(即乘法和除法指令);(2)指令编码字节少。
单字节的指令有49 条,双字节的指令有45 条,三字节的指令仅有17 条;(3)位操作指令丰富。
这是80c51 单片机面向控制特点的重要保证。
2、 80C51 单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何?答:(1)寄存器寻址。
对应的寄存器有:·工作寄存器 R0~R7·累加器 A·寄存器 B·数据指针 DPTR(2)直接寻址。
对应的存储空间有:·片内 RAM 低 128 字节(以地址形式表示)·SFR(以地址形式或 SFR 符号形式表示,但符号将转换为相应的SFR 地址)(3)寄存器间接寻址。
对应的空间有:·片内 RAM(采用@R0,@R1 或 SP);·片外 RAM(采用@R0,@R1 或@DPTR)(4)变址寻址。
对应的空间有:·ROM 空间(采用@A+DPTR,@A+PC)(5)相对寻址。
·ROM 空间(采用 JC rel)(6)位寻址。
·片内 RAM 的 20H~2FH 单元的 128 可寻址位·SFR 的可寻址位3、访问特殊功寄存器SFR 可以采用哪些寻址方式?答:直接寻址、位寻址4、访问内部RAM 单元可以采用哪些寻址方式?答:寄存器寻址、直接寻址、寄存器间接寻址5、访问外部RAM 单元可以采用哪些寻址方式?答:寄存器间接寻址6、访问外部程序存储器可以采用哪些寻址方式?答:立即寻址、变址寻址、相对寻址7、为什么说布尔处理功能是80C51 单片机的重要特点?答:布尔处理功能是MCS-51 系列单片机的一个重要特征,在物理结构上,MCS-51 单片机有一个布尔(位)处理器,对位地址空间具有丰富的位操作指令。
单片机-第三章
间接寻址寄存器前缀, @Ri, @ 间接寻址寄存器前缀,如@Ri,@A+DPTR (X) X中的内容。 中的内容。 寻址的单元中的内容。 ((X)) 由X寻址的单元中的内容。 箭头右边的内容被箭头左边的内容所取代。 → 箭头右边的内容被箭头左边的内容所取代。
单片机原理及接口技术——自动化系 单片机原理及接口技术——自动化系
单片机原理及接口技术——自动化系 单片机原理及接口技术——自动化系
MCS-51单片机指令系统 第3章 MCS-51单片机指令系统
本章主要介绍MCS-51汇编语言的指令系统。 本章主要介绍MCS-51汇编语言的指令系统。 MCS 汇编语言的指令系统 MCS-51的基本指令共111条 的基本指令共111 MCS-51的基本指令共111条 单字节指令; (1) 单字节指令; 按指令所占的字节来分: 双字节指令; 按指令所占的字节来分: (2) 双字节指令; 三字节指令。 (3) 三字节指令。 按指令的执行时间来分: 按指令的执行时间来分: 1个机器周期 12个时钟振荡周期 指令64 个机器周期( 个时钟振荡周期) 64条 (1) 1个机器周期(12个时钟振荡周期)指令64条 2个机器周期 24个时钟振荡周期 指令45 个机器周期( 个时钟振荡周期) 45条 (2) 2个机器周期(24个时钟振荡周期)指令45条 4个机器周期只有乘 除两条指令的执行时间为(48个时 个机器周期只有乘、 (3) 4个机器周期只有乘、除两条指令的执行时间为(48个时 钟振荡周期)。 钟振荡周期)。 12MHz晶振 机器周期为1 晶振: 12MHz晶振:机器周期为1µs。
单片机原理及接口技术——自动化系 单片机原理及接口技术——自动化系
;A←(Rn) ;A←(direct) ;A←((Ri)) ;A←#data
汇编语言 第三章 实方式指令寻址与指令系统
3.2实方式32位指令寻址
实地址方式32位指令寻址,指在32位的PC机上使
用16位的存储机制,执行32位的非保护方式及非虚拟
方式的指令,达到直接存取32位寄存器和32位存储器
操作数的目的。
3.3实方式指令系统
指令系统是一台机器所有指令的集合。 Pentium系列 机指令系统庞大、类型多样,约有300多条指令,其中包 括基本指令100多条。 具有支持多进程、多任务、虚 拟存储器和多媒体等功能的32位指令。
设DS=4000H, 1、MOV AX,[3020H] 2、VAR DW 86
MOV AX,VAR 3、SI=1800H, MOV AX,[SI] 4、COUNT DW 5,6,7,8 SI=06H MOV AX,COUNT[SI]
3.1.3数据寻址与数据结构的 关系
多种寻址方式能方便、灵活的存取操作数, 支持高级语 言的某些数据结构。
寄存器间接寻址例
例:MOV AX,[BX] 设BX=1200H
代
MOV
码
段
偏移地址
┇
1200H 22H
数
AH AL 11 22
11H
据
段
寄存器间接寻址
由寄存器间接给出操作数的偏移地址;
存放偏移地址的寄存器称为间址寄存器,它们是:BX, BP,SI,DI
操作数的段地址(数据处于哪个段)取决于选择哪一 个间址寄存器:
一、立即寻址
指令中的源操作数是立即数,即源操作数是参加操作 的数据本身
例:MOV AX,1200H
AH AL
MOV
00H
代
12H
码
┇
段
寄存器寻址(Register Addressing)
单片机原理与应用(曹立军)章 (3)
个字母或数字,并以冒号“:”结尾。
第三章 MCS-51指令系统
操作码部分规定了指令的操作功能,即说明了指令的操作 性质。操作码是指令中唯一不能缺少的部分。上例中的操作码 是MOV,表示指令进行的送数操作。操作码一般由2~5个英文 字母表示,例如ADD、JB、LCALL等。
第三章 MCS-51指令系统
这里,用MOV A,#01H代替74 01H。其中,74H是80C51的 指令码,表示一个数据送到累加器A的操作,用指令助记符MOV A来表示;01H是要传送的数据。同样,ADD A,#02H代替24 02H,24H是指令码,表示累加器和数据的加法操作,用指令助 记符ADD A表示;02H是要加的数据。
第三章 MCS-51指令系统
R1前面加“@”,则表示R0、R1中存放地址;若不加“@”则表 示存放数据。同样,若DPTR前面加“@”则表示数据指针寄存 器存放16位地址,否则表示存放16位数据。
应注意一条指令必须占用一行,不要在一行中写两条以上 指令。
第三章 MCS-51指令系统
8051单片机是MCS-51单片机系列中最早的一个成员,但它 和MCS-51系列的其它成员一样,都使用MCS-51指令系统。MCS5l指令系统共有111条指令,根据指令所占字节多少划分,单 字节指令49条,双字节指令45条,三字节指令17条;根据每条 指令执行所需时间划分,单机器周期指令64条,双机器周期指 令45条,四机器周期指令2条(乘、除法指令)。这样,根据指 令所占字节及执行所需时间不同,MCS-51指令系统共有6种情 况:单周期单字节、单周期双字节、双周期单字节、双周期双 字节、双周期三字节、四周期单字节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[3-46]查找字符串
mov di,offset string mov al,20h mov cx,count cld repnz scasb ;搜索 jz found ;为0(ZF=1),发现空格 ... ;不含空格,则继续执行 found: ...
[3-47]查找字符串
MOV MOV MOV CLD SI,1000H DI,2000H CX,100 ;源地址为1000H ;目的地址为2000H ;字符串长100个字节 ;方向标志清0,使指针 按增量方向修改 ;将源地址开始的100个 字节传送到目的地址
[例3-37] 32位数移位
;将DX.AX中32位数值左移一位 shl ax,1 rcl dx,1 ;把AL最低位送BL最低位,保持AL不变 ror bl,1 ror al,1 rcl bl,1 rol al,1
[例3-38] BCD码合并
;AH.AL分别存放着非压缩BCD码的两位 ;将它们合并成为一个压缩BCD码存AL and ax,0f0fh ;保证高4位为0 mov cl,4 rol ah,cl ;也可以用shl ah,cl add al,ah ;也可以用or al,ah
ቤተ መጻሕፍቲ ባይዱ
[例 3-40] 字串传送
mov si,offset source mov di,offset destination mov cx,50 ;cx←传送次数 cld ;置DF=0,地址增加 again: movsw ;传送一个字 dec cx ;传送次数减1 jnz again ;判断传送次数cx是否为0 ;不为0,则到again位置执行指令 ;否则,结束
5.串扫描SCAS(scan string)
将AL/AX减去目的操作数,以便设置标志,进 而比较AL/AX与操作数之间的关系
SCASB ;字节串扫描:AL-ES:[DI] ;DI←DI±1 SCASW ;字串扫描:AX-ES:[DI] ;DI←DI±2
[例题3-44]查找字符串
mov di,offset string mov al,20h mov cx,count cld again: scasb ;搜索 jz found ;为0(ZF=1),发现空格 dec cx ;不是空格 jnz again ;搜索下一个字符 ... ;不含空格,则继续执行 found: ...
2.串存储STOS(store string)
把AL或AX数据传送至目的地址
STOSB ;字节串存储:ES:[DI]←AL ;DI←DI±1
STOSW ;字串存储:ES:[DI]←AX ;DI←DI±2
[例3-41]串存储
mov ax,0 mov di,0 mov cx,8000h ;cx←传送次数(32×1024) cld ;DF=0,地址增加 again: stosw ;传送一个字 dec cx ;传送次数减1 jnz again ;传送次数cx是否为0
1.串传送MOVS(move string)
把字节或字操作数从主存的源地址传送至目的 地址 • MOVSB • ;字节串传送:ES:[DI]←DS:[SI] • ;SI←SI±1,DI←DI±1
• •
• •
MOVSW ;字串传送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2
offset是汇编操作符, 求出变量的偏移地址
重复比较的解释
指令repz cmpsb结束重复执行的情况 ① ZF=0,即出现不相等的字符 ② CX=0,即比较完所有字符: 这种情况下,如果ZF=0,说明有字符不等; 而ZF=1表示所有字符比较后都相等,也就 是两个字符串相同 所以,重复比较结束后,jnz unmat指令的条 件成立ZF=0,字符串不相等
串寻址方式
源操作数用寄存器SI寻址,默认在数据段DS中, 但允许段超越 目的操作数用寄存器DI寻址,默认在附加段ES中, 不允许段超越:ES:[DI] 每执行一次串操作指令,SI和DI将自动修改: ±1(对于字节串)或±2(对于字串) 执行指令CLD后,DF = 0,地址指针增1或2 执行指令STD后,DF = 1,地址指针减1或2
3.串读取LODS(load string)
把指定主存单元的数据传送给AL或AX LODSB ;字节串读取:AL←DS:[SI] ;SI←SI±1
LODSW ;字串读取:AX←DS:[SI] ;SI←SI±2
[例题3-42]串读取-1
si,offset block di,offset dplus bx,offset dminus ax,ds es,ax ;数据都在一个段中,所以设置es=ds mov cx,count ;cx←字节数 cld mov mov mov mov mov
WAIT
NOP (no operation)
不执行任何操作,但占用一个字节存储单元, 空耗一个指令执行周期 NOP常用于程序调试 • 在需要预留指令空间时用NOP填充 • 代码空间多余时也可以用NOP填充 • 还可以用NOP实现软件延时
封锁前缀指令
LOCK (lock bus) ;封锁总线 这是一个指令前缀,可放在任何指令前 这个前缀使得这条指令在执行过程中,8086 处理器的封锁输出引脚有效,LOCK=0,即把总 线封锁,使别的控制器不能控制总线;直到该 指令执行完后,总线封锁解除
[例题3-42]串读取-2
go_on: lodsb ;从block取出一个数据 test al,80h ;检测符号位,判断是正是负 jnz minus ;符号位为1,是负数,转向minus stosb ;符号位为0,是正数,存入dplus jmp again ;程序转移到again处继续执行 jnz go_on ;完成正负数据分离
REP MOVSB
3.3.5 处理器控制指令
1.标志设定指令 标志位操作指令直接对CF、DF、IF标志进行 复位或置位 对标志位进行设置的指令 • CLC STC CMC • CLD STD • CLI STI
进位标志操作指令
用于任意设置进位标志
CLC ;复位进位标志:CF←0 STC ;置位进位标志:CF←1
3.3.4串操作类指令
串操作指令是8086指令系统中比较独特的一类 指令,采用比较特殊的数据串寻址方式,常用 于操作主存连续区域的数据 主要熟悉: MOVS STOS LODS
CMPS SCAS REP 一般了解: REPZ/REPE REPNZ/REPNE
串数据类型
串操作指令的操作数是主存中连续存放的数据 串(String)——即在连续的主存区域中,字 节或字的序列 串操作指令的操作对象是以字(W)为单位的 字串,或是以字节(B)为单位的字节串
1.REP重复前缀指令
REP ;每执行一次串指令,CX减1 ;直到CX=0,重复执行结束 REP前缀可以理解为:当数据串没有结束 (CX≠0),则继续传送
重复串传送
mov mov mov cld rep si,offset source di,offset destination cx,100 ;cx←传送次数 movsb movsb ;传送一个字节 dec cx ;传送次数减1 jnz again ;判断传送次数cx是否为0 ;不为0(ZF=0),则转移again位置执行 ;否则,结束
•
• •
CMPSB ;字节串比较:DS:[SI]-ES:[DI] ;SI←SI±1,DI←DI±1
• • •
CMPSW ;字串比较:DS:[SI]-ES:[DI] ;SI←SI±2,DI←DI±2
[例题3-43]比较字符串
mov si,offset string1 mov di,offset string2 mov cx,count cld again: cmpsb ;比较两个字符 jnz unmat ;有不同字符,转移 dec cx jnz again ;进行下一个字符比较 mov al,0 ;字符串相等,设置00h jmp output ;转向output unmat: mov al,0ffh ;设置ffh output: mov result,al ;输出结果标记
交权指令ESC:CPU调用协处理器工作.
等待指令 WAIT ;进入等待状态 若测试到TEST=0,则CPU 处于暂停状态;若测 试到TEST=1,则CPU脱离暂停状态,继续往下执 行. 8086利用WAIT指令和测试引脚实现与8087同 步运行
3.REPNZ重复前缀指令
REPNZ ;每执行一次串指令,CX减1 ;并判断ZF是否为1, ;只要CX=0或ZF=1,重复执行结束
REPNZ/REPNE前缀可以理解为:当数据串没 有结束(CX≠0),并且串不相等(ZF=0), 则继续比较
[例题3-45]比较字符串
mov si,offset string1 mov di,offset string2 mov cx,count cld repz cmpsb ;重复比较两个字符 jnz unmat ;字符串不等,转移 mov al,0 ;字符串相等,设置00h jmp output ;转向output unmat: mov al,0ffh ;设置ffh output: mov result,al ;输出结果标记
[例题3-42]串读取-3
minus: xchg bx,di stosb ;把负数存入dminus xchg bx,di dec cx ;字节数减1 jnz go_on ;完成正负数据分离
again:
4.串比较CMPS(compare string)
将主存中的源操作数减去目的操作数,以便设 置标志位,进而比较两操作数之间的关系
CMC ;求反进位标志:CF←CF
方向标志操作指令
串操作指令中,需要使用
CLD STD ;复位方向标志:DF←0 ;置位方向标志:DF←1
中断标志操作指令
在编写中断服务程序时,需要控制可屏蔽中断 的允许和禁止