8086/8088微处理器的编程结构编程结构:是指从程序员和使用者的角度看到的结构,亦可称为功能结构。
从功能上来看,8086CPU可分为两部分,即总线接口部件BIU和执行部件EU。
总线接口部件(BIU组成:①段寄存器(DS、CS、ES、SS ②16 位指令指针寄存器IP(指向下一条要取出的指令代码;③20位地址加法器(用来产生20位地址;④6字节(8088为4字节指令队列缓冲器;⑤总线控制逻辑。
功能:负责从内存中取指令,送入指令队列,实现CPU与存储器和I/O接口之间的数据传送。
执行部件(EU组成:①ALU(算术逻辑单元;②数据寄存器(AX、BX、CX、DX;③指针和变址寄存器(BP、SP、SI、DI;④标志寄存器(PSW;⑤EU控制系统。
功能:负责分析指令和执行指令。
BIU和EU的动作协调原则BIU和EU按以下流水线技术原则协调工作,共同完成所要求的任务:①每当指令队列中有两个空字节,BIU就会自动把指令取到指令队列中。
其取指的顺序是按指令在程序中出现的前后顺序。
②每当EU准备执行一条指令时,它会从BIU部件的指令队列前部取出指令的代码,然后用几个时钟周期去执行指令。
在执行指令的过程中,如果必须访问存储器或者I/O端口,那么EU就会请求BIU,进入总线周期,完成访问内存或者I/O端口的操作;如果此时BIU正好处于空闲状态,会立即响应EU的总线请求。
如BIU正将某个指令字节取到指令队列中,则BIU将首先完成这个取指令的总线周期,然后再去响应EU发出的访问总线的请求。
③当指令队列已满,且EU又没有总线访问请求时,BIU便进入空闲状态。
④在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发生了变化,则指令队列中已经装入的字节被自动消除,BIU会接着往指令队列装入转向的另一程序段中的指令代码。
8086/8088内部的寄存器可以分为通用寄存器和专用寄存器两大类,通用寄存器包括数据寄存器、指针和变址寄存器,数据寄存器(AX、BX、CX、DX:可以存放16位的操作数,也可分为8个8位的寄存器(AL、AH;BL、BH;CL、CH;DL、DH来使用。
其中AX称为累加器,BX称为基址寄存器,CX称为计数寄存器,DX称为数据寄存器,这些寄存器在具体使用上有一定的差别。
指针寄存器:SP和BP,其中SP是堆栈指针寄存器,由它和堆栈段寄存器SS一起来确定堆栈在内存中的位置; BP是基数指针寄存器,通常用于存放基地址。
变址寄存器:系统中有两个16位的变址寄存器SI和DI,其中SI是源变址寄存器,DI是目的变址寄存器,都用于指令的变址寻址方式。
专用寄存器包括段寄存器、指令指针和标志寄存器。
段寄存器:系统中共有4个16位段寄存器,即代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES。
这些段寄存器的内容与有效的地址偏移量一起,可确定内存的物理地址。
通常CS划定并控制程序区,DS和ES控制数据区,SS控制堆栈区。
指令指针寄存器指令指针寄存器IP:用来控制CPU的指令执行顺序,它和代码段寄存器CS一起可以确定当前所要取的指令的内存地址。
顺序执行程序时,CPU每取一个指令字节,IP自动加1,指向下一个要读取的字节;当IP单独改变时,会发生段内的程序转移;当CS和IP同时改变时,会产生段间的程序转移。
标志寄存器PSW:用来存放CPU在工作过程中的状态。
共有9个标志位。
可分成两类:一类为状态标志,一类为控制标志。
其中状态标志表示前一步操作(如加、减等执行以后,ALU所处的状态,后续操作可以根据这些状态标志进行判断,实现转移;控制标志则可以通过指令人为设置,用以对某一种特定的功能起控制作用(如中断屏蔽等,反映了人们对微机系统工作方式的可控制性。
10. 8086CPU由哪两部分组成?它们的主要功能各是什么?它们之间是如何协调工作的?11.8086CPU中有哪些寄存器?各有什么用途?标志寄存器PSW有哪些标志位?各在什么情况下置位?12.8086系统中储存器的逻辑地址和物理地址之间有什么关系?表示的范围各为多少?13.已知当前数据段位于储存器的A1000H到B0FFFH范围内,问DS=?14.某程序数据段中存有两个数据字1234H和5A6BH,若已知DS=5AA0H,它们的偏移地址分别为245AH和3245H,试画出它们在储存器中的存放情况。
立即寻址方式MOV AH, 80H ADD AX, 1234HMOV ECX, 123456H MOV B1, 12HMOV W1, 3456H ADD D1, 32123456H寄存器寻址方式MOV AX, BX; MOV CL, DL;MOV ESI, EDI; INC CX;ROL AH, 1;直接寻址方式若DS=4000H,则此指令式将数据段中物理地址为42000H 单元的内容传送AL 寄存器。
例:MOV AL,[2000H]; [DS*10H+2000H]送 AL;MOV AX,[2000H]; [DS*10H+2000H]送AL,[DS*10H+2000H+1]送AH;MOV AL,ES:[2000H];这里ES是段超越前缀,所以源操作数是在ES*10H+2000H的内存单元中。
MOV [3000H],AL;目的操作数采用直接寻址,将AL送[DS*10H+3000H]的内存单元。
立即寻址 MOV AX,3069H MOV 40H, AL(× MOV AH, 3064H (×寄存器寻址 MOV AL,BH MOV AH, BX (× MOV CS, AX (×直接寻址 MOV AX,[2000H] MOV AX, VALUE(× MOV AX, WORD PTR VALUE (寄存器间接寻址MOV AX,[BX] MOV AX,[CX] (×寄存器相对寻址 MOV AX,COUNT[SI] MOV AX,[COUNT+SI]基址变址寻址 MOV AX,[BP][DI] MOV AX, [BX][BP](×MOV AX, [SI][DI](×相对基址变址寻址MOV AX,MASK[BX][SI]MOV DS,ES (× MOV DS,2000H (×(1 MOV CS,1000H (2 ADC BX,25H (3 ADD [BX],20 (4 MUL AX,BL (5 PUSH CS (6 MOV DX,2000H (7 ADD [BX+SI],30H (8 POP CS (9 INC [SI] (10MOV [BX],[SI]解:(1错误(2正确(3错误(4错误(5正确(6正确(7错误(8错误(9错误(10错误①屏蔽AL的第0、1两位②置AL的第5位为1 ③使AL的第0、1位变反④测试某些位是0是1 AND AL,0FCH OR AL,20H XOR AL,3 TEST AL,1 JZ EVEN有100个学生的计算机课程成绩存放在COMPUT缓冲区中,编写指令序列统计85分以上、60~85分、60分以下各有多少人,并把统计结果存入ORDER开始的三个字节单元中。
解:LEA SI,COMPUT AGAIN: MOV AL, [SI] GE85: CMP AH,5 MOV CX,100 CBW JGE RANGE1MOV BL,10 IDIV BL RANGE2: INC DL MOV BH,0 CMP AL,9 JMP NEXTMOV DX,0 JGE RANGE1 RANGE1: INC DHCMP AL,8 JE GE85 NEXT: INC SICMP AL,6 JGE RANGE2 LOOP AGAININC BH MOV ORDER,DHJMP NEXT MOV ORDER+1,DLMOV ORDER+2,BHHLT编写子程序,将从键盘输入的小写字母用大写字母在屏幕显示出来,如不是字母则结束。
解:CODE SEGMENT NEXT: MOV AH,1 MOV DL,ALASSUME CS:CODE INT 21H MOV AH,02HKEYIN PROC FAR CMP AL,61H INT 21HPUSH AX JB EXIT JMP NEXTPUSH DX CMP AL,7AH POP DXJA EXIT POP AXSUB AL,20H RETKEYIN ENDPCODE ENDSEND KEYIN6.13 编写子程序,要求从键盘输入一个4位的十六进制数,然后将其转换成二进制数并在屏幕上显示出来。
1、 DATPRO SEGMENT2、START:MOV AX,DATPRO3、 AGAIN:MOV AL,[SI]BUFF DB 5 MOV DS,AX CMP AL,30HDB ? LEA DX,BUFF JB EXITDB 5 DUP(? MOV AH,0AH CMP AL,39HDATPRO ENDS INT 21H JBE DECIPROSEG SEGMENT MOV BL,[BUFF+1] CMP AL,61H ASSUME CS:PROSEG,DS:DATPRO LEA SI,BUFF+2 JB EXIT CMP AL,66H JA EXIT4、 SUB AL,27HDECI: SUB AL,30H DISPL:PUSH AXMOV CL,4 MOV AH,2SHL AL,CL INT 21HMOV CX,4 POP AXLOOP1: SHL AL,1 LOOP LOOP1JC ONE INC BLMOV DL,30H INC SIJMP DISPL CMP BL,0ONE:MOV DL,31H JNZ AGAINEXIT:MOV AH,4CHINT 21HPROSEG ENDSEND START7.1 什么是中断?中断有什么作用?解:中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU 暂时中断当前正在执行的程序而转去执行相应的时间处理程序。
待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
利用中断,计算机可以较好的实现CPU与外部设备之间的同步工作,进行实时处理,可以大大提高CPU的工作效率。
7.2 8086/8088系统中,中断分为哪几类?解:硬件中断(外部中断;软件中断(内部中断。
硬件中断又可分为:非屏蔽中断、可屏蔽中断。
7.3 8086/8088CPU上中断请求和中断响应信号是什么?解:INTA7.4 中断标志IF的作用是什么?解:IF中断标志位,IF=1表示允许CPU响应可屏蔽中断。
7.5 什么是中断向量? 中断向量表?解:中断向量是中断服务程序的人口地址。