第三章8086CPU指令系统
第三章 8086CPU指令系统本章重点:1.寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。
2.8086指令系统:数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控制指令,I/O指令,中断指令。
学习目标:1.掌握寻址方式;2.掌握常用指令的功能和用法。
难点:区别指令的正确与错误。
§1.寻址方式指令在存储器中是顺序存放的,而操作数的存放没有规律,因此操作数的寻址方法相对比较复杂。
一、指令的基本格式1.组成:一条指令包括操作码和操作数两部分。
操作数:源操作数,目标操作数。
2.寻址方式:寻找指令中操作数的方法。
3.操作数类型:(8086系统)寄存器操作数,存储器操作数,立即数(在指令代码中)和I/O端口操作数。
二、寻址方式1.立即数寻址⑴方式:指令中所需的操作数直接包含在指令代码中(即由指令直接提供),立即数可以是8位,也可以是16位。
例:MOV AL,80H ;将十六进制数80H送入ALMOV AX,1090H;将1090H送AX:90H→AL ,10H→AH⑵说明:●采用立即数寻址方式的指令主要用来对寄存器赋值。
因为操作数可以从指令中直接取得,不需要运行总线周期,所以,其显著特点就是速度快。
●规定:立即数只能是整数,不能是小数,变量或者其他类型的数据;另外,立即数只能作为源操作数。
2.寄存器寻址⑴方式:如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出,这种寻址方式就叫寄存器寻址。
对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或BP,而对8位操作数来说寄存器可以为AH……DH,AL……DL。
例:INC CX ;将CX内容加1ROL AH,1 ;将AH中的内容循环左移1位。
⑵说明:●不需要使用总线周期,因此,执行速度快。
●一条指令中,可以对源操作数采用寄存器寻址方式,也可对目的操作数采用寄存器寻址方式,或两者都用。
※以下各种寻址方式,操作数都在存储器中。
3.直接寻址。
⑴方式:数据总是在存储器中,存储单元的有效地址由指令直接指出。
例:MOV AX,[1070H];将DS段的偏移量1070H、1071H的内容装入AX。
即,若DS=2000H,则将21070H和21071H两单元的内容取出送AX。
⑵说明:●直接寻址是对存储器进行访问时可采用的最简单的方式,且可用符号地址代替数值地址。
●若要对其它段寄存器所指出的存储区进行直接寻址,则必须指出段寄存器名。
例:MOV BX ,CS:[3000H];设CS=5100H,则取54000H和54001H两单元内容送BX。
4.寄存器间接寻址⑴方式:将操作数所在的存储单元的偏移地址放在指令给出的寄存器中,而不像直接寻址那样直接给出。
例:MOV AX,[SI];AX←DS:[SI]MOV [BX],AX;DS:[BX]←AX⑵说明:●可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。
●SI,DI,BX约定的段寄存器是DS;而BP约定的段寄存器是SS。
5.基址寻址:⑴方式:操作数的有效地址偏移量是基址寄存器BX或基址指针BP的内容与指令给定的位移量(8位或16位)之和。
例:MOV AX,ARRAY[BX]等价MOV AX,[ARRAY+BX]将DS:[BX]+ARRAY 的内容→AX⑵说明:●BX约定的段寄存器为DS,BP约定SS,可使用段跨越前缀。
●物理地址=16×(DS)+(BX)+位移量(8或16位)或16×(SS)+(BP)+位移量(8或16位)6.变址寻址操作数的有效地址是变址寄存器SI、DI的内容与指令给定的位移量(8位或16位)之和。
段寄存器约定在DS中,允许段超越。
例:MOV [DI+12H],AX;DS:[DI+12H]←AXMOV BX,SS:[DI+45H];BX←SS:[DI+45H]7.基址变址寻址。
⑴方式:操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和。
段寄存器约定由基址寄存器决定,BX 约定DS,BP约定SS,允许段超越。
例:MOV AX,ARRAY[BX] [SI];等价MOV AX,[BX+SI+ARRAY];即:AX←DS:[BX+SI+ARRAY]⑵说明:基址寄存器BX,BP不能同时出现在一个方括号内;变址寄存器SI,DI亦如此。
8.串操作寻址方式:用于串操作指令,其操作数虽然也在寄存器中,但不使用上述寻址方式,而是隐含地运用,SI指出源串偏移地址,DI指出目的串偏移地址。
指令执行后,SI和DI的内容根据方向标志DF的值进行增减,DF=0增,DF=1减。
若串操作按字节进行,增/减“1”;若串操作按字进行,增/减“2”。
●约定源串段地址在DS中,目的串段地址在ES中,不允许段超越。
即SI→DS DI→ES例:MOVSB ;字节传送:ES:[DI]←DS:[SI]。
传送完后,SI±1,DI±1。
9.I/O端口寻址:操作数在外设端口中。
⑴直接端口寻址:指令中直接给出的8位常数是外设端口地址。
(0~255)例:IN AL,34H;AL←[34H]OUT 34H,AL;[34H]←AL⑵间接端口寻址:指令中外设端口的16位地址在DX中。
例:MOV DX,280HIN AX,DX;AX←[280H]§2 指令系统目前在微机上常见的汇编语言是MASM(Macro Assembler Language 宏汇编语言),因此我们以8086/8088 MASM为主要介绍内容,也涉及一些MASM 5.0,MASM 6.0等版本内容。
OPR 指令助记符SRC 源操作数DEST 目的操作数零操作数在指令中隐含指明了操作数所处的地方。
一、传送类指令1.数据传送指令(MOVE)⑴格式:MOV DEST ,SRC (不区分大小写)⑵功能:可以进行字节数据传递,也可以进行字数据传送。
但SRC和DEST的长度必须一致,不能一个是字节数据,而另一个是字数据。
⑶举例:①CPU通用寄存器之间传递MOV CL,AL;8bitMOV SI,AX;16bit②通用寄存器与段寄存器之间传递。
MOV DS,AX;AX中16位→DSMOV AX,ES;ES→AX③通用寄存器与存储单元之间MOV AL,[BX];D S数据段(BX)所指存储单元内容→ALMOV [DI],AX;A X中16位数据→DS:(DI)(DI)+1MOV [2000H],CX;CX中16位→DS:(2000H)(2001H)④段寄存器和存储单元之间MOV DS,[2000H];DS:[2000H] [2001H]→DSMOV [BX][SI],CS;CS→DS:[BX]+(SI)(BX)+(SI)+1⑤立即数到通用寄存器。
MOV SP,2000H;2000H→SP⑥立即数到存储单元。
MOV WORD PTR[SI],4501H;4501H→DS:(SI)(SI)+1 *PTR汇编操作符与WORD一起表示字操作,因为4501H类型不确定。
BYTE PTR限定字节。
⑷说明:MOV指令数据传送方向如下图所示:①除源操作数SRC是立即数的情况外,MOV指令中DST和SRC必须要用到一个寄存器,不允许用MOV在两个存储单元之间传送数据。
若需要时,可借助一通用寄存器为桥梁,即:MOV AL,[SI]MOV [DI],AL②不能用CS和IP作目的操作数,即这两个数的内容不能随便改变。
③不允许在段寄存器之间直接传送数据。
④不允许用立即数作目的操作数。
⑤不能向段寄存器送立即数,因此,对段寄存器初始化赋值时,要通过通用寄存器。
MOV AX,DATAMOV DS,AX2.交换指令(Exchange)⑴格式:XCHG DST,SRC⑵功能:源操作数和目的操作数两者的内容相互交换。
⑶举例;XCHG BX,[BP] [SI]设指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,SRC物理地址=2F000+0200+0046=2F246则:(BX)=4154,(2F246H)=6F30H⑷说明:①两个操作数必须有一个在寄存器中。
即可以在寄存器之间或寄存器与存储器之间交换信息。
②不允许使用段寄存器。
③允许字或字节操作,且不影响标志位。
3.堆栈操作指令(PUSH/POP)堆栈是以“后进先出”的原则暂存一批需要保护的数据或地址的一个特定存储区。
堆栈段段地址由SS提供,偏移地址由SP提供,SP始终指向栈顶。
堆栈操作有压栈(PUSH)和出栈(POP)两种,均以字为单位。
●压栈过程:例PUSH AX①SP←SP-1②(SP)←AH③SP←SP-1④(SP)←AL●出栈过程:例POP BX①BL←(SP)②SP←SP+1③BH←(SP)④SP←SP+14.标志位传送指令。
对标志位寄存器进行操作有4条指令,都是零操作数。
⑴取标志寄存器指令(Load register AH from Flag)格式:LAHF功能:把标志寄存器的低8位传送给AH寄存器,即把SF,ZF,AF,PF和CF标志位分别送至AH的第7、6、4、2、0位,AH的第5、3、1位是任意的,指令对标志寄存器的各位无影响。
⑵存储标志寄存器(store register AH into Flag)格式:SAHF功能:把寄存器AH中的第7、6、4、2、0位的内容送至FR的SF、ZF、AF、PF、CF标志位,而FR的OF、DF、IF、TF各位不受影响。
⑶标志位进栈(Push Flag)格式:PUSHF功能:将FR压入堆栈。
该指令首先把堆栈指针SP减2,然后将16位标志寄存的全部内容送入SP指向的堆栈顶部字单元中。
FR中各标志位本身不受影响。
进栈步骤:SP←SP-1;(SP)←(FR)HSP←SP-1;(SP)←(FR)L※堆栈采用“后进先出”原则。
⑷标志位出栈(POP Flag)格式:POPF功能:将堆栈顶部的内容弹入标志寄存器。
该指令首先根据SP找到堆栈顶部,并将堆栈顶部的一个字的内容送入FR,然后SP加2。
FR中各标志位的状态,由从堆栈中弹出内容的相应位决定。
出栈步骤:(FR)L←(SP);SP←SP+1(FR)H←(SP);SP←SP+1;●PSHF和POPF一般用在子程序和中断处理程序的首尾,起保存和恢复主程序标志的作用。
●FR中CF、DF、IF有专门指令进行修改,其余标志位都没有指令对它们直接进行设置或修改。
若要修改这些位,可首先用LAHF把含SF的FR低8位送入AH,对AH相应位进行修改,然后用SAHF送回FR。
第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社
直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
第3章 8086的指令系统—3.1寻址方式
例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式
第03-1章. 80868088微处理器及其系统
3.1.1、8086/8088CPU的内部结构
执行单元( Execute Unit ) 总线接口单元 ( Bus Interface Unit )
8088的内部结构
AH BH CH DH AL BL CL DL SP BP SI DI
16位
地址 加法 器
∑
20位
通用 寄存器
CS DS SS ES IP 内部暂存器
PA的书写方式:
段地址:段内偏移
如:1121H : 2200H=11210+2200=13410H
已知CS=1055H,DS=250AH,ES=2EF0H, SS=8FF0H,DS段有一操作数,其偏移地址=0204H, 1)画出各段在内存中的分布 2)指出各段首地址 10550H CS 3)该操作数的物理地址=?
2.地址加法器和段寄存器
BIU中的地址加法器用来实现逻辑地址到物理地址的变换 8086采用了 “段加偏移”的技术。
15 0 15 0
逻辑地址
段基值
3 0
偏移量
0000
各段寄存器分别来存放确定各段的 起始地址的16位段地址信息
寻址单元的16位偏移地址
Σ
19 0
物理地址
物理地址
左移4位后的段寄存器的内容同时 送到地址加法器进行相加
CH DH CL DL
地址 加法 器
∑
20位
CS DS SS ES IP 内部暂存器
16位
输入/输出 控制电路 外 部 总 线
1 2
8位
3 4
把EU的操作结果存储 标志寄存器 到指定的M或I/O口。
执行部件 (EU)
指令队列
总线接口部件 (BIU)
微机原理和接口技术(第三版)课本习题答案解析
第二章 8086 体系结构与80x86CPU1.8086CPU 由哪两部份构成?它们的主要功能是什么?答:8086CPU 由两部份组成:指令执行部件<EU,Execution Unit>和总线接口部件<BIU,Bus Interface Unit>。
指令执行部件〔EU 主要由算术逻辑运算单元<ALU>、标志寄存器F R、通用寄存器组和E U 控制器等4个部件组成,其主要功能是执行指令。
总线接口部件<BIU>主要由地址加法器、专用寄存器组、指令队列和总线控制电路等4个部件组成,其主要功能是形成访问存储器的物理地址、访问存储器并取指令暂存到指令队列中等待执行,访问存储器或者I/O 端口读取操作数参加E U 运算或者存放运算结果等。
2.8086CPU 预取指令队列有什么好处? 8086CPU 内部的并行操作体现在哪里?答: 8086CPU 的预取指令队列由6个字节组成,按照8086CPU 的设计要求, 指令执行部件〔EU 在执行指令时,不是直接通过访问存储器取指令,而是从指令队列中取得指令代码,并分析执行它。
从速度上看,该指令队列是在C PU 内部,EU 从指令队列中获得指令的速度会远远超过直接从内存中读取指令。
8086CPU 内部的并行操作体现在指令执行的同时,待执行的指令也同时从内存中读取,并送到指令队列。
5.简述8086 系统中物理地址的形成过程。
8086 系统中的物理地址最多有多少个?逻辑地址呢?答: 8086 系统中的物理地址是由20 根地址总线形成的。
8086 系统采用分段并附以地址偏移量办法形成20 位的物理地址。
采用分段结构的存储器中,任何一个逻辑地址都由段基址和偏移地址两部份构成,都是16 位二进制数。
通过一个20 位的地址加法器将这两个地址相加形成物理地址。
具体做法是16 位的段基址左移4位<相当于在段基址最低位后添4个"0">,然后与偏移地址相加获得物理地址。
2_第3章 8086指令系统_加减运算指令比较指令52
3.4.2 算术运算指令
算术运算指令涉及两种类型数据,即无符号数和有符号数 对加法指令和减法指令而言,无符号和有符号数可采用同
一套指令,其先决条件有两个: 一是参加的操作数必须同为无符号数或同为有符号数 二是要采用不同标志位来检查无符号数和有符号数的 运算结果是否溢出
而乘除运算指令则需要区分无符号数和有符号数
11 11
ADC指令的使用价值
主要用于由于数据较大(多字节),需要多次运算的加法 运算中。 例:有两个4字节的无符号数相加:
2D568F8CH+3C9E489BH=? 设 被加数存放在BUF1开始的存储区内
加数存放在BUF2开始的存储区内 要求和放回BUF1存储区 假设CPU进行8位的加法运算,为此将进行4次加法运算
.386
……
MOVZX AX, A
MOVZX BX, B
ADD
AX, BX
MOVZX BX, C
ADD
AX, BX
MOV
SUM, AX
;取第一个数,扩展0传送 ;取第二个数 ;加第二个数 ;取第三个数 ;加第三个数 ;保存三个数的和
20 20
[例] P,Q,R均为8位有符号数,求它们的和,送入TOTAL
这个问题的另一种方法:
MOV AL, A
;取第一个数
MOV AH, 0
;高8位清零,准备存放和的高8位
ADD AL, B
;加第二个数
ADC AH, 0
;如果有进位,存入AH
ADD AL, C
;加第三个数
ADC AH, 0
;如果有进位,加入AH
MOV SUM, AX ;保存三个数的和
19 19
这个问题的第三种方法:
微机原理第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 则内存操作数的物理地址为:
第三章 8086的寻址方式和指令系统[3-4]
§3-3 8086的指令系统
3、循环控制指令(Iteration Control)
通常的循环控制
MOV CX, N ; N为循环次数 BEGIN: …. …. …. DEC CX JNZ BEGIN 用LOOP BEGIN替换
循环体
有了循环控制指令,上面程序简化为: MOV CX, N BEGIN: ……
单字节指令,总是被安排在中断服务程序的出口处。
任何中断服务程序不管是外部中断引起的,还是内部中断引起的 , 最后都要
用IRET返回。
举例:
主程序: CODE START: SEGMENT ASSUME CS:CODE, DS:CODE …… STI . . . ENDS END START 中断子程序: …… STI . . . CLI … STI IRET
微型计算机原理与接口技术
第 8讲 佘青山
86919130 qsshe@
There’s always more to learn, and there are always better ways to do what you’ve done
( 1 )无符号数比较测试指令中,指令助记符中的“ A”是英文 Above的缩写, 表示“高于”之意,“B”是英文Below的缩写,表示“低于”之意;
(2)带符号数比较测试指令中,指令助记符中的“G”(Great than)表示大于, “L”(Less than)表示小于。
12:16
17
§3-3 8086的指令系统
24
CODE
12:16
§3-3 8086的指令系统
6类指令系统:
数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令
微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统
4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存器 间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing) 位移量是一带符号的16位16进制数。当 使用BX或BP寄存器时,称基址寻址;使用SI 或DI寄存器时,称变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① JC ② JNC ③ JE/JZ ④ JNE/JNZ ⑤ JS ⑥ JNS ⑦ JO ⑧ JNO ⑨ JP/JPE ⑩ JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址
第三章 8086的寻址方式和指令系统
计算机的指令通常包含 操作码 和 操作数 两部分。
设SP为0100H,SS为1000H,则执行PUSH AX 后,
00FE H,SS= 1000 H。 8086系统中,栈底在堆栈的 最高地址 (最高地址端、 最低地址端)。
如果VAL为数据段中0056H单元的符号名,其中存放
16
习题 CH3 寻址方式和指令系统
(6)MOV [SI],[BX] 源、目的操作数不能同时为存储单元 (7)MOV DS,0200H 立即数不能直接送给段寄存器 (8)IN BL,05H BL不能作为IN指令的目的操作数 (9)MOV AX,IP IP不能作为操作数 (10)MOV SI,[DX] DX不能进行寄存器间接寻址 (11)PUSH AL PUSH指令以字为操作单位
用单条指令或程序片段,实现下述功能
(1)将AX高8位取反,低四位置1,其余位不变。
XOR AX, 0FF00H
OR AX, 0FH (2)将AL的高四位与低四位互换。 MOV CL, 4 ROL AL, CL
(3)将BX、AX内容互换。
XCHG AX, BX
12
习题 CH3 寻址方式和指令系统
[BP+SI+4]源操作数的有效地址为
地址为 数的有效地址为
,物理 0214H 24514H 。指令MOV AX,[DI+100H]源操作
0306H,物理地址
为 24306H 。 设AX=2000H,BX=2002H,则在执行了指令CMP AX,
BX后,标志位CF为
1 , AX=
。 2000H
基址变址寻址
(5)MOV AX,10[BX][DI] 相对基址变址寻址
微机原理第3章指令
第3章指令系统机器指令:能指示计算机完成基本操作的二进制代码指令系统:CPU可执行的机器指令的集合。
为了方便编程,人们又把完成特定操作的机器码用特定的符号表示,这就产生了符号表示的机器指令-------指令助记符。
第3章8086指令系统机器指令由二进制代码组成,一条指令包括操作码和操作数(或地址)两部分,操作码指明该指令进行何种操作,操作数用来说明操作对象。
个别指只有操作码没有操作数。
由于不同的指令所表达的信息不尽相同,因此指令的长度即机器码字节数也有长有短。
8086指令系统的指令是可变长指令(1~6个字节)3.18086CPU寻址方式重点是存储器寻址存放在存储器中的数据称为存储器操作数。
指令中需要确定存储单元的段地址、偏移地址(亦称有效地址EA),以及存储器操作数的类型。
段地址存放在段寄存器中,确定段地址实际上就是确定段寄存器,采用的方法是默认或添加段超越前缀。
生成存储器有效地址有多种方法,这些方法形成了对存储器操作数的多种寻址形式。
确定数据类型的方法是源操作数和目的操作数类型一致原则或附加类型说明。
立即寻址方式中操作数也在存储器中,但立即寻址中的立即数包含在指令中,随程序存放在代码段,CPU在取指令时就获得操作数。
这里所说的存储器操作数是存放在数据段、附加段或堆栈段中,取指令时也不会被立即取到。
段超越前缀变量的定义在第四章详细介绍直接寻址:MOV AX,[2000H];寄存器间接寻址:MOV ES:[DI],AH基址寻址:MOV BYTE PTR[BX+1200H],10变址寻址:MOV DL,[SI+2AH]基址加变址寻址:MOV CL,[BX+SI+5]MOV AX,[BP+DI]MOV CL,[BX+SI+5]的等价形式:MOV CL,5[BX][SI]、MOV CL,5[BX+SI]、MOV CL,[BX][SI+5]MOV CL,[BX+SI-5]等价于MOV CL,[BX+SI+65531] MOV CL,[BX-SI]MOV CL,[SI+DI]错误!MOV[BX+DI],1000H正确吗?3.2.1数据传送类指令传送指令把数据从一个位置传送到另一个位置使用MOV指令应注意1.立即数只能作为源操作数2.无存储器之间直接传送与交换的指令3.没有用立即数对段寄存器直接赋值的指令4.段寄存器之间无传送指令5.两个操作数的类型要一致6.要能确定是字节还是字操作mov ah,al mov bvar,ch mov ax,bx mov ds,ax mov al,[bx]下列MOV指令正确吗?MOV AL,050AHMOV SI,DLMOV[BX+SI],255MOV DS,100HMOV[BX],[SI]MOV[BX+SI],bvarbvar是一个已定义过的字节变量 MOV CS,[SI]将数据段中偏移地址为2000H、2001H、2002H的3个字节的存储单元置数FFH。
