微机原理与接口技术期末复习资料

8086

1、8086内部结构:总线接口部件BIU(地址加法器、专用寄存器组、指令队列缓冲器、总线控制逻辑),指令执行部件(算术逻辑单元、标志寄存器、通用寄存器、EU控制系统)。

通用寄存器:AX(AH,AL)、BX(BH,BL)、CX(CH,CL)、DX(DH,DL)、SP、BP、SI、DI。

控制寄存器:IP、FLAGS。

段寄存器:CS、DS、ES、SS。

FLAGS状态标志位(CF、PF、AF、ZF、SF、OF),控制标志位(IF、TF、DF)

逻辑地址来源:IP—CS,SP—SS,EA—DS,SI—DS,DI—ES。

寻址方式:立即寻址(MOV AL,06H)、直接寻址(MOV AL,[3000H])、寄存器寻址(MOV AL,BX)、寄存器间接寻址(MOV AL ,[BX])、带位移的基址寻址(MOV AL ,4000H[BP])、带位移的变址寻址(MOV AL ,4000H[SI])、基址变址寻址(MOV AL,[BX][SI])、带位移的基址变址寻址(MOV AL ,4000H[BX][SI])。基址(BX、BP),变址(SI、DI),位移量(8位、16位)。存储器寻址:PA物理地址=DS段地址×10H+EA有效地址。

OPR:表示除立即数外所有的寻址方式。

PTR:表示临时指定类型,前面类型有BYTE、WORD、DWORD等

2、8086指令系统:

目标操作数:不允许为立即数和其他同源操作数。

源操作数:可以是8/16位通用寄存器、段寄存器、存储器中的某个字节/字或者8/16位的立即数。

       MOV 目标,源;  传送指令

       PUSH 源;          入栈指令

       POP 目标;         出栈指令

       XCHG 目标,源;       交换指令

       XLAH ;              换码指令

       LEA 目标,源;   目标地址传送指令

       LDS 目标,源;   指针送寄存器和DS指令

       LES 目标,源;   指针送寄存器和ES指令

       LAHF ;              标志位送AH指令

       SAHF;                AH送标志寄存器指令

       PUSHF;              标志进栈指令

       POPF;                标志出栈指令

       ADD 目标,源; 加法指令

       ADC 目标,源;  带进位的加法指令

       INC 目标;          加1指令

       SUB 目标,源;  减法指令

       SBB 目标,源;   带借位的减法指令

       DEC 目标;         减1指令

       NEG 目标;         求补指令

       CMP 目标,源; 比较指令

       MUL 源;            无符号数乘法指令

       IMUL 源;           有符号数乘法指令

       DIV 源;              无符号数除法指令

       IDIV 源;             有符号数除法指令

       CBW ;               字节转为字指令

       CWD;                 字转为双字指令

       NOT 目标;         逻辑非指令

       AND 目标,源; 逻辑与指令

       OR 目标,源;           逻辑或指令

       XOR 目标,源;         逻辑异或指令

       TEST 目标,源;        测试指令

       SHL 目标,计数值;   逻辑左移指令

       SAL 目标,计数值;   算术左移指令

       SHR 目标,计数值;  逻辑右移指令

       SAR 目标,计数值;  算算术右移指令

       ROL 目标,计数值;  循环左移指令

       ROR 目标,计数值;  循环右移指令

       RCL 目标,计数值;   带进位的循环左移指令

       RCR 目标,计数值;  带进位的循环右移指令

串指令操作:源操作数地址固定由DS:SI提供,目标操作数固定由ES:DI提供。

前缀:REP(无条件重复)、REPE(相等时重复)、REPNE(不相等时重复)、REPZ(结果为0时重复)、REPNZ(结果不为0时重复)。

       MOVS 目标串,源串;      串传送指令

              MOVSB         字节传送

              MOVSW        字串传送

       CMPS 目标串,源串;      串比较指令

              CMPSB          字节串比较

              CMPSW         字串比较

       SCAS 目标串;                  串扫描指令

              SCAB             字节串扫描

              SCAW           字串扫描

       LODS 源串;                     取串指令

              LODSB          取字节串

              LODSW         取字串

       STOS 目标串;                  存串指令

              STOSB           存入字节串

              STOSW         存入字串

       HLT                                    停机指令

       NOP                                   无操作数指令

