第三章 2、指令系统-4串处理指令
第3章(1) 寻址方式和指令系统

EA的组成不同,寻找其中的操作数的方式也随之不同。如何寻找操作数 的有效地址,进而找到所需操作数的方式就是寻址方式 因为EA的组成方式都体现在指令中,故寻址方式也可以说是在指令中获得 操作数所在地址的方法。
3.1 Pentium的寻址方式
• 指令的两个问题
– 指出进行什么操作 – 涉及的操作数和操作结果放在何处
在这种寻址方式中,操作数是在存储器中,但是,操作 数的地址的16位偏移量包含在以下四个寄存器SI、DI、 BP、BX之一中。这又可分成两种情况: 1、 BX、SI、DI间址时以DS为默认段地址; 例:MOV AX,[SI] 2、BP间址时以SS为默认段地址。 例:MOV AX,[BP]
医药信息工程学院 何永玲
二、操作数存在方式
在微型计算机中,操作数可能以以下四种方式存在:
• 操作数包含在指令中——即指令的操作数场就包含着操作数本身。
MOV AX, 1234 ; ADD AL, 2
• 操作数包含在CPU的某一个内部寄存器中—— 这时指令中的操作数场是
CPU内部 寄存器的一个编码。
MOV DS, AX
• 操 作 数 在 内 存 的 数 据 区 中 —— 这 时 指 令 中 的 操 作 数 场 包 含 着 此 操 作 数 的
医药信息工程学院 何永玲
3.2.2 算术运算指令(1-P88)
– 不带进位位的加法指令ADD
比如: ADD ADD ADD ADD 比如: ADC ADC ADC CX,1000H ;CX=CX+1000h DI,SI [BX+DI],AX EAX,[BX+2000H]
• 无符号数和有符号数采用同一套加法指令及减法 所有算术运算指令均影响状态标志。 指令有两个条件:
第三章 微型计算机的指令系统

reg , reg mem , reg reg , mem
C、从存贮器/寄存器到段寄存器 (mem/reg,segreg)
注:不能往CS中传送数据.
D、从段寄存器到存贮器/寄存器 (segreg,mem/reg)
注:
1,不影响标志 2,不允许两操作数都使用存储器 3,不允许往CS中送数 4,8位传送/16位传送决定于指令中寄存器及立 即数形式 5,凡给SS赋值时,系统会自动禁止中断,等下 条指令执行完后才会恢复
B、例 LEA BX,[BX+SI] 执行前:BX=0400H SI=003CH 执行后:BX= LDS SI,[10H] 执行前:DS=C000H, (C0010H)=0180H (0012H)=2000H 执行后:SI= DS= LES DI,[BX] 执行前:DS=B000H, BX=080AH (B080AH)=05AEH, (B080CH)=4000H 执行后:DI= ES=
0
CF
AH
/
/
/
三、算术运算指令 1、加法指令 加: ADD DST,SRC DST←SRC+DST reg,reg; reg,mem; mem,reg reg,data; mem,data; ac,data 带进位加:ADC DST,SRC (DST)← (SRC)+(DST)+CF reg,reg; reg,mem; mem,reg reg,data; mem,data; ac,data 加1: INC OPR (OPR)←─ (OPR)+1 (reg;mem) 注:INC指令不影响CF标志
2,高字节 4,低字节 2,SP+1 4,SP+1 SP SP
(SP) (SP)
第3章Thumb-2指令系统4H解析

