第三章8086CPU指令系统

第三章8086CPU指令系统
第三章8086CPU指令系统

第三章 8086CPU指令系统

本章重点:

1.寻址方式:

立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。

2.8086指令系统:

数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控制指令,I/O指令,中断指令。

学习目标:

1.掌握寻址方式;

2.掌握常用指令的功能和用法。

难点:

区别指令的正确与错误。

§1.寻址方式

指令在存储器中是顺序存放的,而操作数的存放没有规律,因此操作数的寻址方法相对比较复杂。

一、指令的基本格式

1.组成:

一条指令包括操作码和操作数两部分。

操作数:源操作数,目标操作数。

2.寻址方式:

寻找指令中操作数的方法。

3.操作数类型:(8086系统)

寄存器操作数,存储器操作数,立即数(在指令代码中)和I/O端口操作数。

二、寻址方式

1.立即数寻址

⑴方式:

指令中所需的操作数直接包含在指令代码中(即由指令直接提供),立即数可以是8位,也可以是16位。

例:MOV AL,80H ;将十六进制数80H送入AL

MOV 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内容加1

ROL 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]←AX

MOV 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,280H

IN 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;8bit

MOV SI,AX;16bit

②通用寄存器与段寄存器之间传递。

MOV DS,AX;AX中16位→DS

MOV AX,ES;ES→AX

③通用寄存器与存储单元之间

MOV AL,[BX];D S数据段(BX)所指存储单元内容→AL

MOV [DI],AX;A X中16位数据→DS:(DI)(DI)+1

MOV [2000H],CX;CX中16位→DS:(2000H)(2001H)

④段寄存器和存储单元之间

MOV DS,[2000H];DS:[2000H] [2001H]→DS

