当前位置:文档之家› 8086CPU指令系统

8086CPU指令系统

8086CPU指令系统
8086CPU指令系统

第三章8086CPU指令系统

内容提要:

1.寻址方式:

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

2.8086指令系统:

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

学习目标:

1.掌握寻址方式;

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

难点:

区别指令的正确与错误。

学时:14

作业:

一、问答题

1、现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21023H)=65H,下列指令执行后填入AX寄存器的内容:

(1)MOV AX,1200H;(AX)=

(2)MOV AX,BX;(AX)=

(3)MOV AX,[1200H];(AX)=

(4)MOV AX,[BX];(AX)=

(1)MOV AX,1100[BX];(AX)=

(2)MOV AX,[BX][SI];(AX)=

(3)MOV AX,1100[BX][SI];(AX)=

2、执行下列指令序列后,完成的功能是将(DX,AX)的值。

MOV CL,04

SHL DX,CL

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL

二、填空题

1、执行下列指令序列后,完成的功能是将(DX,AX)的值。

MOV CX,4

NEXT: SHR DX,1

RCR AX,1

LOOP NEXT

2、下列指令执行后,BX= 。

MOV CL,3

MOV BX,4DABH

ROL BX,1

ROR BX,CL

三、选择题

1、下列程序:

NEXT:MOV AL,[SI]

MOV ES:[DI],AL

INC SI

INC DI

LOOP NEXT

可用指令来完成该功能。

A)REP LODSB B)REP STOSB C)REPE SCASB D)REP MOVSB

2、设(AL)=-68,(BL)=86,执行SUB AL,BL指令后,正确的结果是。

A)CF=1 B)SF=1 C)OF=1 D)ZF=1

3、设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令“PUSH AX”后,(SP)= (1);再执行指令:

PUSH BX

POP AX

后,(SP)= (2),(AX)= (3),(BX)= (4)。

4、设(AL)=-68,(BL)=86,执行SUB AL,BL指令后,正确的结果是。

A)SF=1 B)ZF=0

C)CF=1 D)OF=1

5、假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSH AX后, =12H

A)20014 B)20011H C)20010H D)2000FH

6、若要检查BX寄存器中的D12位是否为1,应该用指令。

A)OR BX,1000H B)TEST BX,1000H

JNZ NO JNZ YES

C) XOR BX,1000H D)AND BX,1000H

JZ YES JNZ YES

7、用BP作基址变址寻址时,操作数所在的段是当前。

A)数据段 B)代码段 C)堆栈段 D)附加段

8、执行下列指令后:

MOV AX,1234H

MOV CL,4

ROL AX,CL

DEC AX

MOV CX,4

MUL CX

HLT

(AX)=

A)8D00H B)9260H C)8CAOH D)0123H

四、判断题

1、MOV AX,[BP]的源操作数的物理地址为16×(DS)+(BP)。()

2、判断下列指令是否正确,若错误,请指出原因。

(1)CMP [CX],BYTE PTR STR+1

(2)MOV DI,OFFSET [BX][SI]

(3)LEA DI,[BX][SI]

(4)PUSH AL

(5)SHL AX,3

(6)MOV AX,TAB2-TAB1+100

(7)OUT CX,AL

(8)DIV 25

(9)MOV CX,BX

(10)POP CS

(11)PUSH WORD PTR 20[BX+SI-2]

(12)LEA BX,4[BX]

(13)MOV BYTE PTR [BX],1000

(14)MOV AX,[SI][DI]

(15)MOV SA VE_WORD,DS

(16)MOV AX,ARRAY1+ARRAY2

(17)MOV WORD_OP1,WORD_OP1-WORD_OP2

(18)MOV SP,SS:DA TA_WORD[BX][SI]

(19)MOV AH,BX

(20)MUL AX,BX

(21)LEA DS,35[DI]

(22)MOV STR[BX][SI],ES:AX

(23)MOV [BX][BP],AX

(24)ADD AX,ACH

一、8086指令的一般格式

概述

指令:是计算机用以控制各部件协调动作的命令;

指令系统:CPU可执行的指令的集合;

机器指令:是CPU仅能识别的指令的二进制代码,也称机器码;

指令格式:由操作码和操作数两部分组成,有些指令无操作数。操作码规定了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。

指令可分为无操作数指令、单操作数指令、双操作数指令。

例:HLT 无操作数

DAA约定或隐含操作数

INC AL 单操作数

MOV AL,BL 双操作数,其中逗号前的操作数AL为目的操作数,逗号后的操作数BL为源操作数。

操作数类型有三种:立即数:出现在指令中的常数;

寄存器操作数:操作数在寄存器中;

存储器操作数:操作数在存储器中。

二、8086寻址方式

是指CPU在执行指令时寻找操作数或操作数地址的方式。

1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在

指令操作码之后的存储单元中。

例:MOV AL,50H

2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以

是目的操作数。

例:MOV AL,BL

以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节