3、汇编语言设计

汇编语句格式:

       指令语句(标号:       指令名称  操作数  ;注释)

如:DELAY:       LOOP   DELAY  ;延时操作

       指示性语句(名称       伪指令名称    操作数 ;注释)

如:STR        EQU       9  ;给STR赋值9

变量:(段属性、偏移属性、类型属性)

类型属性:BYTE(字节变量)、WORD(字变量)、DWORD(双字变量)

       变量名    DB/DW/DD   表达式    定义(单)字节/字(2字节)/双字(4字节)变量

如:DATA1   DB  10,10H,’AB’,?;定义字节变量DATA1,且其内容值为10,10H,’AB’及不确定数

       LAB   DB      5    DUP(0) ;定义LAB为5个0组成的字节变量,即从LAB单元起连续5个内容清零

标号:(段属性、偏移属性、距离属性)

距离属性:NEAR(段内使用)、FAR(段间使用)

算术运算符:

       +     加法                               MOV AH,2+3ß----àMOV AH,5

  •   减法                                 MOV AL,6-3ß----àMOV AL,03H

×    乘法                                 MOV AL,2*3ß----àMOV AL,06H;

/      除法                                 MOV CL,33/5ß----àMOV CL,06H;

MOD      模除                            MOV DL,23 MOD 5ß----àMOV DL,03H;

SHL        左移                            MOV BL,00100011B SHL 4ß--àMOV BL,00110000B

SHR      右移                           MOV BL,0010B SHR 4ß--àMOV BL, 0000B

逻辑运算符:

       NOT       非运算                         NOT 1010B = 0101B

       AND       与运算                         1011B AND 1100B = 1000B

       OR         或运算                         1011B OR 1100B = 1111B

       XOR              异或运算                     1011B XOR 1100B = 0111B

关系运算符:

       EQ          相等                            MOV AL,5 EQ 11B =00H全0(假)

       NE          不等                            5 NE 11B = 全1 (真)

       LT          小于                            5 LT 3 = 全0(假)

       LE        小于等于                   MOV AX,5 LE 101B = 0FFFFH全1(真)

       GT          大于                            5 GT 100B = 全1(真)

       GE          大于等于                     5 GE 111B = 全0(假)

分解运算符:

       SEG 变量或标号:            返回段地址                  SEG N1 = N1所在的段地址

       OFFSET  变量或标号:       返回偏移地址              OFFSET  N1 = N1所在的偏移地址

       LENGTH 变量:             返回变量单元数           LENGTH N2 = N2单元数

如:P1 DB 10 DUP(?)    MOV AL, LENGTH P1ß----àMOV AL,10

       P1 DW 20 DUP(?)    MOV AL, LENGTH P1ß----àMOV AL,20

       TYPE      变量或标号:       返回元素字节数           TYPE N2 = N2 中元素字节数

如:A1 DB 21H,42H;   MOV AL,TYPE A1 ß--àMOV AL,1

       A1 DW 21H,42H;   MOV AL,TYPE A1 ß--àMOV AL,2

       SIZE       变量:    返回变量总字节数       SIZE N2 = N2 总字节数

       SIZE=LENGTH * TYPE

如:P1 DB 10 DUP(?)    MOV AL, SIZE P1ß----àMOV AL,10

       P1 DW 20 DUP(?)    MOV AL, SIZE P1ß----àMOV AL,40

修改属性:

       PTR:类型    PTR   变量/标号   ;  将变量或者标号类型转为PTR左边的类型