MOV [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,DATA

MOV DS,AX

2.交换指令(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+1

4.标志位传送指令。

对标志位寄存器进行操作有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)H

SP←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。

●对TF位修改可先用PSHF将FR压入堆栈,在堆栈中设置TF,然后用

POPF返回。

5.地址传送指令。

该指令传送的是存储单元的地址,而不是它的内容。

⑴装入有效地址(Load effective address):

①格式:LEA DST,SRC

②功能:将源操作数的有效地址(即偏移量EA)送到指定的寄存器。

③举例:

LEA BX,0F62H [BX][SI]

若指令执行前:(BX)=0400H,(SI)=003CH

则指令执行后:(BX)=0400+003C+0F62=139EH

④说明:目的操作数一定是16位的通用寄存器;此指令对FR各位无影响。

▲存放一个存储单元逻辑地址的地址指针需要4个byte,其中高16位(两个高字节)用来存放基址,低16位(两个低字节)用来存放偏移量。

⑵LDS(Load DS with Pointer)指针送寄存器和DS:

①格式:LDS DST,SRC

②功能:把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。

③举例:

LDS SI ,[10H]

若指令执行前:(DS)=C000H,(C0010H)=0180H,(C0012H)=2000H,则指令执行后:(SI)=0180H,(DS)=2000H

⑶LES(Load ES With Pointer)指针送寄存器和ES

①格式:LES DST,SRC

②功能:把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI。

二、算术运算类指令。

1.加法指令(Addition)

⑴格式:ADD DEST ,SRC

⑵功能:目的操作数和源操作数相加,它们的和存放在目的操作数中,源操作数内容不变,即,DST←(DST)+(SRC)

⑶说明:

●DST:通用寄存器,存储器

●SRC:通用寄存器,存储器,立即数

●FR:影响CF、DF、AF、ZF、SF、OF

●两操作数不能同时为存储器操作数。

●参加运算的数可以是带符号数或无符号数。OF位用来表示带符号数的

溢出,CF位用来表示无符号数的溢出。

⑷例:

ADD AX,BX

ADD AL,CL

ADD CX,34

ADD DL,DA_BYTE

2.带进位加法指令。

格式:ADC DST ,SRC

功能:DST←(DST)+(SRC)+CF

用于双精度加法,即低16位向高16位有进位的情况,其余同ADD指令。3.加“1”指令(Increment)

⑴格式:INC DST

⑵功能:DST←(DST)+1

⑶说明:

●操作数可以是8位或16位通用寄存器或存储单元,但不能是立即数。

●FR:影响PF、AF、ZF、SF、OF;不影响CF

●这条指令一般用在循环程序中修改指针和循环次数(即用于计数器)。4.减法指令

⑴格式:SUB DST ,SRC

⑵功能;DST←(DST)-(SRC)

⑶说明:

●DST:通用寄存器,存储器

●SRC:通用寄存器,存储器,立即数

●FR:影响CF、DF、AF、ZF、SF、OF

●两操作数不能同时为存储器操作数。

●参加运算的数可以是带符号数或无符号数。OF位用来表示带符号数的

溢出,CF位用来表示无符号数的溢出。

⑷例:SUB BX,CX ;BX←(BX)-(CX)

5.带借位减法

⑴格式:SBB DST,SRC

⑵功能:DST←(DST)-(SRC)-CF

⑶说明:同SUB指令。

6.减“1”指令

⑴格式:DEC DST

⑵功能:DST←(DST)-1

⑶说明:

●操作数可以是8位或16位通用寄存器或存储单元,但不能是立即数。

●FR:影响PF、AF、ZF、SF、OF;不影响CF。

●这条指令一般用在循环程序中修改指针和循环次数。

7.求负数指令(Negative)

⑴格式:NEG DST

⑵功能:DST←0-(DST)

⑶说明:也称取补指令。

●影响:CF,PF,AF,ZF,SF,OF

8.乘法指令

⑴无符号数乘法指令:MUL SRC

功能:AX←AL*(SRC)(字节乘法)

DXAX←AX*(SRC)(字乘法)

说明:

●操作数可以是通用寄存器、存储器,不能是立即数。

●字节乘:若乘积高8位AH≠0,则CF=1,OF=1;

若乘积高8位AH=0,则CF=0,OF=0。

●字乘:若乘积高16位DX≠0,则CF=1,OF=1;

若乘积高16位DX=0,则CF=0,OF=0。

●例:MUL BX ;DXAX←AX*BX

MUL BYTE PTR [SI];AX←AL*(DS:[SI])

⑵带符号数乘法指令:IMUL SRC

功能:同MUL指令

说明:同MUL指令,但若乘法结果AH或DX(高位部分)只是低(8或16)位部分的符号扩展,则OF=0,CF=0。

9.除法指令

⑴无符号数除法指令:DIV SRC

功能:AL←AX/(SRC),余数在AH中,(字节除)

AX←DXAX/(SRC),余数在DX中(字除)

说明:若商超过AL(字节除)或AX(字除)的范围(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。其他与乘法指令同。对FR无定义。

⑵带符号数除法指令:IDIV SRC

功能:同上

说明:余数符号和被除数符号相同。

三、位操作类指令。

1.逻辑运算指令。

⑴格式:逻辑“与”:AND DST,SRC

逻辑“或”:OR DST,SRC

逻辑“异或”:XOR DST,SRC

逻辑“非”:NOT DST

⑵功能:对字节或字进行逻辑运算。主要用于字节或字中某些位的组合,分离或位设置。例:

AND AL,0FH;分离AL低4位

AND AL,F0H;分离AL高4位

OR AL,04H;AL第4位置“1”

⑶说明:

●SRC可以是寄存器,存储器或立即数。而DST只能是通用寄存器或存

储器。且二者不能同为存储器。

●运算结果均送回目的操作数。

●FR:NOT指令对FR各位无影响;其它三条指令影响相同,SF、ZF、

PF,另外,CF和OF总是置“0”,AF不确定。

2.测试指令(TEST)

格式:TEST DST,SRC

功能:与AND指令相同,但运算结果不送回DST,只根据运算结果设置FR。该指令主要用来测试一个操作数的某一位或某几位的状态。

●通常将被测试数置于DST,测试用的位模式置于SRC。

例:TEST AL,01H ;测试AL最低位是否为“1”

若AL最低位为“0”,则ZF=1;

若AL最低位为“1,则ZF=0;

3.移位/循环,移位指令

⑴算术左移SAL DST,COUNT

逻辑左移SHL DST,COUNT

←0

SAL指令相当于乘以2n,n为左移位数。

说明:

COUNT为移位次数,可以是1,若COUNT大于1时,必须放在CL 中,移位结束后,CL

值不变。因此移位位数可以是0~255,一般选0~16即可。

⑵算术右移SAR DST,COUNT

功能:

●等效于除以2n,n为右移次数。

⑶逻辑右移SHR dst,count

功能:0

⑷循环左移ROL dst ,count

功能:

⑸循环右移ROR dst, count

⑹带进位循环左移RCL dst, count

⑺带进位循环右移RCT dst count

功能:

△说明:

●每条指令只需一个操作数,可以是字或字节,也可以是寄存器或存储器

操作数。

●影响AF以外的各标志位,而AF不定;当Count= 1时,OF才有意义,

当移位前操作数的最高两位相同时,移位后OF=0;当最高两位不同时,

OF=1。

四、串操作指令

串操作指令中源操作数地址由DS:[SI]提供,目的串操作数地址由ES:[DI]提供。每条串操作数指令每次仅对串中一个字或一个字节单元进行查找,且根据DF标志自动修改SI/DI。

为了便于对串中多个字或字节单元进行串操作,指令系统设置有重复前缀,重复次数由CX中的内容确定,每执行一次,CX内容减1,而对CX的检测是在执行指令前进行的,最多64K。

1.重复前缀(Repeat)

⑴REP

功能:若CX≠0,重复执行后缀的串指令,CX←CX-1

若CX=0,重复执行结束。

例:REP MOVSB

⑵REPE/REPZ 当相等/为零时重复串操作。

功能:若CX≠0,且ZF=1,重复执行后缀的串指令,CX←CX- 1

若CX=0,或ZF=0,重复停止。

⑶REPNE/REPNZ 当不相等/不为零时重复串操作。

功能:若CX≠0,且ZF=0,重复执行后缀的串指令,CX←CX- 1

若CX=0或ZF=1,重复停止。

△说明;

●LODS、STOS、MOVS不影响FR,所以使用REP。

●CMPS、SCAS,结果要反映在FR上,所以常使用REPE/REPZ和

REPNE/REPNZ。

2.串传送:不影响FR

⑴MOVSB

功能:ES:[DI]←DS:[SI],DI←DI±1,SI←SI±1

⑵MOVSW

功能:ES:[DI]←DS:[SI],但DI←DI±2,SI←SI±2

3.串取出:不影响FR

⑴LODSB

功能:AL←DS:[SI],SI←SI±1

⑵LODSW

功能:AX←DS:[SI],SI←SI±2

4.串存入:不影响FR

⑴STOSB

功能:ES:[DI]←AL,DI←DI±1

⑵STOSW

功能:ES:[DI]←AX,DI←DI±2

5.串比较:

比较方法:将源串中的一个字或字节减去目的串中的一个字或字节,不保留相减结果,但在FR中反映。

⑴CMPSB

功能:DS:[SI]——ES:[DI]

⑵CMPSW

功能:同上,按字比较。

6.串搜索:

在目的串中查找AX或AL指定的内容。查找方法是用AX或AL的内容减去目的串中一个字或一个字节,相减结果反映在FR中。

⑴SCASB

⑵SCASW

五、循环和转移指令

1.转移指令

转移指令分为:无条件转移指令和条件转移指令

⑴无条件转移指令

格式:JMP DST

功能:使程序无条件的转移到“目标”处,“目标”通常用标号来表达。

例:JMP TARGET

TARGET:……

说明:JMP指令不影响FR。段内转移:只改变IP指针的内容,有直接寻址

和间接寻址两种;段间转移:CS、IP都改变,也分直接寻址和间接寻址两种。

①段内转移:只改IP,CS不变。

I.段内转移直接寻址:格式同上,DST只需使用符号地址。

●短转:IP←IP+8bit位移

如:JMP SHORT DST

●近转:IP←IP+16bit位移

如:JMP NEAR PTR DST

II.段内转移间接寻址:目标地址在某一个通用寄存器或某一字存储单元中。

例:JMP CX 或JMP WORD PTR[BX] 即DS:[BX]→IP

②段间转移:CS,IP都要修改

标”地址在指令中直接给出。

例:JMP FAR PTR TARGET

即TARGET所对应物理地址应为

20250H

II.段间转移间接寻址:目标地址在

一个做地址指针的双字单元中。地址指针的前2个byte存放偏移量(IP),后2个byte存放目标的段基址(CS)。

例:JMP DWORD PTR ADDR[BX]

JMP DWORD PTR [BX][SI]

⑵条件转移指令:8086共有18条

格式:JXX DST

①简单条件转移指令:10条

功能:根据单个条件(状态)标志的设置情况转移。一般适用于测试某一次运算的结果并根据其不同特征产生程序分支作不同处理的情况。

②无符号数条件转移指令:4条

功能:在条件转移指令前使用比较指令(CMP),比较两个无符号的数(A ——B),并根据比较的结果转移。

说明:

A:ABOVE 高于,B:BELOW低于,E:EQUAL 等于

③带符号数条件转移指令:4条

功能:在条件转移指令前使用比较指令(CMP),比较两个带符号数,并根据比较的结果转移。

说明:

G:Greater 大于,L:Less 小于

⑶比较指令

格式:CMP DST,SRC

功能:减法类型指令。(DST)-(SRC),其结果不送回(DST),仅根据结果设置FR。

说明:

ZF=1时,表示(DST)=(SRC)

无符号数:CF=0,表示(DST)≥(SRC);

CF=1,表示(DST)<(SRC)

有符号数:OF=SF,表示(DST)>(SRC);

OF≠SF,表示(DST)<(SRC)

2.循环指令:4条

特点:都是段内短距离相对转移指令,转移范围在-128~+127(8bit)之间;都隐含使用CX寄存器作为循环次数计数器,都需要把循环次数送给CX;执行后对FR均无影响。

⑴LOOP指令

格式:LOOP DST

功能:CX←CX-1,若CX≠0则转移到目标地址;若CX=0则顺序执行。

例:有一个首地址为ARRAY的M个字的数组,试编一程序,求出该数组的内容之和(不考虑溢出),并把结果存入TOTAL中。

MOV CX,M

MOV AX,0

MOV SI,AX START-LOOP:ADD AX,ARRAY[SI] ADD SI,2

LOOP START-LOOP MOV TOTAL,AX

⑵LOOPE/LOOPZ指令

格式:LOOPE DST 或LOOPZ DST

功能:CX←CX-1

若CX≠0,且ZF=1,则转移到目标地址;否则顺序执行。

⑶LOOPNE/LOONZ指令

格式:LOOPNE DST 或LOOPNZ DST

功能:CX←CX-1

若CX≠0,且ZF=0,则转移到目标地址;否则顺序执行。

△LOOPZ、LOOPNZ指令提供了提前结束循环的可能性。譬如,有时需要在字符串中查找一个字符,找到后可提前结束循环而不需要一查到底。

例:NEXT:……

……

CMP AL,ASCⅡSTR[SI]

LOOPNE NEXT

……

⑷JCXZ 指令 格式:JCXZ DST

功能:若CX=0,则转移到目标地址;否则顺序执行。 六、 子程序的调用和返回指令

● ● 断点:子程序调用指令的下一条指令的首字节地址。 1.子程序调用指令 格式:CALL 过程名

功能:先保护程序断点 段内调用:当前IP 内容压栈保护。

CS 压栈,再把IP 内容压栈保护。

然后无条件转移到目标地址。 2.返回指令

格式:RET 或RET n

功能:执行与CALL 相反的操作,从子程序返回主程序。 若指令不带操作数 段内返回:IP ←SP SP ←SP+2

段间返回:IP ←SP ,SP ←SP+2;CS ←SP ,SP ←SP+2

若带立即操作数,上述功能完成后,再次修改SP 的值,即:SP ←SP+n ,n 为偶数。

七、 输入输出指令 1.输入指令

格式:IN OPRN1,OPRN2

说明:OPRN1是AL 或AX ;OPRN2是端口地址。若采用直接寻址,OPRN2可以是立即数形式,端口地址在0~255(8位)之间;间接寻址时,需要用DX 寄存器存放16位端口地址,地址范围在0~65535之间。 2.输出指令

格式:OUT OPRN1,OPRN2

说明;OPRN1为端口地址;OPRN2为累加器AL 或AX 。端口地址的确定方法同站上。

无影响对间接寻址(间接调用)

直接寻址(直接调用)

段间调用与返回段内调用与返回类型FR

?????

第三章指令系统

第5章指令系统 一、判断题 (×)1.执行指令时,指令在内存中的地址存放在指令寄存器中。 (√)2.程序计数器PC用来指示从内存中取指令。 (√)3.同一系列的不同型号的计算机,保持软件向上兼容的特点。 (√)4.在计算机的指令系统中,真正必须的指令数是不多的,其余的指令都是为了提高机器速度和便于编程而引入的。 (×)5.RISC的主要目标是减少指令数,因此允许以增加每条指令的功能的办法来减少指令系统所包含的指令数。 二、选择题 1.在计算机的指令系统中采用不同的寻址方式的主要目的是 C 。 A.实现程序控制和快速查找存储器地址 B.可以直接访问主存和外存 C.缩短指令长度,扩大寻址空间,提高编程的灵活性 D.降低指令的译码难度 2.单操作数指令的操作数由 B 提供。 A.指定寄存器或由操作码指定存储单元 B.由地址码指定的存储单元;如果已标明该存储单元的内容为地址,则由该地址所指定的存储单元 C.由操作码直接指定数据 D.由操作码直接指定的存储单元 3.在多地址指令中,算术运算结果不会存储在 A 中。 A.累加器B.第一地址码所指定的存储空间 C.第二地址码所指定的存储空间D.第三地址码所指定的存储空间 4.把存储单元A的内容传送到存储单元B的指令执行后,存储单元A的内容为 B 。A.空白或零,视机器而定B.与存储单元B的内容相同 C.二进制补码D.存储单元A的内容与存储单元B的内容之差 三、填空题 1.指令操作码通常有两种编码格式:固定格式和可变格式。 2.在当前的计算机中,指令的执行方式有3种,就是顺序执行方式,重叠执行方式和流水线方式。 3.数据传送类指令实现的功能是传送数据,它往往是在主存储器和寄存器之间,或寄存器和寄存器之间传送数据。 4.所谓堆栈,是主存中专门用来存放数据的一个特定的区域,它具有先进后出的性质。 5.Intel 8086/8088的字符串操作指令用来处理存放在存储器中的一串字符或数据。6.内存地址寄存器用来指示从内存中取数据。 7.浮点运算指令对于用于科学计算的计算机是很必要的,可以提高机器的运算速度。四、名词解释 1.计算机指令系统:是指一台计算机上全部指令的集合,也称为计算机的指令集。 2.固定格式:操作码的长度是固定的,集中放在指令字的某一个字段中。 3.可变格式:操作码的长度可变,且分散地放在指令字的不同字段中。 4.寻址:就是寻找操作数的地址,最终目的是寻找所需的操作数。 五、简答题

第三章 MCS-51指令系统习题答案

第三章 MCS -51指令系统 5 题 分析下面程序段的执行功能。 CLR A MOV R2, A MOV R7, #4 LOOP: CLR C MOV A, R0 RLC A MOV R0, A MOV A, R1 RLC A MOV R1, A MOV A, R2 RLC A MOV R2, A DJNZ R7, LO OP SJMP $ 答:将R2:R1:R0所表示的24位二进制数左移4位。(相当×16) 6 题 设系统晶振为12MHZ ,阅读下列程序,分析其功能。 START : SETB P1.0 NEXT: MOV 30H, #10 LOOP2: MOV 31H, #0FAH LOOP1: NOP NOP DJNZ 31H, LOOP1 DJNZ 30H, LOOP2 CPL P1.0 AJMP NEXT SJMP $ 答:((2+1+1)*250+2+2)*10+2=10.042(ms) 在P1.0引脚上输出周期为20ms 的方波。 7 题 阅读下列程序,分析其功能。 MOV R7, #10 MOV A, #30H MOV DPTR, #2000H LOOP : MOVX @DPTR, A INC A INC DPL DJNZ R7, LOOP SJMP $ R2 R1 R0 0 0 0 0

答:在外部数据存储器中的以下地址内存放数据: (2000H)=30H (2001H)=31H (2002H)=32H ┇┇ (2009H)=39H 8 题简述下列程序段完成的功能,程序完成后SP指针应指向哪里? MOV SP, #2FH MOV DPTR, #2000H MOV R7, #50H NEXT: MOVX A, @DPTR PUSH A INC DPL DJNZ R7, NEXT SJMP $ 答:以内部存储器地址30H作为栈底,从30H开始一直到7FH依次存放外部数据存储器中2000H一直到204FH地址中的数据。7FH作为栈顶。程序完成后SP=7FH。 9 题分析下列程序段执行结果,程序执行完后,SP指向哪里? MOV SP, #3FH MOV R0, #40H MOV R7, #10H NEXT: POP A MOV @R0, A DEC R0 DJNZ R7, NEXT SJMP $ 答:将栈中3FH,3EH一直到30H地址中的内容依次放入40H,3FH,…,31H单元中。执行完后SP=2FH。 10 题分析下列程序段执行结果。 XCH A, 30H MOV B, A ANL A, #0FH MOV 33H, A MOV A, B SW AP A ANL A, #15 MOV 34H, A SJMP $ 答:将30H单元中的数的高四位放入34H中,低四位放入33H中。

(完整版)第三章指令系统

第三章指令系统习题参考答案(三) 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系列单片机的一个重要特征,在物理结构

第三章 80868088的指令系统

3.1 指令的基本格式   一、指令构成 微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。每种指令又由两个字段(Field)构成: l.操作码(OP-Code)字段 该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。 2.操作数(Oprand)字段 该字段则是指出指令执行的操作所需的操作数。在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。 指令的基本格式如下:   二、8086   8086的指令长度可在1~6字节的范围,如图3-1所示。其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。   (1)B1字节各字段定义如下: OP--指令操作码。 D--表示方向。D=1寄存器为目的,D=0寄存器为源。 W--表示字节或字处理方式。W=0为字节指令,W=1为字指令。

(2)B2字节各字段定义如下: MOD--给出指令的寻址方式。8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量; MOD01,只有低8位位移量,需将符号扩展8位,形成16位; MOD=10有16位位移量。当MOD=1l时,为寄存器方式,两个操作数均为寄存器。 REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。 R/M--R/M受MOD制约。当 MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。MOD和R /M字段表示的有效地址 EA计算方法如表3-1所示,共2 4种。   (3) B3~B6字节这四个字节一般是给出存储器操作数地址的位移量(即偏移量)和/或立即操作数。位移量可为8位,也可为16位,这由MOD来决定。8086规定16位的字位移量的低位字节放于低地址单元,高位字节放于高地址单元。 若指令中只有8位位移量, 8086在计算有效地址时,自动用符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。指令中的立即操作数位于位移量的后面。若B3,B4有位移量,立即操作数就位于B5,B6。若指令中无位移量,立即操作数就位于B3,B4字节。总之,指令中缺少的项将由后面存在的项向前顶替,以减少指令长度。 3.2 8086的寻址方式   8086的操作数可隐含在操作码中,也可以是操作数字段中的操作数本身,还可以是存放操作数的地址,如寄存器,I/0端口及存储器。对存储器,给出的或是存储器地址,或是产生存储器地址的信息。从表3

第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)→A MOV R0,A ;寄存器寻址(A)→R0 MOV P1,#0F0H ;立即数寻址0F0→P1

MOV @R0,30H ;直接寻址(30H)→(R0) MOV DPTR,#3848H ;立即数寻址3848H→DPTR MOV 40H,38H ;直接寻址(38H)→40H MOV R0,30H ;直接寻址(30H)→R0 MOV P0,R0 ;寄存器寻址(R0 )→P0 MOV 18H,#30H ;立即数寻址30H→18H MOV A,@R0 ;寄存器间接寻址((R0)) →A MOV 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,指出下列指令的本质区别。 8,MOV A,DATA ;直接寻址2字节1周期 MOV A,#DATA ;立即数寻址2字节1周期 MOV DATA1,DATA2 ;直接寻址3字节2周期 MOV 74H,#78H ;立即数寻址3字节2周期 如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A 9,设R0内容为32H, A的内容为48H, 片内RAM的32H单元内容为80H, 40H单元内容为08H, 请指出在执行下列程序段后上述各单元内容的变化。 9、 MOV A,@R0 ;((R0))=80H→A MOV @R0,40H ;(40H)=08H→(R0) MOV 40H,A ;(A)=80→40H MOV R0,#35H ;35H→R0 最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H 10,如何访问SFR,可使用哪些寻址方式? 10、用直接寻址,位寻址,寄存器寻址 11,如何访问片外RAM,可使用哪些寻址方式? 11、只能采用寄存器间接寻址(用MOVX指令) 12,如何访问片内RAM,可使用哪些寻址方式? 12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7) 高128字节:直接寻址,位寻址,寄存器寻址 13,如何访问片内外程序存储器,可使用哪些寻址方式? 13、采用变址寻址(用MOVC指令)

第三章计算机硬件体系结构报告

第三章计算机硬件体系结构 一、填空题 1.地址总线的位数决定了计算机的能力,数据总线的宽度决定了计算机的。2.计算机的运算速度用每秒钟所能执行的______数表示,单位是______。 3.按照总线上传送信息类型的不同,可将总线分为___________、___________、__________三种。 4.在计算机中通常以___________作为单位传送信息的。 5.指令一般包括___________和___________两部分。 6.若一台微机的地址总线位长为32位,则其最大寻址空间为___________。 7.CPU包括________、__________和_______________三个基本部分。 8. 光盘按读写性能可分为___________、___________、__________三种。 二、单项选择题 1. 一个完整的微型计算机硬件系统应由____、存储器、输入设备和输出设备构成。 A. 硬盘 B. ROM和RAM C. CPU D. 显示器 2. 计算机中指令的执行主要由___完成的。 A. 存储器 B. 控制器 C. CPU D. 总线 3. 微型计算机的CPU主要由两部分构成,它们是____。 A. 内存和控制器 B. 内存和外存 C. 运算器和控制器 D. 外存和运算器 4. 磁盘经过高级格式化后,其表面形成多个不同半径的同心圆,这些同心圆称为____。 A. 磁道 B. 扇区 C. 族 D. 磁面 5. 下面有关计算机的叙述中,是正确的。 A. 计算机的主机包括CPU、内存储器和硬盘三部分 B. 计算机程序必须装载到内存中才能执行 C. 计算机必须具有硬盘才能工作 D. 计算机键盘上字母键的排列方式是随机的 6. 计算机的内存储器比辅助存储器_______。 A. 存储更多信息,但存取速度慢 B. 可以存储的信息少,但存取速度快 C. 存储更多信息,且存取速度快 D. 可以存储的信息少,且存取速度慢 7. 计算机的输入输出设备中,处理速度最快的是_____。 A. 软盘 B. 键盘 C. 打印机 D. 硬盘 8. 在计算机中指令主要存放在中。 A. CPU B. 内存 C. 键盘 D. 磁盘 9. 下列有关存储器读写速度的排列,正确的是。 A. RAM>Cache>硬盘>软盘 B. Cache>RAM>硬盘>软盘 C. Cache>硬盘>RAM>软盘 D. RAM>硬盘>软盘>Cache 10. CPU中的可存放少量数据。 A. 存储器 B. 辅助存储器 C. 寄存器 D. 只读存储器

第三章 80868088的指令系统

3.1 指令的基本格式 一、指令构成 微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。每种指令又由两个字段(Field)构成: l.操作码(OP-Code)字段 该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。 2.操作数(Oprand)字段 该字段则是指出指令执行的操作所需的操作数。在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。 指令的基本格式如下: 二、8086 8086的指令长度可在1~6字节的范围,如图3-1所示。其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。 表3-1 8086指令格式 (1)B1字节各字段定义如下: OP--指令操作码。 D--表示方向。D=1寄存器为目的,D=0寄存器为源。 W--表示字节或字处理方式。W=0为字节指令,W=1为字指令。 (2)B2字节各字段定义如下: MOD--给出指令的寻址方式。8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量;MOD01,只有低8位位移量,需将符号扩展8位,形成16位;MOD=10有16位位移量。当MOD=1l时,为寄存器方式,两个操作数均为寄存器。 REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。

第三章指令系统及寻址方式

第三章指令系统及寻址方式 一、教学内容 1.指令格式 2.指令寻址方式 3.指令系统 二、要求掌握指令的书写格式、指令的寻址方式和每一条指令的作用。 三、重点掌握指令的寻址方式和每一条指令的功能作用。 四、难点在于理解和掌握指令的寻址方式,怎样找到操作数所在存储单元的存放地址以及运用指令编程的技巧等。 五、本章分为4讲,每讲2学时。 第一讲指令寻址方式 1.指令的书写格式 指令有两种书写格式: ?机器指令:由一串二进制数描述 ?符号指令:用英文字母缩写词描述。符号指令的书写格式如下: 标号:操作助记符 [目的操作数][,源操作数];注释 几点说明: 1)标号—表示某一条指令所在存储单元的首址。标号应由字母打头,后跟字母、数字及特殊字符均可,但不能用关键字。 标号的用法: ①标号一般放在子程序(子过程)的第一条指令的开头; ②标号一般放在转移指令要转去的目的地的第一条指令的开头。 ③标号一般放在其他符号定义的前面。 2)指令助记符(操作助记符):MOV;ADD;SUB;END。 3)操作数—有源操作数和目的操作数,他们之间用“,” 分隔。操作数也可有可无。 2.数据寻址方式 一般在指令中包含有操作码和操作数,怎样找到指令中的操作数和操作数所在的地址,这就是寻址方式。