(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUF DB 10H,20H。

3. 存储器寻址

(1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。

例:MOV AL,[1000H] 约定由DS提供段地址

MOV AL,CS:[1000H] ;段超越,由CS提供段地址

MOV AL,SS:[1000H] ;段超越,由SS提供段地址

(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用

于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、

DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。

例:MOV AX,[SI] ;AX←DS:[SI]

MOV [BX],AX ;DS:[BX]←AX

(3)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。

例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH]

MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX

(4)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS中,允许段超越。

例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX

MOV BX,SS:[DI+45H] ;BX←SS:[DI+45H]

(5)基址变址寻址:操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器

决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,

允许段超越。

例:MOV BX,[DI+BP+45H] ;BX←SS:[DI+BP+45H]

MOV AX,ES:[SI+BX+76H];AX←ES:[SI+BX+76H] 注意:基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。

(6)串寻址:用于数据串操作指令,它隐含地运用:SI指出源串偏移地址,DI指出目的串偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型

时)、加2或减2(操作数为字类型时);约定源串段地址在DS中,目的串段

地址在ES中。不允许段超越。

1,DI←DI 1

例:MOVSB ;ES:[DI] ←DS:[SI],SI←SI

MOVSW ;ES:[DI] ←DS:[SI],SI←SI

(7)端口寻址:操作数在外设端口中。

直接端口寻址:指令中直接给出的8位常数是外设端口地址。

例:IN AL,34H ;AL←[34H]

OUT 34H,AL ;[34H]←AL

间接端口寻址:指令中外设端口的16位地址在DX中。

例:MOV DX,280H

IN AL,DX ;AL←[280H]

OUT DX,AL ;[280H]←AL

(8)隐含寻址:指令中没有给出操作数,但却隐含在固定对象中。

例:AAA ;隐含对AL操作,

三、数据传送指令

1. 通用数据传送指令

①MOV dst,src

指令功能:dst←src,

标志寄存器:不影响,

操作数:src:通用寄存器、段寄存器、存储器操作数、立即数;

dst:通用寄存器、段寄存器、存储器操作数。

注意点:src和dst必须类型一致(都是8位或者是16位);

dst不能是立即数;

当操作数不是立即数时,两个操作数不能都是存储器操作数;

源操作数是立即数时,目的操作数不能是段寄存器;

CS不得作目的操作数。

例:MOV BX,CX ;BX←CX

MOV [2000H],BL ;DS:[2000H]←BL

①XCHG dst,src

指令功能:dst←→src

标志寄存器:不影响,

操作数:两操作数可以是通用寄存器和存储器。

注意点:两操作数不能都是存储器操作数;

两操作数类型必须一致。

例:XCHG AX,BX ;AX ←→BX

②PUSH src

指令功能:SP←SP-1,[SP]←srcH,SP←SP-1,[SP]←srcL

标志寄存器:不影响

操作数:寄存器(IP除外)或存储单元。

注意点:源操作数只能是16位,而不能是8位的。

③POP dst

指令功能:dstL←[SP],SP←SP+1,dstH←[SP],SP←SP+1

标志寄存器:不影响,POPF除外

操作数:同PUSH指令,但CS不能作为目的操作数。

注意点:目的操作数只能是16位的,而不能是8位的。

④XLA T(查表指令)

指令功能:AL←DS:[BX+AL];

标志寄存器:不影响;

用途:用于查表,表首地址的偏移地址在BX中,表长度可达256字节。

2. 地址传送指令:用来传送操作数的地址。

①LEA reg16,src 取偏移地址指令

指令功能:将源操作数的偏移地址送16位通用寄存器;

标志寄存器:不影响;

操作数:目的操作数是16位通用寄存器,源操作数是存储器操作数。

②LDS reg16,src 和LES reg16,src 取地址指针指令

指令功能:将源操作数的有效地址所对应的双字存储单元的高16位内容送入DS(LES 指令送入ES),低16位内容送入指令指定的16位通用寄存器;

标志寄存器:不影响。

例:设某双字存储单元偏移地址为3000H,双字数据为12345678H,则

LDS SI,[3000H] ;DS=1234H,SI=5678H

LES DI,[3000H] ;ES=1234H,DI=5678H

3. 标志传送指令专门用于对标志寄存器进行操作

①LAHF ;AH ←F L,标志寄存器低8位送AH

②SAHF ;F L←AH,AH的内容送标志寄存器低8位

③PUSHF ;标志寄存器内容压栈

④POPF ;栈顶内容送标志寄存器

注意点:SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。

4. 输入/输出指令用于主机与外设端口间的数据传送。

IN AL,n;IN AL,DX;IN AX,n;IN AX,DX

指令功能:从端口(地址为n或在DX中)输入8位数据到AL中或输入16位数据到AX中;

标志寄存器:不影响。

OUT n,AL;OUT DX,AL;OUT n,AX;OUT DX,AX

指令功能:从AL中输出8位数据到端口(地址为n或在DX中)或从AX中输出16位数据到端口(地址为n或在DX中)。

标志寄存器:不影响。

四、算术运算指令

1. 加法指令

①ADD dst,src

指令功能:dst←src+dst

标志寄存器:影响AF、CF、PF、OF、ZF、SF

操作数:目的操作数:通用寄存器、存储器;

源操作数:通用寄存器、存储器、立即数;

注意点:两操作数必须类型一致;

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

例:ADD AX,BX ;AX←AX+BX

ADD [BX+DI+64H],AX ;[BX+DI+64H]←AX

②ADC dst,src

指令功能:dst←dst+src+CF

其余同ADD指令。

③INC dst

指令功能:dst←dst+1

标志寄存器:影响OF、SF、ZF、AF、PF;

操作数:8位/16位通用寄存器或存储器;

注意点:不影响CF。

2. 减法指令

①SUB dst,src

指令功能:dst←dst-src;

其余同ADD指令。

例:SUB BX,CX ;BX←BX-CX

②SBB dst,src

指令功能:dst←dst-src-CF;

其余同SUB指令。

例:SBB [BX+SI],AL ;[BX+SI] ←[BX+SI]-AL-CF

③DEC dst

指令功能:dst←dst-1

其余同INC指令。

④NEG dst

指令功能:dst←0-dst或det←+1

标志寄存器:影响AF、CF、PF、OF、ZF、SF;

操作数:8位/16位通用寄存器或存储器。

例:MOV AH,5

NEG AH ;AH=11111011B,是-5(补码)MOV AX,-6

NEG AX ;AX=0006H,是+6

⑤CMP dst,src

指令功能:dst-src

其余同SUB指令;

注意点:指令执行后,目的操作数保持原值不变。

3. 乘法指令

①MUL src 无符号数乘法指令

指令功能:AX←AL*src(字节乘法)

DXAX←AX*src(字乘法)

标志寄存器:字节乘:若乘积高8位AH0,则CF=1,OF=1,

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

字乘:若乘积高16位DX0,则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指令;

标志寄存器:若乘法结果AH或DX包含有效值,则OF=1、CF=1,

若乘法结果AH或DX只是低半部分的符号扩展,则OF=0、CF=0 操作数:同MUL指令。

例:IMUL WORD PTR [DI] ;DXAX←AX*(DS:[DI])

4. 除法指令

①DIV src 无符号除法指令

指令功能:字节除:AL←AX/src,余数在AH中,

字除:AX←DXAX/src,余数在DX中。

若商超过AL(字节除)或AX(字除)所能存放的最大值(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。

操作数的规定与乘法指令相同。

例:DIV BX ;DX,AX←DXAX/BX,DX←余数,AX←商

②IDIV src 带符号数除法指令

需强调的是余数的符号必须和被除数的符号相同。当商超过AL或AX所能存放的最大值+127(字节除)或+32767(字除),以及所能存放的最小值-127(字节除)或-32767(字除)时,系统会自动产生0类中断。操作数的规定与乘法指令相同。

5. 符号扩展指令扩展带符号数的字节数

①CBW

指令功能:将AL中数的符号位扩展到整个AH中。

②CWD

指令功能:将AX中数的符号位扩展到整个DX中。

例:MOV AL,-16 ;AL=0F0H(-16)

CBW ;AX=0FFF0H(-16)

CWD ;DXAX=0FFFFFFF0H(-16)

IDIV BX ;DX←余数,AX←商

6. BCD数调整指令

压缩型BCD数(也称组合BCD数):一个字节表示两位BCD数;

非压缩型BCD数(也称非组合BCD数):一个字节表示一位BCD数,有效位在低4位,高4位为零。

①加法的BCD数调整

a.AAA:加法的非压缩型BCD数调整指令

指令功能:对在AL中两个非压缩型BCD数相加的结果,调整成非压缩型BCD数在AL中;若AL低4位大于9或AF=1,则AL+6,AH+1,CF和AF置1,AL高4位清0;否则AL高4位清0,CF和AF置0,

标志寄存器:该指令不影响PF、ZF、SF、OF。

注意点:必须紧跟在加法指令之后且只能对AL中的内容进行调整。

b. DAA:压缩型BCD数调整指令

指令功能:对在AL中两个压缩型BCD数相加的结果,调整成压缩型BCD数在AL中;

标志寄存器:影响CF、PF、AF、ZF、SF,其中CF=1说明结果大于99。

注意点:必须紧跟在加法指令之后且只能对AL中的内容进行调整。

例:MOV BL,35H

MOV AL,85H

ADD BL,AL

DAA

结果AL=20H,CF=1,AF=1,PF=0,ZF=0,SF=0

②减法的BCD数调整

a.AAS:减法的非压缩型BCD数调整指令

指令功能:对在AL中两个非压缩型BCD数相减的结果,调整成非压缩型BCD数在AL中;

标志寄存器:影响AF、CF;

注意点:必须紧跟在减法指令之后且只能对AL中的内容进行调整。

例:SUB AL,BL ;AL和BL中的非压缩BCD数相减

AAS ;调整AL为正确的非压缩BCD数

b.DAS:减法的压缩型BCD数调整指令

指令功能:对在AL中两个压缩型BCD数相减的结果,调整成压缩型BCD数在AL中;

标志寄存器:同DAA指令。

注意点:必须紧跟在减法指令之后且只能对AL中的内容进行调整。

③乘法的BCD数调整

AAM;非压缩型BCD数调整

指令功能:对AX中两个非压缩型BCD数在相乘的结果调整成两位非压缩型BCD数,高位非压缩型BCD数在AH中,低位非压缩型BCD数在AL中;

标志寄存器:影响PF、SF、ZF。

注意点:必须紧跟在乘法指令之后。

④除法的BCD数调整

AAD;非压缩型BCD数调整

指令功能:用在两位非压缩型BCD数在相除之前进行调整,对AX内容进行调整,使两个未组合的十进制数相除之后可得到非组合的BCD数结果,商在AL中,余数在AH中;

标志寄存器:影响PF、SF、ZF。

注意点:必须紧跟在除法指令之前。

五、位操作指令(包括逻辑运算指令、移位指令)

1. 逻辑运算指令

①AND dst,src

指令功能:dst←dst∩src

标志寄存器:影响SF、ZF、PF,OF=0、CF=0,AF不确定

操作数:目的操作数:通用寄存器、存储器;

源操作数:通用寄存器、存储器、立即数;

注意点:两操作数不能都是存储器操作数。

例:MOV BX,0F56H

AND BL,BH ;BL=06H

②OR dst,src

指令功能:dst←dst∪src

其余同AND指令。

③NOT dst

指令功能:dst←

标志寄存器:不影响;

操作数:通用寄存器、存储器。

例:MOV AL,05H

NOT AL ;AL=0FAH

④XOR dst,src

指令功能:dst←dst src

其余同AND指令。

⑤TEST dst,src

指令功能:dst∩src

其余同AND指令

注意点:指令执行后,目的操作数的值保持不变。

2. 移位指令

移位次数cnt可以是1,若移位次数大于1时,必须放在CL中,移位结束后,CL值不变。影响AF以外的各标志位,而AF不定;当cnt=1时,OF才有意义,当移位前操作数的最高两位相同时,移位后OF=0,当操作数的最高两位不同时,OF=1。

①SAL dst,cnt 算术左移指令

SHL dst,cnt 逻辑左移指令

指令功能:

操作数:通用寄存器或存储器的8位或16位内容。

② SAR dst,cnt 算术右移指令

指令功能:

操作数:通用寄存器或存储器的8位或16位内容。

③ SHR dst,cnt 逻辑右移指令

指令功能:

操作数:通用寄存器或存储器的8位或16位内容。

3. 循环移位指令

只影响CF和OF,同样只有当cnt=1时,OF才有意义。操作数同移位指令

① ROL dsr,cnt 循环左移指令

指令功能:

②ROR dst,cnt 循环右移指令

指令功能:

③RCL dst,cnt 带进位循环左移指令

指令功能:

④RCR dst,cnt 带进位循环右移指令

指令功能:

六、程序控制指令

用来控制程序的执行顺序。程序的执行顺序是由CS和IP确定的

转移指令可分为:

段间转移(也称远转移):目标属性为FAR,同时改变CS和IP;

段内转移(也称近转移):目标属性为NEAR,仅改变IP。

无论是段间转移还是段内转移都有直接转移和间接转移之分:

直接转移:在转移指令中直接指明目标地址;

间接转移:转移的目标地址间接存储于某一寄存器或存储单元中,若用寄存器间接转移,只能完成段内间接转移。

转移还有绝对转移和相对转移之分:

段内相对转移:目标地址是IP当前值加一个偏移量;

段内绝对转移:以新的值代替当前值。

在8086指令系统中,段内直接转移都是相对转移;

段内间接转移都是绝对转移;

段间转移都是绝对转移。

8086提供了四种程序控制指令,即:

无条件转移指令、条件转移指令、循环控制指令和中断指令。

除中断指令外,其它转移指令都不影响状态标志。

1. 无条件转移指令

①JMP target

指令功能:无条件转移指令到目标地址target去执行程序。

目标地址的形式有五种:

短标号:段内直接转移,范围不超过-128~+127字节,属相对转移;

近标号:段内直接转移,范围是段内任何地方,属相对转移;

远标号:段间直接转移,范围是存储器任何地方,属绝对转移;

通用寄存器:段内间接转移,范围是段内任何地方,属绝对转移;

存储器变量:当是字类型时,为段内间接转移,,属绝对转移;

当是双字类型时,为段间间接转移,,属绝对转移。

②CALL proc-name

指令功能:保护程序断点:

段内调用:当前IP内容压栈;

段间调用:先把CS内容压栈,再把IP内容压栈。

无条件转移到目标地址:

段内调用:IP←目标地址偏移地址或寄存器内容;

段间调用:IP←目标地址偏移地址或DS:[寄存器]低字;

CS←目标地址的段地址或DS:[寄存器]高字。

目标地址的形式只是没有段内直接短调用,其余同JMP指令,但子程序名(过程名)必须定义类型名(近过程还是远过程)。

③RET pop-val

指令功能:执行与CALL指令相反的操作,从子程序返回到主程序。

若该指令不带操作数:

段内返回:IP←栈顶字,SP←SP+2;

短间返回:IP←栈顶字,SP←SP+2;CS←栈顶字,SP←SP+2。

若该指令带有立即操作数:

在上述功能完成后,再SP←SP+立即数。

2. 条件转移指令

是以标志位的状态或者以标志位的逻辑运算结果作为转移条件,如果满足转移条件,则转移到指定的目标地址,如果不满足转移条件,则继续执行下一条指令。

全部条件转移指令都是段内直接转移,转移地址的偏移量限制在-128~+127范围内。

指令中,条件缩写字母的含义是:

A:Above 高于B:Below 低于C:Carry 进位E:Equal 等于

G:Greater 大于L:Less 小于N:Not 无O:Over 溢出

S:Sign 符号PE:Parity Even 奇偶性偶PO:Parity Odd 奇偶性奇分为单个状态条件转移,无符号数条件转移,有符号数条件转移三种。见表3.1

表3. 1 程序控制指令

3. 循环控制指令

是段内短距离相对转移指令,可用来控制程序段的循环执行,循环次数都由CX内容指定。

①LOOP short-lavel

指令功能:CX←CX-1

若CX0,则转移到目标地址;

若CX=0,则执行下一条指令。

②LOOPE/LOOPZ short-lavel

指令功能:CX←CX-1

若CX0且ZF=1,则转移到目标地址;否则执行下一条指令。

③LOOPNE/LOOPNZ short-lavel

指令功能:CX←CX-1

若CX0且ZF=0,则转移到目标地址;否则执行下一条指令。

④JCXZ short-lavel

指令功能:若CX=0,则转移到目标地址;否则执行下一条指令。

4. 中断指令

可引起CPU中断,这种由指令引起CPU中断,称为软中断。

中断除保护程序断点外,还将标志寄存器内容压栈,中断服务程序入口地址由中断向量表获得。

①INT n ;n=0~FFH

指令功能:SP←SP-2,SS:[SP]←F,IF←0,TF←0

SP←SP-2,SS:[SP]←CS,CS←0:[n*4+2]

SP←SP-2,SS:[SP]←IP,IP←0:[n*4]

①INT0 (n=4)

指令功能:放在算术运算指令之后,

若运算结果有溢出,则OF=1,产生溢出中断,

若运算结果无溢出,则OF=0,不产生溢出中断。

除n=4以外,其余同INT n指令。

②IRET

指令功能:除同RET指令外,还弹出第三个字送FR,最后SP←SP+2 七、串操作指令

约定:SI指向源数据串偏移地址,源段地址为DS;

DI指向目的数据串偏移地址,目的段地址为ES;

地址指针是自动增量(当DF=0时)或自动减量(当DF=1时);

地址指针是增(减)量1为字节操作;地址指针是增(减)量2为字操作。

串操作指令可加重复前缀,并约定用CX存放重复次数,每重复执行一次,CX内容减1。未使用重复前缀的串指令,在执行时,只执行一次。在任何串操作指令之前均可加重复前缀。需注意的是,执行带有重复前缀的指令时,对CX的检测是在执行指令前进行的。使用重复前缀,能重复执行多达64KB的串操作。

1. 重复前缀

①REP

指令功能:若CX0,重复执行,CX←CX-1,

8086指令系统精析解析

8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H

8086指令总结

8086指令系统总结 学习微处理器及其程序设计,必须掌握微处理器的指令系统。本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。 下面我们分别进行总结: 一.8086寻址方式 (1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义 (2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX (3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H] MOV AX,ES:[1234H] (4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX] MOV AX,ES:[SI] MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统 1.数据传送指令 (一)通用传送指令 (1)MOV指令 指令格式:MOV 目,源 功能:将源操作数传送给目标操作数。 (2)堆栈操作指令 进栈指令:PUSH 格式:PUSH 源 功能:将源操作数压入堆栈。 例:用堆栈指令完成上例的功能。 MOV AX,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H

实验6 CPU组成与机器指令执行实验

肇庆学院计算机学院/软件学院 实验报告 专业计算机学院班级姓名学号 课程名称:CPU组成与机器指令执行实验学年2014—2015 学期1□/ 2□ 课程类别专业必修 限选□任选□实践□ 评分:批阅老师:2016年月日 ●实验目的 (1)将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机; (2)用微程序控制器控制模型机数据通路; (3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。 ●实验电路 本次实验用到前面四个实验中的所有电路,包括运算器、存储器、通用寄存器堆、程序计数器、指令寄存器、微程序控制器等,将几个模块组合成为一台简单计算机。因此,在基本实验中,这是最复杂的一个实验,也是最能得到收获的一个实验。 在前面的实验中,实验者本身作为“控制器”,完成数据通路的控制。而在本次实验中,数据通路的控制将由微程序控制器来完成。CPU从内存取出一条机器指令到执行指令结束的一个机器指令周期,是由微指令组成的序列来完成的,即一条机器指令对应一个微程序。 ●实验设备 (1)TEC-9计算机组成原理实验系统一台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一支 ●实验任务 (1)对机器指令系统组成的简单程序进行译码。 将下表的程序按指令格式手工汇编成十六进制机器代码,此项任务应在预习时完成。 地址指令机器代码 00H LDA R0,[R2] 58H 01H LDA R1,[R3] 5DH 02H ADD R0,R1 04H 03H JC +4 94H 04H AND R2,R3 3EH 05H SUB R3,R2 1BH 06H STA R3,[R2] 4BH 07H STP 60H 08H JMP [R1] 84H (2)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序产生器是时序部件。连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。 开关控制

第三章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

cpu指令运行说明

cpu指令运行说明 cpu指令运行说明一计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。 取指令的任务是:根据程序计数器pc中的值从程序存储器读出现行指令,送到指令寄存器。 分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。 计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。 一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。 下面我们将举个实例来说明指令的执行过程: 开机时,程序计算器pc变为0000h。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。 例如执行指令:mov a,#0e0h,其机器码为“74h e0h”,该指令的功能是把操作数e0h送入累加器,

0000h单元中已存放74h,0001h单元中已存放e0h。当单片机开始运行时,首先是进入取指阶段,其次序是: 1 程序计数器的内容(这时是0000h)送到地址寄存器; 2 程序计数器的内容自动加1(变为0001h); 3 地址寄存器的内容(0000h)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000h的单元被选中; 4 cpu使读控制线有效; 5 在读命令控制下被选中存储器单元的内容(此时应为74h)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。 由于本次进入指令寄存器中的内容是74h(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到a累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(e0h)从存储器中取出送到cpu,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时pc已为0001h。指令译码器结合时序部件,产生74h操作码的微操作系列,使数字e0h 从0001h单元取出。因为指令是要求把取得的数送到a累加器,所以取出的数字经内部数据总线进入a累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中pc="0002h",pc 在cpu每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。cpu就是这样一条一条地执行指令,完成所有规定cpu指令运行说明二首先,cpu的内部结构可以分为控制

CPU的工作过程

CPU的工作过程 CPU的工作过程 CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程实际上是不断地取出指令、分析指令、执行指令的过程。 CPU从存放程序的主存储器里取出一条指令,译码并执行这条指令,保存执行结果,紧接着又去取指令,译码,执行指令……,如此周而复始,反复循环,使得计算机能够自动地工作。除非遇到停机指令,否则这个循环将一直进行下去。其过程如图3-3所示 图3-3 程序的执行过程 3.2.1 指令的执行过程 几乎所有的冯?诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数和结果写回。如图3-4所示。 图3-4 指令的执行过程 1.取指令阶段 取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。 PC,依此类推。?PC,若为双字长指令,则(PC)+2?程序计数器PC中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度而自动递增。若为单字长指令,则(PC)+1

2.指令译码阶段 取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。 在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别和区分出不同的指令类别及各种获取操作数的方法。 在组合逻辑控制的计算机中,指令译码器对不同的指令操作码产生不同的控制电位,以形成不同的微操作序列;在微程序控制的计算机中,指令译码器用指令操作码找到执行该指令的微程序的入口,并从此入口开始执行。 在传统的设计里,CPU中负责指令译码的部分是无法改变的硬件。不过,在众多运用微程序控制技术的新型CPU中,微程序有时是可重写的,可以通过修改成品CPU来改变CPU的译码方式。 3.执行指令阶段 在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。 此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU 的不同部分被连接起来,以执行所需的操作。 例如,如果要求完成一个加法运算,算术逻辑单元(ALU)将被连接到一组输入和一组输出,输入端提供需要相加的数值,而输出端将含有最后的运算结果。 4.访存取数阶段 根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。 此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。 5.结果写回阶段 作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式。结果数据经常被写到CPU的内部寄存器中,以便被后续的指令快速地存取。在有些情况下,结果数据也可被写入相对较慢、但较廉价且容量较大的主存。许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。 在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将正常地顺序取出下一条指令。 许多新型CPU可以同时取出、译码和执行多条指令,体现出并行处理的特性。

习题3-8086指令系统

习题三8086指令系统 主要内容:8086指令系统。主要介绍8086的基本数据类型、寻址方式和指令系统,重点掌握8086指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。 1.单选题: (1)执行下面指令序列后,结果是(A)。 MOV AL,82H CBW A、(AX)=0FF82H B、(AX)=8082H C、(AX)=0082H D、(AX)=0F82H (2)与MOV BX,OFFSET VAR指令完全等效的指令是(D )。 A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR (3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有(D )。 A、CMP B、SUB C、AND D、MOV (4)下面指令执行后,改变AL寄存器内容的指令是(D )。 A、TEST AL,02H B、OR AL,AL C、CMP AL,B D、AND AL,BL (5)设DH=10H,执行NEG DH指令后,正确的结果是(D )。 A、(DH)=10H,CF=1 B、(DH)=0F0H,CF=0 C、(DH)=10H,CF=0 D、(DH=0F0H,CF=1 (6)设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是(A )。 A、85B92H B、86192H C、BB690H D、12169H (7)下列指令中,执行速度最快的是(C )。 A、MOV AX,100 B、MOV AX,[BX] C、MOV AX,BX D、MOV AX,[BX+BP] 2.8086 CPU执行如下指令后的结果,以及标志SF、AF、CF、OF的值。 (1)MOV AL,0110 0100B SUB AL,58H ;(AL)=0CH,AF=1 DAS ;(AL)=06H, AF=1 ADD AL,89H ;(AL)=8FH, AF=0 DAA ;(AL)=95H,AF=1,SF=1 结果: (AL)=95H, SF=1, AF=1, CF=0, OF=0 (2)MOV AL,05H MOV BL,09H MUL BL ;(AX)=002DH, SF、AF、CF、OF=0 AAA ; (AX)=0103H ;AAM ; ; (AX)=0405H 结果: (AX)=0103H, CF=1 , SF=0、AF=1、OF=0 3.分析执行下列指令序列后的结果: MOV AL,10110101B AND AL,00011111B ;(AL)=0001 0101B OR AL,11000000B ;(AL)=1101 0101B XOR AL,00001111B ;(AL)=1101 1010B NOT AL ;(AL)=0010 0101B 4.假设(AL)=10101111B,CF=0,CL=2,写出分别执行下列指令后的结果以及标志位CF、ZF、OF的值。 (1)SHL AL,CL ;(AL)=1011 1100B, CF=0、ZF=0、OF=1 (2)SHR AL,CL ;(AL)=0010 1011B, CF=1、ZF=0、OF=0 (3)SAR AL,CL ;(AL)=1110 1011B, CF=1、ZF=0、OF=0 (4)ROL AL,CL ;(AL)=1011 1110B, CF=0、ZF=0、OF=1 (5)RCR AL,CL ;(AL)=1011 1101B, CF=0、ZF=0、OF=1 5.设(IP)= 3D8FH,(CS)=4050H,(SP)=0F17CH,当执行CALL 2000:0094H后,试求出IP、CS、SP的

指令的执行过程

举个实例来说明指令的执行过程: 开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。 例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,0000H单元中已存放74H,0001H单元中已存放E0 H。当单片机开始运行时,首先是进入取指阶段,其次序是: 1 程序计数器的内容(这时是0000H)送到地址寄存器; 2 程序计数器的内容自动加1(变为0001H); 3地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中; 4 CPU使读控制线有效; 5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。 至此,取指阶段完成,进入译码分析和执行指令阶段。 由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H 单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC=0002H,PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能

8086指令系统记忆表

数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令

8086/8088指令系统

CH02 8086/8088指令系统 习题与思考题 1.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?源操作数在哪里?如在存储器中请写出其物理地址是多少? (1)MOV AX,0ABH (2)MOV AX,[100H] (3)MOV AX,V AL (4)MOV BX,[SI] (5)MOV AL,V AL[BX] (6)MOV CL,[BX][SI] (7)MOV V AL[SI],BX (8)MOV [BP][SI],100 解答: (1)MOV AX,0ABH 寻址方式:立即寻址;物理地址:无 (2)MOV AX,[100H] 寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+100H=2000H*16+100H=20100H (3)MOV AX,V AL 寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+V AL=2000H*16+0050H=20050H (4)MOV BX,[SI] 寻址方式:寄存器间接寻址;源操作数在存储器中;物理地址:DS*16+SI=2000H*16+00A0H=200A0H (5)MOV AL,V AL[BX] 寻址方式:变址寻址;源操作数在存储器中;物理地址:DS*16+V AL+BX=2000H*16+0050H+0100 =20150H (6)MOV CL,[BX][SI] 寻址方式:基址加变址寻址;源操作数在存储器中;物理地址:DS*16+BX+SI=2000H*16+0100H+00A0H =201A0H (7)MOV V AL[SI],BX 寻址方式:寄存器寻址;源操作数在寄存器中;物理地址:无 (8)MOV [BP][SI],100 寻址方式:立即寻址;物理地址:无 2.设有关寄存器及存储单元的内容如下: DS=2000H,BX=0100H,AX=1200H,SI=0002H,[20100H]=12H,[20101H]=34H,

8086 8088指令系统记忆表

8086/8088指令系统记忆表 来自: [已注销]2011-10-21 22:44:12 在这之前,先说一下寄存器: 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag)

CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换

emu8086介绍解析

emu8086 EMU8086是学习汇编必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug 的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。 目录 软件简介 使用方法 如何运行 十进制系统 二进制系统 十六进制系统 十进制到另外进制的换算 有符号数 汇编语言

通用寄存器 段寄存器 寻址方式 MOV 指令 数组 常量 中断 运算与逻辑指令 程序控制转移 堆栈 展开 软件简介 使用方法 如何运行 十进制系统 二进制系统 十六进制系统 十进制到另外进制的换算有符号数 汇编语言 CPU内部

通用寄存器 段寄存器 寻址方式 MOV 指令 数组 常量 中断 运算与逻辑指令 程序控制转移 堆栈 展开 编辑本段软件简介 EMU8086是你学习汇编必不可少的工具! Emu8086-MicroprocessorEmulator结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。这对刚开始学组合语言的人会是一个很有用的工具。它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。你可以在程序执行当中检视暂存器、旗标以及

记忆体。模拟器会在虚拟PC中执行程序,这可以隔绝你的程序,避免它去存取实际硬体,像硬碟、记忆体,而在虚拟机器上执行组合程序,这可以让除错变得更加容易。这个软件完全相容於Intel的下一代处理器,包括了PentiumII、Pentium4,而相信Pentium5也会继续支援8086的。这种现象让8086程序码的可携性相当高,它可以同时在老机器以及现代的电脑是执行,8086的另一个优势是它的指令比较小且相当容易学习。 该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。这套软件对于刚开始学习汇编语言的朋友非常有帮助.它能够编译源代码,并在模拟器上一步一步的执行。可视化界面令操作易如翻掌.可以在执行程序的同时可观察寄存器,标志位和内存.算术和逻辑运算单元(ALU)显示中央处理器内部的工作情况. 这个模拟器是在一台"虚拟"的电脑上运行程序的,它拥有自己独立的“硬件”,这样你程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便.8086的机器代码同INTEL下一代微处理器完全兼容,包括Pentium II 和Pentium 4,我相信Pentium 5同样也会支持8086指令.这意味着8086代码具有很广泛的应用范围,它在老式的和最新的计算机系统上都能工作. 8086指令的另外一个优点是它的指令集非常小,这样学起来会容易得多.Emu8086同主流汇编程序相比,语法简单得多,但是它能生

计组实验-CPU组成与机器指令执行

对机器指令系统组成的简单程序进行译码 接线 本实验接线比较多,需仔细 接线表

只要把上表同列的信号用线连接即可,一共接线33条. 接好线后,将编程开关拨到"正常位置",合上电源,按CLR#按钮,使TEC-5实验系统处于初始状态. (3)存程序代码,设置通用寄存器R0,R1,R2,R3的第一组值及存储器相关单元的数据 本组的寄存器数据是R0=35H, R1=43H, R2=10H, R3=07H.存储器10H 单元的内容为55H.选择这组数据的目的 是执行ADD R1,R0指令时不产生进位C,从而在执行JC R3指令时不产生跳转,而是顺序执行. ●设置通用寄存器R0,R1,R2,R3的值. 本操作中我们使R0=35H, R1=43H, R2=10H, R3=07H. 1.令DP=0,DB=0,使系统处于连续运行状态.令SWC=0, SWB=1, SWA=1,使系统处于写寄存器状态WRF.按CLR#,使实验 系统处于初始状态.

2.在SW7-SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使用.(该存储器地址最好是不常用的一个地 址,以免设置通用寄存器操作破坏重要的存储器单元的内容.)这里我们将该地址设置为0FFH.按一次QD按钮,将 0FFH写入左端口地址寄存器AR. 3.在SW7-SW0上设置00H,作为通用寄存器R0的寄存器号.按一次QD按钮,将00H写入指令寄存器IR. 4.在SW7-SW0上设置35H.按一次QD按钮,将35H写入IR指定的R0寄存器. 5.在SW7-SW0上设置01H,作为通用寄存器R1的寄存器号.按一次QD按钮,将01H写入指令寄存器IR. 6.在SW7-SW0上设置43H.按一次QD按钮,将35H写入IR指定的R1寄存器. 7.在SW7-SW0上设置02H,作为通用寄存器R2的寄存器号.按一次QD按钮,将02H写入指令寄存器IR. 8.在SW7-SW0上设置10H.按一次QD按钮,将10H写入IR指定的R2寄存器.

CPU组成与机器指令执行实验

CPU组成与机器指令执行实验 一、实验目的 (1)将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机; (2)用微程序控制器控制模型机数据通路; (3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。 二、实验电路 本次实验用到前面四个实验中的所有电路,包括运算器、存储器、通用寄存器堆、程序计数器、指令寄存器、微程序控制器等,将几个模块组合成为一台简单计算机。因此,在基本实验中,这是最复杂的一个实验,也是最能得到收获的一个实验。 在前面的实验中,实验者本身作为“控制器”,完成数据通路的控制。而在本次实验中,数据通路的控制将由微程序控制器来完成。CPU从内存取出一条机器指令到执行指令结束的一个机器指令周期,是由微指令组成的序列来完成的,即一条机器指令对应一个微程序。 三、实验设备 (1)TEC-4计算机组成原理实验系统一台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一支 四、实验任务 (1)对机器指令系统组成的简单程序进行译码。 将下表的程序按指令格式手工汇编成十六进制机器代码,此项任务应在预习时完成。 (2)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序产生器是时序部件。连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。

开关控制 控制台时序发生器 时序信号 开关控制指示灯信号控制信号时序信号 控制信号 微程序控制器数据通路 指令代码、条件信号 模型计算机连线示意图 (3)将上述任务(1)中的程序机器代码用控制台操作存入内存中,并根据程序的需要,用数码开关SW7—SW0设置通用寄存器R2、R3及内存相关单元的数据。注意:由于设置通用寄存器时会破坏内存单元的数据,因此一般应先设置寄存器的数据,再设置内存数据。 (4)用单拍(DP)方式执行一遍程序,列表记录通用寄存器堆RF中四个寄存器的数据,以及由STA指令存入RAM中的数据(程序结束后从RAM的相应单元中读出),与理论分析值作对比。单拍方式执行时注意观察微地址指示灯、IR/DBUS指示灯、AR2/AR1指示灯和判断字段指示灯的值,以跟踪程序中取指令和执行指令的详细过程(可观察到每一条微指令)。 (5)以单指(DZ)方式重新执行程序一遍,注意观察IR/DBUS指示灯、AR2/AR1指示灯的值(可观察到每一条机器指令)。执行结束后,记录RF中四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值作对比。注意:单指方式执行程序时,四个通用寄存器和RAM中的原始数据与第一遍执行程序的结果有关。 (6)以连续方式(DB、DP、DZ都设为0)再次执行程序。这种情况相当于计算机正常运行程序。由于程序中有停机指令STP,程序执行到该指令时自动停机。执行结束后,记录RF中四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值作对比。同理,程序执行前的原始数据与第二遍执行结果有关。 五、实验步骤和实验结果 (1)对机器指令系统组成的简单程序进行译码。 (2)接线 本实验的接线比较多,需仔细。 1.将跳线开关J1用短路子短接。时序发生器的输入TJI接控制存储器的输出TJ。控制器

8086指令系统

通用寄存器: 数据寄存器:累加器AX,基址寄存器BX,计数器CX,数据寄存器DX 变址寄存器:源地址寄存器SI,目的变址寄存器DI 指针寄存器:基址指针BP,堆栈指针SP 段寄存器: 代码段寄存器CS,堆栈段寄存器SS,数据段寄存器DS,附加段寄存器ES 标志寄存器:FLAGS,指令指针:IP 数据寄存器 8086有4个16位数据寄存器:AX,BX,CX,DX;它们都可以分为两个独立的8位寄存器:AH/AL,BH/BL,CH/CL,DH/DL;对其中的某8位操作,并不影响另外对应8 位寄存器的数 据.数据寄存器是通用的,用来存放计算结果和操作数, 但每个寄存器又有它们各自专用目的,主要是: AX称为累加器,使用程度最高,用于算术,逻辑运算及与外设传送信息等; BX称为基地址寄存器,常用做存放存储器的地址; CX称为计数器,作为循环和串操作等指今中隐含的计数器; DX称为数据寄存器,常用来存放双字节长数据的高16位,或存放外设端口地址. 指针及变址寄存器 指针及变址寄存器包括SI,DI,BP,SP四个16位寄存器,常用于存储器寻址时提供地址.SI源变址寄存器,DI 目的变址寄存器,一般与DS联用确定数据段中某一存储单元地址.SP堆栈指针寄存器,指示栈顶的偏移地址;BP基址指针寄存器, 表示堆栈段中的基地址.IP16位指令指针寄存器,指示代码段中指令的偏移地址,它与代码段寄存器CS 联用,以确定下一条指令的物理地址.处理器利用CS:IP取得下一条要执行的指令,然后修改IP的内容,使之指向下一条指令的存储器地址.

标志寄存器(FLAGS) 也称为状志标志寄存器PSW 0 CF(Carry Flag) 进位标志 1 2 PF(Parity Flag)零标志 3 4 AF(Auxiliary Carry Flag)辅助进位标志 5 6 ZF(Zero Flag)零标志 7 SF(Sign Flag)符号标志:运算结果最高有效位的状态就是符号位的状态. 8 TF(Trap Flag)陷井标志 9 IF(Interrupt-enable Flag)中断允许标志 10 DF(Direction Flag)方向标志 11 OF(Overflow Flag)溢出标志 12 13 14 15 状态标志:CF,ZF,SF,PF,OF,AF 控制标志:DF,IF,TF 8086的字长是16位的,但其地址线是32位的. 8086处理器将1M存储器空间分成许多逻辑段(Segment),每个段的最大限为16KB. 这样,每个存储单元就可以用"段地址:段内偏移地址"表达其准确的物理位置."段地址:偏移地址"的形式称为逻辑地址 .将逻辑地址中的段地址左移4位(这是对二进制而言,若是十六进制,只要左移一位),加上偏移地址就得到20位物理地址. 例如逻辑地址"1460H:100H"表示物理地址14700H, 同一个物理地址可以有多个逻辑地址形式. 8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL

8086指令集

8086指令集 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG 交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLAT(Translate) 换码 这组指令只限于使用累加器AX或AL传送信息. .IN 输入指令 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT 输出指令 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为: OUT DX,AL(字节) OUT DX,AX(字) 执行的操作: ((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. .XLAT 换码指令 格式为: XLAT OPR 或: XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA 有效地址送寄存器 格式为: LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS 指针送寄存器和DS指令 格式为: LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器. .LES 指针送寄存器和ES指令 格式为: LES REG,SRC 执行的操作: (REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器. 4.标志寄存器传送指令 LAHF(Load AH with flags)标志送AH SAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈 POPF(pop the flags) 标志出栈 .LAHF 标志送AH 格式为: LAHF 执行的操作:(AH)<-(PWS的低字节) .SAHF AH送标志寄存器 格式为: SAHF 执行的操作:(PWS的低字节)<-(AH) .PUSHF 标志进栈 格式为: PUSHF 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW) .POPF 标志出栈 格式为: POPF 执行的操作:(PWS)<-((SP)+1,(SP)) (SP)<-(SP+2) 二、算术指令 1.加法指令 ADD(add)加法 ADC(add with carry)带进位加法 INC(increment)加1 .ADD 加法指令 格式: ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST) .ADC 带进位加法指令 格式: ADC DST,SRC 执行的操作:(DST)<-(SRC)+(DST)+CF .ADD 加1指令 格式: INC OPR 执行的操作:(OPR)<-(OPR)+1

相关主题
文本预览
相关文档 最新文档