如:MOV      AX,WORD PTR M1;将M1类型转为字节型

       JMP    FAR PTR L1 ;将L1距离属性转为段间

       THIS: 变量/标号 EQU THIS 类型  ;将变量或标号定义为指定的类型(不分配新的存储单元,其寻址空间与跟在后面变量的寻址空间相同)

如:BB EQU THIS BYTE ;AA  DD  44332200H ;BB和AA分别为字节和双字变量,但具有相同的寻址空间。

伪指令语句:

       EQU:等值伪指令(符号名  EQU  表达式);同一个程序中不允许重新定义且不占内存空间(表达式可以为:一个值、符号名、表达式、助记符)

如:COUNT  EQU  256;BETA  EQU  BX+SI;ALP  EQU COUNT-1;BUT  EQU SEG MN;EMP EQU OFFSET MN;

       =:等号伪指令(与EQU格式和功能相同)用等号定义的符号允许重新定义。

如:EMP = 200H;COUNT = 100;EMP = COUNT;

       SEGMENT和ENDS:段定义伪指令

如:DATA SEGMENT

              [内容]

       DATA ENDS         ;任何逻辑段从SEGMENT开始到ENDS结束

       ASSUME:段分配伪指令   ;为段分配段寄存器

如:ASSUME   CS:CODE,DS:DATA,ES:EXTRA,SS:ASTACK

       $ :当前偏移地址

如:BUF  DB  ‘123456’ ;COUNT EQU $-BUF;COUNT中存放BUF中的字节数。$表示count的首地址即BUF的末地址,而BUF表示BUF的首地址。

       ORG:设置$值

如:ORG  10H ;BUF DB ‘ABCD’;BUF的偏移地址为10H,如果不设置$则偏移地址为0。

分支程序设计:

JMP  标号 :无条件转移指令;无条件转移至标号处

       JMP SHORT OPR:段内直接段转移指令;转移的目标地址IP为当前IP值与代码中的8位位移量的和。(IP=IP+8位位移量)

如:JMP SHORT NEXT

…[内容]…

NEXT:MOV AL,05H;设当前IP=0102H,位移量为08H。则转移地址的偏移地址IP=0102H+08H。

       JMP NEAR PTR OPR即JMP 标号:段内直接近转移 ;转移的目标地址IP为当前IP值与代码中的16位位移量的和。(IP=IP+16位位移量)

       JMP OPR:段内间接转移指令;转移目标地址由寄存器或存储单元给出即(IP=(EA))。

如:JMP WORD PTR  [BX+20H];求出物理地址PA(DS*10H+BX+20H)后,程序从CS当前地址跳转至PA处继续执行。

       JMP FAR PTR 标号:段间直接转移指令;IP=标号的偏移地址,CS=标号的段地址。

       JMP DWORD PTR OPR:段间间接转移指令;IP=(EA),CS=(EA+2)(EA只能通过存储器寻址方式确定)。

       LOOP:循环指令(CX=0结束循环)

条件转移指令:(段内直接段转移)

单条件转移指令:(ZF、SF、OF、PF、CF)

       JZ/JE            OPR:    ZF=1(结果为0)转移指令            

       JNZ/JNE      OPR:    ZF=0(结果不为0)转移指令

       JS         OPR:           SF=1(结果为负)转移指令

       JNS       OPR:           SF=1(结果为正)转移指令

       JO         OPR:           OF=1(有溢出)转移指令

       JNO      OPR:           OF=0(无溢出)转移指令

       JP/JPE  OPR:           PF=1(第八位1的个数为偶数)转移指令

       JNP/JPO      OPR:    PF=0(第八位1个数为奇数)转移指令

       JC        OPR:           CF=1(右进位)转移指令

       JNC        OPR:           CF=0(无进位)转移指令

比较两个无符号数条件转移指令:

       JB/JNAE        OPR:小于转移           <

       JBE/JNA        OPR:小于等于转移    <=

       JA/JNBE        OPR:大于转移           >

       JAE/JNB        OPR:大于等于转移    >=