1)立即寻址 操作数直接包含在代码段的指令中。 如: MOV EAX,H MOV BX,6688H MOV AX,1234H ?立即数只能作为源操作数 ?立即寻址主要用来给通用寄存器或存储器赋值 ?不允许给段寄存器直接赋值 2)寄存器寻址 操作数在寄存器中。 32位寄存器:EAX、EBX、ECX、EDX、 ESP、EBP、 ESI、EDI 16位寄存器:AX、BX、CX、DX、SP、BP、SI、 DI、CS、DS、SS、ES、FS、GS 8 位寄存器:AH、AL、BH、BL、 CH、CL、DH、DL 如: MOV AX,BX MOV EDI,ESI MOV AL,CL 3)存储器寻址 操作数在存储器中,其地址由指令以某种方式指出。 ① 16位指令模式下的存储器寻址 16位指令模式寻址结构由4部分组成:段基址×10H+基址+变址+偏移量基址:BX、BP ,变址:SI、DI ,偏移量:8位或16位 如果有效地址在BX,SI或DI中,则以DS寄存器内容为段基址; 如果有效地址在BP中,则以SS段寄存器的内容为段基址。 如果使用段超越(CS:ES:DS:SS:),前缀操作数可以放在冒号前指定的段。例如:MOV ES:[DI],AL MOV ES:2000H, AL

相关文档
最新文档