3.1 Thumb-2指令集简介
Cortex-M3处理器使用的是Thumb-2指令集的子集,它的指 令工作状态只有Thumb-2状态。 Thumb-2继承了传统的Thumb指令集和ARM指令集的各自优 点,并不是Thumb的升级,包含16-bit指令集和32-bit指 令集两种长度的指令子集。 Thumb-2指令集体系架构,无需处理器进行工作状态的显 示切换,就可运行16位与32位混合代码,并由同一汇编器 对其进行汇编。
ASR算术右移(Arithmetic Shift Right):移位过程中保 持符号位不变,即若源操作数为正数,则数据位的高端空 出的位补0,否则补1;
可采用的移位操作
ROR循环右移(Rtate Right):由数据位的低端移出的位填 入数据位的高端空出的位;
RRX带扩展的循环右移(Rotate Right eXtended by 1 place):操作数右移一位,高端空出的位用原C标志值填 充。
R2 R1
0xAA 0xAA 0x55
MOV R1,R2
SUB
R0,R1,R2
;将R1的值减去R2的值,结果存R0
2、立即寻址
• 地址码字段(第一或第二操作数)直接给出是一整数 (称立即数),例: SUBS R0,R0,#1 ;R0减1结果放入R0,影响标志位
MOV R0,#0xFF000 ;将立即数0xFF000装入R0 程序存储 MOV R0,#0xFF00
条件码 EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL
指令执行条件码
在 Cortex-M3中,只有分支转移指令(B指令)才可以随 意使用条件码。例: BEQ label ;当 Z = = 1 时,程序转移到label 对于其它指令,只有在IF-THEN(IT)指令块中(最多4条) 才能加条件码,且必须加条件码。 IT已经带了一个T,最多再带3个T或E(与T相反的条件),T 、E排列无顺序。例: … CMP R0, R1 ; 比较R0和R1的值,影响标志位 ITTEE GT ; 下带4条指令,如R0>R1既GT成立,否则LE成立 MOVGT R2, R0 ; GT成立,则 R2 = R0 MOVGT R3, R1 ; GT成立,则 R3 = R1 MOVLE R2, R1 ; LE成立,则 R2 = R1 MOVLE R3, R0 ; LE成立,则 R3 = R0 …
MCS-51单片机原理和接口技术习题参考答案

MCS-51单片机原理及接口技术习题参考答案第一章绪论1-1解答:第一台计算机的研制目的是为了计算复杂的数学难题。
它的特点是:计算机字长为12位,运算速度为5 000次/s,使用18 800个电子管,1 500个继电器,占地面积为150 m2,重达30 t,其造价为100多万美元。
它的诞生,标志着人类文明进入了一个新的历史阶段。
1-2解答:单片微型计算机简称单片机。
一个完整的单片机芯片至少有中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、定时/计数器及I/O接口等部件。
1-3解答:单片机的发展大致经历了四个阶段:第一阶段(1970—1974年),为4位单片机阶段;第二阶段(1974—1978年),为低中档8位单片机阶段;第三阶段(1978—1983年),为高档8位单片机阶段;第四阶段(1983年至今),为8位单片机巩固发展阶段及16位单片机、32位单片机推出阶段。
1-4解答:Intel公司的MCS-48系列、MCS-51系列、MCS-96系列产品;Motorola公司的6801、6802、6803、6805、68HC11系列产品;Zilog公司的Z8、Super8系列产品;Atmel公司的AT89系列产品;Fairchild公司的F8和3870系列产品;TI公司的TMS7000系列产品;NS公司的NS8070系列产品;NEC公司的μCOM87(μPD7800)系列产品;National公司的MN6800系列产品;Hitachi公司的HD6301、HD63L05、HD6305。
1-5解答:(1)8031/8051/8751三种型号,称为8051子系列。
8031片内没有ROM,使用时需在片外接EPROM。
8051片内含有4KB的掩模ROM,其中的程序是生产厂家制作芯片时烧制的。
8751片内含有4KB的EPROM,用户可以先用紫外线擦除器擦除,然后再利用开发机或编程器写入新的程序。
(2)8032A/8052A/8752A是8031/8051/8751的增强型,称为8052子系列。
第三章指令系统总结及课后题