比较两个有符号数条件转移指令:

       JL/JNGE        OPR:小于转移           <

       JLE/JNG        OPR:小于等于转移    <=

       JG/JNLE        OPR:大于转移           >

       JGE/JNL        OPR:大于等于转移    >=

DOS功能调用:

  1. 键盘输入单字符(1号调用)

MOV   AH,01H

INT   21H

  1. 显示单字符(2号调用)

DL,待显示字符ASCALL码或’字符’(引号表示)

MOV  AH,02H

INT  21H

  1. 显示字符串(9号调用)

LEA   DL,字符串首地址

MOV  AH,09H

INT   21H

  1. 键盘输入字符串(10号调用)

LEA   DX,输入缓存区首地址(前提要先定义缓存区)

  MOV  AH,0AH

  INT   21H

  1. 返回操作系统(4CH号调用)

MOV  AH,4CH

INT   21H

宏定义:

       宏指令名       MACRO         参数名

                            宏体

                            ENDM

如:WRITE   MACRO   AA 

                     LEA        DX,AA

                     MOV      AH,9

                     INT        21H

                     ENDM  ;显示AA中的内容

子程序定义:

FED  PROC  NEAR/FAR

              [内容]

              RET(返回指令)

       FED  ENDP   

4、中断系统:

(1)基本概念:

中断:在执行程序过程中,由于某事件的发生,迫使CPU暂停当前程序去执行该事件的程序,等该事件程序结束后又返回原程序断点处继续执行原程序的整个过程。

中断源:即外设。键盘、显示器、打印机、软件中断等。

(2)中断系统功能:

        实现中断并返回;实现优先权排队;高级中断源能中断低级的中断处理。

(3)中断处理过程

中断请求。中断源向CPU发出中断请求,中断请求存入CPU的中断请求输入端。(保存中断请求信号)。

中断判优。判别多中断源请求优先权。

       中断响应。中断当前程序,去执行中断程序。

       中断处理保护现场(要用到的寄存器内容入栈保存)

                       开中断(若允许中断嵌套,则开中断,响应更高级的中断请求)

                       中断服务(执行中断源要求的操作)

                       关中断(中断服务结束后关中断,以保证有效的恢复现场)

恢复现场(将保存的寄存器内容从栈中弹出,以便将程序断点处的状态恢复到中断前状态)

       中断返回。寄存器内容弹出栈,CPU返回主程序断点,自动开中断

(4) 中断类型:

外部中断:(硬件中断)(优先级更高)

非屏蔽中断:由NMI引脚产生的中断请求。不受IF的限制,CPU均会执行该信号请求,用于系统掉电、紧急停机等。

可屏蔽中断:由INTR引脚产生的中断请求。于IF标志位状态有关,IF=1时执行中断请求,IF=0时,CPU不响应,中断被屏蔽。

内部中断:(软中断)

由软中断指令或CPU本身引起的中断

中断向量地址=4×中断类型码

CPU执行中断操作步骤:CPU根据中断源的中断类型码转到相应的中断服务程序去执行。

                     CPU将使用的寄存器入栈保存;

                     获得中断类型码(即INT 后面的常数);

                     计算中断向量地址

                     段地址放CS,偏移地址放IP

                     转中断服务

                     恢复现场,执行中断返回指令IRET

继续执行主程序

                     如中断指令:INT  4AH;它的中断向量地址为4*4AH=128H,即128H、129H存放该指令的偏移地址,12AH、12BH存放该指令的段地址,取出该指令的段地址和偏移地址CPU就可以转入中断服务程序,执行中断。

                    

中断向量表的设置:

       设中断服务程序入口地址为VINTSUB,中断类型码为N

       PUSH     DS                                             ;数据段内容入栈保存

       MOV     AX,  0                                       

       MOV      DS,  AX                                      ;中断向量表的段地址送入DS(从0开始)

       MOV     BX,  N*4                                    ;BX为中断向量地址

       MOV      AX,  OFFSET  VINTSUB            ;将中断向量偏移地址存入中断向量表

       MOV      [BX], AX                                   

       MOV      AX, SEG VINTSUB                     ;将中断向量段地址存入中断向量表

       MOV      [BX+2],  AX

       POP       DS                                             ;DS出栈,恢复数据段地址