(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,
(40H)
=40H,(48H)=38H
精选2021版课件
5
7、8951片内高128字节的地址寻址要注意什么/? 答: 用直接寻址,位寻址,寄存器寻址
8、指出些列指令的本质?
MOV MOV MOV MOV
A,DATA ;
寄存器寻址 工作寄存器R0-R7、A、B、C、DPTR
寄存器间接寻 址
片内RAM低128B、片外RAM
变址寻址
程序存储器(@A+PC,@A+DPTR)
相对寻址
程序存储器256B范围(PC+偏移量)
位寻址
片内RAM的20H-2FH字节地址、部分SFR
精选2021版课件
3
寻址方式中常用的符号注释
Rn(n=0~7):当前选中的工作寄存器组R0~R7。 Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。 #data:8位立即数。 #data16:16位立即数。 direct:8位片内RAM单元(包括SFR)的直接地址。 addr11:11位目的地址,用于ACALL和AJMP指令中。 addr16:16位目的地址。用于LCALL和LJMP指令中。 rel:补码表示的8位地址偏移量。范围:-128~+127D。 bit:片内RAM或SFR的直接寻址位地址。 @:间接寄存器的符号。 /:位操作指令中对该位先取反再参与操作,不影响原值。 (×):×中的内容。 ((×)):×指出的地址单元中的内容。 →:指令操作流程方向。
高级语言:独立于机器的,在编程时不需要对机 器结构及其指令系统有深入了解的通用性语言
精选2021版课件
2
微机原理第3章-指令系统

▲按给出偏移地址方式的不同,分为以下5种: 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器 相对基址加变址寄存器 MOV AL, [ BX ] MOV AL, [ BX + 10H ] MOV AL, [ BX + SI ] MOV AL, [ BX + SI + 10H ]
(1)寄存器间接寻址
寄存器寻址方式的操作数是寄存器的值,指令中直接 使用寄存器名,包括8位或16位通用寄存器和段寄存器。可 使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、 BP;其中:AX、BX、CX、DX可分成两8位使用。
例: MOV AX,CX
;(AX)
(CX)
INC CX
;(CX)
(CX)+1
3.直接寻址(Direct Addressing)
0002
AH
AL
默认段寄存器的关系: ① 使用BX、SI、DI,默认段寄存器为DS
(BX)
PA = ( DS )×10H + (SI) (DI)
② 使用BP,默认段寄存器为SS PA = ( SS )×10H + ( BP )
使用BX、SI、DI的寄存器寻址,默认段寄存器为DS
寄存器组 AH AL BH BL CH CL DH DL SI DI BP SP AX BX CX DX DS ES SS CS IP 地 址 加 法 器
运 算 器
控制总线CB
码
器
PSW标志 寄存器
执行部件控制电路
CPU
总线
内存
例: MOV AX , [ BX + SI ]
若 ( DS ) = 4000H
( BX ) = 2000H ( SI ) = 100H 则内存操作数的物理地址为:
单片机原理及接口技术-习题答案第四版李朝青(修订后)

单片机原理及接口技术课后习题答案(第四版)李朝青第一章1.什么是微处理器(CPU)、微机和单片机?答微处理器本身不是计算机,但它是小型计算机或微机的控制和处理部分。
微机则是具有完整运算及控制功能的计算机,除了微处理器外还包括存储器、接口适配器以及输入输出设备等。
单片机是将微处理器、一定容量的RAM、ROM以及I/O口、定时器等电路集成在一块芯片上,构成的单片微型计算机。
2.单片机具有哪些特点(1)片内存储容量越来越大。
(2 抗干扰性好,可靠性高。
(3)芯片引线齐全,容易扩展。
(4)运行速度高,控制功能强。
(5)单片机内部的数据信息保存时间很长,有的芯片可以达到100年以上。
3. 微型计算机怎样执行一个程序?答:通过CPU指令,提到内存当中,再逐一执行。
4. 微型计算机由那几部分构成?微处理器,存储器,接口适配器(即I/O接口),I/O设备第二章1.89C51单片机内包含哪些主要逻辑功能部件?答:80C51系列单片机在片内集成了以下主要逻辑功能部件:(l)CPU(中央处理器):8位(2)片内RAM:128B(3)特殊功能寄存器:21个(4)程序存储器:4KB(5)并行I/O口:8位,4个(6)串行接口:全双工,1个(7)定时器/计数器:16位,2个(8)片内时钟电路:1个2.89C51的EA端有何用途?答:/EA端接高电平时,CPU只访问片内并执行内部程序,存储器。
/EA端接低电平时,CPU只访问外部ROM,并执行片外程序存储器中的指令。
/EA 端保持高电平时,CPU执行内部存储器中的指令。
3. 89C51的存储器分哪几个空间?如何区别不同空间的寻址?答:ROM(片内ROM和片外ROM统一编址)(使用MOVC)(数据传送指令)(16bits 地址)(64KB)片外RAM(MOVX)(16bits地址)(64KB)片内RAM(MOV)(8bits地址)(256B)4. 简述89C51片内RAM的空间分配。
(完整word版)单片机原理及接口技术复习要点

单片机原理及接口技术复习要点第一章:微机基础知识1.微处理器:小型计算机或微型计算机的控制和处理部分。
主要包括运算器和控制器。
2.存储器:微机内部的存储器,主要包括ROM :只读存储器;RAM :读写存储器;EPROM :可擦写可编程只读存储器。
3.程序计数器:用于存放下一条指令所在单元的地址的地方。
通常又称为指令地址计数器。
4.单片机:将微处理器,一定容量的RAM 和ROM 以及I/O 口,定时器等电路集成在一块芯片上构成的单片微型计算机。
intel 公司1976年推出的MCS -48系列8位单片机。
1980年推出MCS -51系列高档8位单片机。
第二章:89C51/S51单片机的硬件结构和原理1..C51/S51单片机内部结构:CPU 是单片机的核心,是单片机的控制和指挥中心,由运算器和控制器等部件组成;存储器,含有ROM(地址为000H 开始)和RAM (地址为00H~7FH );I/O 接口:四个与外部交换信息的8位并行接口,即P0~P3.2.PP V /EA 引脚:外部程序存储器地址允许输入端/固化编程电压输入端;当引脚接高电平时CPU 只访问Flash ROM 并执行内部程序存储器中的指令;当引脚接低电平(接地)时,CPU 只访问片外ROM 并执行片外程序存储器中的指令。
3.P0端口:P0端口是一个漏极开路的准双向I/O 端口,作输入口使用时要先写1,这就是准双向的含义,作输出口时接上拉电阻。
P1端口:是一个带有内部上拉电阻的8位双向I/O 端口。
4.访问指令:CPU 访问片内,片外ROM 指令用MOVX ;访问片外RAM 用MOVX ;访问片内RAM 用MOV 。
5.低128字节RAM 区:分为通用工作区,可位寻址区,通用工作寄存器区。
6.堆栈:在片内RAM 中专门开辟出来的一个区域,数据的存取是以先进后出的结构方式处理的。
7.时钟发生器:是一个2分频的触发器电路,它将震荡气的信号频率f ocs 除以2,向CPU 提供两相时钟信号P1和P2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
repz cmpsb ;比较字符串 jnz unmat ;不等跳至unmat mov al,0 ;相等 jmp outpt ;保存结果 unmat:mov al,0ffh ;不等 outpt:mov result,al ;保存结果, 结果为0说明字符串相同,否 则说明字符串不同 ret ;返回dos Main endp Code ends End start
(8)SCAS 串扫描指令 格式:SCAS CST SCASB(字节) SCASW(字) 执行的操作: 字节操作:(AL)-((DI)),(DI)←(DI)±1 字操作:(AX)-((DI)),(DI)←(DI)±2 指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个 字节(或字)进行比较,并不保存结果,只根据结果置条件码, 指令的其他特性和MOVS指令的规定相同。 作用:把AL(或AX)中内容与(DI)指定内存中字节(或字)比较,结果 反映在标志位上。 与REPE连用,表示“当串未结束(CX<>0)且串元素=搜索值时 (ZF=1)继续搜索” 与REPNE连用,表示“当串未结束(CX<>0)且串元素<>搜索值时 (ZF=0)继续搜索” (用于在一个串中查找一个字符的位置)
;数据段地址存入数据段寄存器ds mov ax, datarea ;得到数据段地址 mov ds,ax ;存入 DS 寄存器 ;设置 ES 附加段寄存器值 mov ax,extra ;附加段地址 mov es,ax ;存入 ES 寄存器 … lea si,mess1 ;得到mess1地址存入si lea di,mess2 ;得到mess2地址存入di mov cx,17 ;设定循环次数 cld ;设定操作方向,由前向后 rep movsb ;依次将mess1中字符传送至 mess2中,传送17个字符 … code ends ;代码段结束
(3)STOS存入串指令 格式:STOS DST STOSB(字节) STOSW(字) 执行的操作: 字节操作:((DT))←(AL),(DI)←(DI)±1 字操作:((DI))←(AX),(DI)←(DI)±2 作用:该指令把AL或AX的内容存入由(DI)指定的附加段的某单 元中,并根据DF的值及数据类型修改DI的内容。 当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的 缓冲区中。该指令也不影响标志位。 STOS指令在初始化某一缓冲区时很有用。 例:把附加段mess处5个字节缓冲区置为20H(空格) MOV AL,20H MOV CX,5 LEA DI,MESS REP STOSB
作用:比较SI,DI所指地址处内容(字节或字)是否相同,结果反映 在标志位上。 与REPE连用,表示“当串未结尾(CX<>0)且串是相等的 (ZF=1)时继续比较” 与REPNE连用,表示“当串未结尾(CX<>0)且串不相等 (ZF=0)时继续比较” 例:比较两字符串是否相等程序: DATA SEGMENT String1 db ‘this is a string1’ String2 db ‘this is a string2’ ;定义两个字符串 Count equ $-string2 ;count表示字符串长度 Result db ? ;结果占一个字节 DATA ENDS
Code segment assume cs:code,ds:data,es:data Main proc far start: push ds mov ax,0 push ax mov ax,data mov ds,ax mov es,ax mov si,offset string1 mov di,offset string2 mov cx,count cld ;地址增量
在与REP联用时还必须先把数据串的长度送到CX寄存器 中,以便控制指令结束。因此在执行该指令前需做好以 下准备工作: 1) 把存放于数据段中的源串首地址(如反向传送则应 是末地址)放入SI寄存器中; 2) 把将要存放数据串的附加段中的目的串首地址(或 反向传送时的末地址)放入DI寄存器中; 3) 把数据串长度放入CX寄存器; 4) 建立方向标志(CLD或STD)。 在完成这些准备工作后就可使用串指令传送信息了。
例:数据段中有一个字符串,其长度为17,要求把它们传 送到附加段中的一个缓冲区中。编制程序如下所示。 其中SEGMENT,ENDS为定义段的伪操作,DB为串,存 放在数据段中从符号地址MESS1开始的存储区内,每 个字符占有一个字节;MESS2为目的串,存放在附加 段中从符号地址MESS2开始的17个字节的存储区内。 后面的程序则存放在代码段中。程序运行过程如下。 datarea segment ;定义数据段datarea mess1 db ’personal computer $’ datarea ends ;定义数据段结束 extra segment ;定义附加段extra mess2 db 17dup(?) ;分配17个字节,符号地 址为mess2 extra ends ;定义附加段结束 code segment ;定义代码段 assume cs:code,ds:datarea,es:extra …
mov di,offset ptrn;设置字 符串指针 mov al,char mov cx,count cld repne scasb ;在字符串中 查找al中值 jz pastpr ; 查到跳至pastpr mov di,0 ; 未查到di置0 Pastpr:dec di ; 得到字符在 字符串中实际位置,未 查到(di)=0FFFFH ret Main endp;程序结束 Code ends end begin
(2)MOVS 串传送指令
格式:可有三种 MOVS DST,SRC MOVSB (字节) MOVSW(字) 其中第二,三种格式明确地注明是传送字节或字,第一种格式则应 在操作数中表明是字还是字节操作,例如: MOVS ES:BYTE PTR[DI],DS:[SI] 实际上MOVS的寻址方式是隐含的(这在下面所执行的操作中可 以看到),所以这种格式中的DST及SRC只提供给汇编程序作类 型检查用,并且不允许用其他寻址方式来确定操作数。 执行的操作:将数据段偏移(SI)处存放的数据复制到附加段偏移(DI) 处。 1) ((DI))←((SI)) 2) 字节操作: (SI)←(SI)±1,(DI)←(DI)±1 当方向标志DF=0时用+,当方向标志DF=1时用-。 3) 字操作: (SI)←(SI)±2,(DI)←(DI)±2 当方向标志DF=0时用+,当方向标志DF=1时用-。
(6) REPNE/REPNZ 串指令重复操作指令 格式:REPNE(或REPNZ)String Primitive 其中String Primitive可为CMPS和SCAS指令。 执行的操作: 除退出条件为(CX)=0或ZF=1外,其他操作与REPE完全相同。 也就是说,只要两数比较不相等,就可继续执行串处理指令,如 某次两数比较相等或(CX)=0时,就可结束操作。 (7)CMPS 串比较指令 格式:CMPS SRC,DST CMPSB(字节) CMPSW(字) 执行的操作: 1)((SI))-((DI)) 2)字节操作:(SI)←(SI)±1,(DI)←(DI)±1 字操作:(SI)←(SI)±2,(DI)←(DI)±2 指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向 的附加段中的一个字(或字节)相减,但不保存结果,只根据结 果置条件码,指令的其他特性和MOVS指令的规定相同。
例:查找’$’在字符串‘this is a example $’中的位置 Buf_dat segment Char equ ‘ ’ ;定义要查找的字符 Ptrn db ‘presonal computer $’ ;定 义字符串 Count equ $-ptrn ;定义字符串长 Buf_dat ends Code segment assume cs:code,ds:buf_dat,es:buf_dat Main proc far Begin: push ds mov ax,0 push ax mov ax,buf_dat ;设置段寄存器值 mov ds,ax Mov es,ax
(5)REPE/REPZ 串指令重复操作指令 格式:REPE(或REPZ)String Primitive 其中String Primitive可为CMPS或SCAS指令。 执行的操作: 1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退 出,否则往下执行。 2)(CX)←(CX)-1 3)执行其后的串指令 4)重复1)—3) 实际上REPE和REPZ是完全相同的,只是表达的方式不同而已。 与REP相比,除满足(CX)=0的条件可结束操作外,还增加了ZF=0 的条件。也就是说,只要两数相等就可继续比较,如果遇到两数 不相等时可提前结束操作。
四、串处理指令 串处理指令包括:MOVS(串传送),CMPS(串比较), SCAS(串扫描),LODS(从串取),STOS(存入串)。 以及与上述指令配合使用的前缀指令 REP(重复),REPE/REPZ(相等/为零则重复), REPNE/REPNZ(不相等/不为零则重复) 1、与REP配合的MOVS,STOS,LODS指令 (1)REP 重复操作直到(CX)=0为止 格式:REP string primitivs 其中String Primitive可为MOVS,LODS或STOS指令。 执行的操作:1) 如(CX)=0则退出REP,否则往下执行。 2) (CX)←(CX)-1 3) 执行其后的串指令 4) 重复1)~3)
作用:完成内存地址间的数据传送,并自动修改地址指针 SI和DI。使用重复前缀REP,可用一条指令完成整个数 据块的传送。 该指令不影响条件码。 MOVS指令可以把由(SI)指向的数据段中的一个字(或 字节)传送到由(DI)指向的附加段中的一个字(或字 DI 节)中去,同时根据方向标志及数据格式(字或字节) 对SI和DI进行修改。 当该指令与前缀REP联用时,则可将数据段中的整串数据 传送到附加段中去。这里源串必须在数据段中,目的串 必须在附加段中,但源串允许使用段跨越前缀来修改。