DOS功能调用设置中断向量:

       MOV      AH, 25H        ;预置功能号

       MOV      AL, N             ;预置中断类型码

       INT        21H              

如:DS:DX预置中断向量段地址和偏移地址

       PUSH     DS                                      ;保存DS内容

       MOV      AX, SEG  VINTSUB              ;中断向量段地址存入DS

       MOV      DS, AX                              

       MOV      DX, OFFSET VINTSUB        ;中断向量偏移地址存入DX

       MOV      AH, 25H                             ;调用DOS执行中断服务

       MOV      AL, N

       INT        21H

       POP       DS                                      ;恢复DS

中断控制器8259A:

由IRR中断请求寄存器、PR优先级判别器、ISR中断服务寄存器、IMR中断屏蔽寄存器、初始化命令寄存器、操作命令寄存器组成。

IRR中断请求寄存器(8位):存放外部输入的中断请求信号IRQ7~IRQ0,CPU响应了这个中断请求,则相应位置为1。

ISR中断服务寄存器(8位):记录正在处理中的所有中断级,某几个中断级正在被服务时,ISR的相应位置为1。

IMR(OCW1)中断屏蔽寄存器(8位):对IRR起屏蔽作用,当某些需要屏蔽时,相应位置为1。

PR优先权电路:对IRR中未屏蔽的中断请求进行判优。

ICW1~ICW4初始化命令寄存器(均为8位):初始化后不再修改。

OCW1~OCW3操作命令寄存器(均为8位):

8259A的工作方式:

中断嵌套方式:

       普通全嵌套方式;特殊全嵌套方式。

中断屏蔽方式:

       普通屏蔽;特殊屏蔽。

中断优先权循环方式:

       自动循环方式(等优先权方式);特殊循环方式(指定最低级的循环方式)

中断查询方式:采用OCW3实现

中断结束方式:ISR的1位置清零。

       自动结束方式;非自动结束方式。

中断触发发方式

       边沿触发;电平触发。

8259A的编程:

初始化命令字:

ICW1:规定8259A的初始状态。

ICW2:规定不同中断源的中断类型码。(其中填的是中断信号的中断类型码)

ICW3:仅用于8259A的级联方式。

ICW4:规定8259A的工作方式(中断优先级和中断结束方式等)

ICW1必须写入偶地址寄存器,ICW2~ICW4写入奇地址寄存器。

      

OCW1:写入IMR中断屏蔽寄存器中,将对应请求输入线IRQ1~IRQ7位置置1/0。

OCW2:控制中断结束方式和优先修改权。

R:指示优先权是否循环。1为循环,0为不循环。

SL:决定第三位(L2、L1、L0)是否有效。1为有效,0为无效。

EOI:指示OCW2是否为中断结束命令。1为中断结束,0为EOI命令循环。

L2、L1、L0:当SL=1时有效,指示该操作命令字涉及的哪一级中断。

OCW3:用于控制中断状态有读出、选择、查询及屏蔽方式。

8255并行接口芯片

由数据端口A、B、C和控制寄存器组成

三种工作方式:

       方式0:基本输入输出方式

       方式1:选通输入输出方式

       方式2:双向输入输出方式(只有A口能用)

8253定时器/计数器接口芯片

组成:

       三个独立的计数器(0、1、2,CLK计数输入、OUT输出信号、GATE门控信号)

       每个计数器都由寄存器(CR计数初值寄存器、CE减1计数器、OL输出锁存器)

       控制寄存器(保存CPU送来的工作方式控制字)

后面几张截图截的其他博主的内容。希望这篇文章对大家有所帮助~

猜你喜欢

转载自blog.csdn.net/weixin_61936651/article/details/124914557