微机原理与接口技术第二版课后习题答案,龚尚福版 - 图文 下载本文

微机原理与接口技术部分答案第二版

主编:龚尚福

2.2 8086微处理器由哪几部分组成?各部分的功能是什么?16355

【解】:按功能可分为两部分:总线接口单元BIU(Bus Interface Unit)和执行单元EU(Execution Unit)。 总线接口单元BIU是8086 CPU在存储器和I/O设备之间的接口部件,负责对全部引脚的操作,即8086对存储器和I/O设备的所有操作都是由BIU完成的。所有对外部总线的操作都必须有正确的地址和适当的控制信号,BIU中的各部件主要是围绕这个目标设计的。它提供了16位双向数据总线、20位地址总线和若干条控制总线。

其具体任务是:负责从内存单元中预取指令,并将它们送到指令队列缓冲器暂存。CPU执行指令时,总线接口单元要配合执行单元,从指定的内存单元或I/O端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或I/O端口中。

执行单元EU中包含1个16位的运算器ALU、8个16位的寄存器、1个16位标志寄存器FR、1个运算暂存器和执行单元的控制电路。这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。EU对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。如果指令队列缓冲器中是空的,那么EU就要等待BIU通过外部总线从存储器中取得指令并送到EU,通过译码电路分析,发出相应控制命令,控制ALU数据总线中数据的流向。

2.3 简述8086 CPU的寄存器组织。

【解】:(1)通用寄存器:通用寄存器又称数据寄存器,既可作为16位数据寄存器使用,也可作为两个8位数据寄存器使用。当用作16位时,称为AX、BX、CX、DX。当用作8位时,AH、BH、CH、DH存放高字节,AL、BL、CL、DL存放低字节,并且可独立寻址。这样,4个16位寄存器就可当作8个8位寄存器来使用。

(2)段寄存器:段寄存器共有4个CS、DS、SS、ES。代码段寄存器CS表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供;堆栈段寄存器SS指定当前堆栈的起始地址;数据段寄存器DS指示当前程序使用的数据所存放段的起始地址;附加段寄存器ES则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。

(3)指针和变址寄存器:堆栈指针SP用以指出在堆栈段中当前栈顶的地址。入栈(PUSH)和出栈(POP)指令由SP给出栈顶的偏移地址。基址指针BP指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。变址寄存器SI和DI用来存放当前数据段中某个单元的偏移量。

(4)指令指针与标志寄存器:指令指针IP的功能跟Z80 CPU中的程序计数器PC的功能类似。正常运行时,IP中存放的是BIU要取的下一条指令的偏移地址。它具有自动加1功能,每当执行一次取指令操作时,它将自动加1,使它指向要取的下一内存单元,每取一个字节后IP内容加1,而取一个字后IP内容则加2。某些指令可使IP值改变,某些指令还可使IP值压入堆栈或从堆栈中弹出。标志寄存器FLAGS是16位的寄存器,8086共使用了9个有效位,标志寄存器格式如图2.5所示。其中的6位是状态标志位,3位为控制标志位。状态标志位是当一些指令执行后,表征所产生数据的一些特征。而控制标志位则可以由程序写入,以达到控制处理机状态或程序执行方式的表征。

2.4 试述8086 CPU标志寄存器各位的含义与作用。 【解】:(1) 6个状态标志位的功能分别叙述如下:

CF(Carry Flag)——进位标志位。当执行一个加法(或减法)运算,使最高位产生进位(或借位)时,CF为1;否则为0。

PF(Parity Flag)——奇偶标志位。该标志位反映运算结果中1的个数是偶数还是奇数。当指令执行结果的低8位中含有偶数个1时,PF=1;否则PF=0。

AF(Auxiliary carry Flag)——辅助进位标志位。当执行一个加法(或减法)运算,使结果的低4位向高4位有进位(或借位)时,AF=1;否则AF=0。

ZF(Zero Flag)——零标志位。若当前的运算结果为零,ZF=1;否则ZF=0。 SF(Sign Flag)——符号标志位。它和运算结果的最高位相同。

OF(Overflow Flag)——溢出标志位。当补码运算有溢出时,OF=1;否则OF=0。 (2) 3个控制标志位用来控制CPU的操作,由指令进行置位和复位。

DF(Direction Flag)——方向标志位。它用以指定字符串处理时的方向,当该位置“1”时,字符串以递减顺序处理,即地址以从高到低顺序递减。反之,则以递增顺序处理。 IF(Interrupt enable Flag)——中断允许标志位。它用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则不响应外部中断。

注意:IF的状态不影响非屏蔽中断请求(NMI)和CPU内部中断请求。

TF(Trap Flag)——跟踪标志位。它是为调试程序而设定的陷阱控制位。当该位置“1”时,8086 CPU处于单步状态,此时CPU每执行完一条指令就自动产生一次内部中断。当该位复位后,CPU恢复正常工作。

2.5 8086中,存储器为什么采用分段管理?

【解】:8086/8088的地址总线宽度为20位,其最大寻址空间是1 MB。而其他微处理器则在实模式下只能访问前1 MB的存储器地址。实际上,实模式就是为8086/8088而设计的工作方式,它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。每个段的大小可达64 KB,这样段内地址可以用16位表示。存储器分段的方法虽然给程序设计带来一定的麻烦,但这种方法可以扩大存储空间,而且对于程序的再定位也是很方便的。

2.6 什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?

【解】:物理地址:完成存储器单元或I/O端口寻址的实际地址成为物理地址,CPU型号不同其物理地址也不同。物理地址是指CPU和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。在取指令时,CPU自动选择代码段寄存器CS,左移4位后,加上指令提供的16位偏移地址,计算出要取指令的物理地址。堆栈操作时,CPU自动选择堆栈段寄存器SS,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,CPU会自动选择数据段寄存器(或附加段寄存器ES),将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。

2.9 在80x86微机的输入/输出指令中,I/O端号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00H~0FFH的端口号。试问可直接由指令指定的I/O端口数是多少? 【解】:由于在80x86的输入/输出指令中,可以直接在00H~0FFH指定,所以直接由指令指定的I/O端口数是256。

3.1 指令分成几部分?每部分的作用是什么?

【解】:每条指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令所要完成的操作。

地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。

3.2 指出下列MOV指令的源操作数的寻址方式: MOV AX,1234H MOV MOV MOV MOV MOV MOV MOV

AX,BX AX,[BX]

AX,TABLE;TABLE ;TABLE是一个变量名 AX,[1234H] AX,[BX+1234H] AX,[BP][SI]

AX,[BX+SI-1234H]

【解】:MOV AX,1234H 立即寻址

MOV AX,BX 寄存器寻址

MOV AX,[BX] 寄存器间接寻址 MOV AX,TABLE ;TABLE是一个变量名 直接寻址方式 MOV AX,[1234H] 直接寻址方式 MOV AX,[BX+1234H] 寄存器相对寻址 MOV AX,[BP][SI] 基址变址寻址

MOV AX,[BX+SI-1234H] 相对地址变址寻址 3.3 设:(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址:

MOV AX,[1234H]

MOV MOV MOV MOV

AX,[BX]

AX,TABLE[BX] AX,[BP]

AX,[BP][SI]

【解】: 存储单元地址:(DS)×10H + EA =2000H×10H+1234H=21234H

存储单元地址:(DS)×10H +(BX)=2000H×10H+0100H=20100H

存储单元地址:(DS)×10H+EA=2000H×10H+0100H+000AH=2010AH 存储单元地址:(SS)×10H+EA=1000H×10H+0010H=10010H

储单元地址:(SS)×10H+EA=1000H×10H+0010H+0002H =10012H

3.4 设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要求使用以下几种寻址方式:

⑴ 直接寻址 ⑵ 寄存器间接寻址 ⑶ 寄存器相对寻址 ⑷ 基址变址寻址 【解】:(1)直接寻址(2)寄存器间接寻址(3)寄存器相对寻址(4)基址变址寻址 MOV AX, ARRAY+8 MOV BX, ARRAY+8 MOV BX, 8 LEA BX, ARRAY MOV AX, [BX] MOV AX, ARRAY[BX] MOV SI, 8

MOV AX,[BX+SI]

3.5 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在当前代码段偏移地址是0100H处,(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=30H,数据段定义的字变量ARRAY的内容为1000H,试写出下列转移指令的目标转移地址

⑴ JMP NEAR PTR

⑵ JMP BX ⑶ JMP WORD PTR ARRAY 【解】:⑴ JMP NEAR PTR 此转移指令的目标转移地址为:20100H

⑵ JMP BX 此转移指令的目标转移地址为:21000H

⑶ JMP WORD PTR ARRAY 此转移指令的目标转移地址为:23000H 3.6 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在3000H:1000H处。当前(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=03H,(11002H)=00H,(11003H)=30H,数据段定义的字变量ARRAY的内容为0300H,(ARRAY+2)=3000H,试写出下列转移指令的目标转移地址:

⑴ JMP FAR ⑵ JMP DWORD 【解】:⑴ JMP

⑵ JMP

PTR ARRAY

PTR NEXT 此转移指令的目标转移地址为:31000H ARRAY 此转移指令的目标转移地址为:30300H

NEXT

FAR DWORD

3.7 下列每组指令有何区别?

(1) MOV AX,1234H MOV AX,[1234H] (2) MOV AX,TABLE MOV AX,[TABLE] (3) MOV AX,TABLE LEA AX,TALBE (4) MOV AX,BX MOV AX,[BX]

【解】:(1) MOV AX,1234H 将立即数1234H送到寄存器AX中

MOV AX,[1234H] 将存储区[1234H]中的内容送到寄存器AX中

(2) MOV AX,TABLE 将标号TABLE的地址送到寄存器AX中

MOV AX,[TABLE] 将存储区[TABLE] 中的内容送到寄存器AX中 (3) MOV AX,TABLE 将标号TABLE的地址送到寄存器AX中 LEA AX,TALBE 将标号TABLE的地址送到寄存器AX中 (4) MOV AX,BX 寄存器寻址 MOV AX,[BX] 寄存器间接寻址

3.8 MOV CS,AX指令正确吗?

行更改。

3.9 写一指令序列,将3456H装入DS寄存器。

【解】:MOV AX, 3456H MOV DS, AX

3.10 若正在访问堆栈中03600H单元,则SS和SP的值是多少? 【解】:若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。

3.11 若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。 【解】:物理地址=(SS)×10H+SP

SP→20006H 78H

20007H 56H SP→20008H 34H 20008H 34H SP→2000AH 20009H 12H 20009H 12H 2000AH 2000AH

【解】:MOV CS,AX指令不正确。因为CS是指令寄存器,由系统自动改变,不能由指令进

3.16 解释XLAT指令是怎样转换AL寄存器中的内容的。并编写一段程序用XLAT指令将BCD码0~9转换成对应的ASCII码,并将ASCII码存入数据ARRAY中。 【解】:XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。 程序如下:TABLE DB 30H, 31H, ┅, 39H ARRAY DB 1O DUP(?) MOV CL, 10 MOV SI, 0

MOV BX, OFFSET TABLE MOV AL, AL AGAIN: XLAT

MOV [SI], AL INC SI INC AL

LOOP AGAIN

3.17 若(AX)=0001H,(BX)=0FFFFH,执行ADD AX,BX之后,标志位ZF、SF、CF和OF各是什么? 【解】: (AX)= 0001H = 0000 0000 0000 0001 B

+ (BX)=0FFFFH = 1111 1111 1111 1111 B

(AX)= 0001H = 1 0000 0000 0000 0000 B 则:ZF=1、SF=0、CF=1、OF=0

3.18 写一指令序列完成将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。 【解】: OR AX, 000FH (OR AX, 0000 0000 0000 1111 B) AND AX, 1FFFH (AND AX, 0001 1111 1111 1111 B) XOR AX, 01C0H (XOR AX, 0000 0001 1100 0000 B)

3.19 试写出执行下列指令序列后AX寄存器的内容。执行 前(AX)=1234H。 MOV CL,7 SHL BX,CL 【解】:(AX) = 1234H = 0001 0010 0011 0100 B

执行后:(AX) = 0 0011 0100 0000 000 B = 0001 1010 0000 0000 B = 1A00H 4.1 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? ⑴ MOV BP,AL

⑵ MOV WORD_OP[BX+4*3][DI],SP

⑶ MOV WORD_OP1,WORD_OP2 ⑷ MOV AX,WORD_OP1[DX] ⑸ MOV SAVE WORD,DS ⑹ MOV SP,SS:DATA_WORD[BX][SI] ⑺ MOV [BX][SI],2

⑻ MOV AX,WORD_OP1+WORD_OP2

⑼ MOV AX,WORD_OP1-WORD_OP2+100 ⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2 【解】:⑴ MOV BP,AL

两个操作数不匹配

⑵ MOV WORD_OP[BX+4*3][DI],SP ⑶ ⑷ ⑸ ⑹

MOV MOV MOV MOV

WORD_OP1,WORD_OP2 两个内存单元之间不能直接传送数据 AX,WORD_OP1[DX] SAVE WORD,DS

SP,SS:DATA_WORD[BX][SI] 当基址为BX时,选取DS寄存器

⑺ MOV [BX][SI],2

⑻ MOV AX,WORD_OP1+WORD_OP2 ⑼ MOV AX,WORD_OP1-WORD_OP2+100 ⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2

4.2 假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处: ⑴ ADD VAR1,VAR2 ⑶ JMP LAB[SI]

⑵ SUB AL,VAR1 ⑷ JNZ VAR1

⑸ JMP NEAR LAB 【解】:⑴ ADD VAR1,VAR2

ADD两个操作数不能同时为存储单元, MOV AX, VAR1

ADD AX, VAR2 ⑵ SUB AL,VAR1 两个操作数不匹配 SUB AX, VAR1 ⑶ JMP LAB[SI]

LAB与[SI]不能相加

JMP WORD PTR [SI] ⑷ JNZ VAR1

JNZ后面应是标号,不应是变量 JNZ LAB

⑸ JMP NEAR LAB

缺少PTR运算符

JMP NEAR PTR LAB

4.3 画图说明下列语句所分配的存储空间及初始化的数据值。

⑴ BYTE_VAR DB ’BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?) ⑵ WORD_VAR DW 5 DUP(0,1,2),?,-5,,'BY','TE',256H 【解】:(1) (2)

BYTE_VAR 41H B

59H 54H 45H 0CH F4H 00H - 01H 02H 01H 02H 00H - 01H 02H 01H 02H Y T E 12 -12H 0 1 2 1 2 0 1 2 1 2 WORD_VAR 00H 00H 01H 00H 02H 00H ? 00H 00H 01H 00H 02H 00H - - FBH 0 1 2 30个字节 0 1 2 2

4.4 假设程序中的数据定义如下: PARTNO DW ?

PNAME DB 16 DUP(?) COUNT DD ?

PLENTH EQU $-PARTNO

问PLENTH的值为多少?它表示什么意义? 【解】:PLENTH的值为22,它表示数据的个数。 4.5 有符号定义语句如下:

BUFF DB 1,2,3,’123’ EBUFF DB 0

L EQU EBUFF-BUFF 问L的值是多少? 【解】:PLENTH的值为6。

4.6 假设程序中的数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?)

CODE-LIST DB 1,7,8,3,2

⑴ 用一条MOV指令将LNAME的偏移地址放入AX。

⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。

00H - 01H 02H 01H 02H 0 1 2 1 2 FFH 41H 00H 59H 00H 54H 00H 45H 00H 56H 02H -5 B Y T E 256H ⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 【解】: ⑴ 用一条MOV指令将LNAME的偏移地址放入AX。 MOV AX, OFFSET LANME

⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。

MOV SI, WORD PTR CODE_LSIT

⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 CODE_LENGHT EQU CITY-CODE_LIST

4.7 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 【解】:参考程序如下: DATA_SEG SEGMENT DB1 DB 5

DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?)

COUNT DB 5

MAX DB ? MIN DB ? DATA_SEG ENDS

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG, DS:DATA_SEG START PROC FAR PUSH DS MOV AX, 0 PUSH AX

MOV AX, DATA_SEG MOV DS, AX LEA BX, DATA_LIST MOV CX, COUNT-1 MOV AL, [BX] MOV AH, [BX+1] LOOP1: INC BX CMP AH, AL JAE LOOP1 XCHG AH, AL LOOP2 INC BX

CMP AH, [BX] JAE LIS

XCHG AH, [BX] JMP LOP2

LIS: CMP AL , [BX] JBE LOP2 XCHG AL, [BX] LOOP2

MOV MAX, AH MOV MIN, AL RET START ENDP CODE_SEG ENDS END START 4.10 给出等值语句如下: ALPHA EQU

100 25 2

⑵ ALPHA MOD

GAMMA+BETA

BETA EQU

GAMMA EQU

下列表达式的值是多少? ⑴ ALPHA*100+BETA

⑶ (ALPHA+2)*BETA-2 ⑷ (BETA/3) MOD 5

⑸ (ALPHA+3)*(BETA MOD GAMMA) ⑹ ALPHA GE GAMMA ⑺ BETA AND 7 ⑻ GAMMA OR 3

【解】: ⑴ ALPHA*100+BETA ⑵ ⑶

100×10025=10025 ALPHA MOD GAMMA+BETA 100/(25+2)=19 (ALPHA+2)*BETA-2

(100+2)*25=2548 ⑷ (BETA/3) MOD 5

(25/3) MOD 5=3

⑸ (ALPHA+3)*(BETA MOD GAMMA) (100+3)*(25 MOD 2)=103 ⑹ ALPHA GE GAMMA 100 GZ GAMMA=0FFFFH ⑺ BETA AND 7 25 AND 7=1 ⑻ GAMMA OR 3 2 OR 3=3

4.9 对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示) TABLEA DW 10 DUP(?) TABLEBDB 10 DUP(?) TABLEC ┇

DB

’1234’

MOV AX,LENGTH TABLEA MOV BL,LENGTH TABLEB MOV CL,LENGTH TABLEC 【解】: MOV AX,LENGTH TABLEA MOV AX, OOOAH MOV MOV

BL,LENGTH TABLEB MOV BL, 0AH CL,LENGTH TABLEC MOV CL, O1H

4.10 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么? FLDB DB ? TABLEA DW 20 DUP(?) TABLEBDB ‘ABCD’

⑴ MOV AX,TYPE FLDB

⑵ MOV AX,TYPE TABLEA ⑷ MOV DX,SIZE TABLEA

⑶ MOV CX,LENGTH TABLEA ⑸ MOV CX,LENGTH TABLEB

【解】:(1) MOV AX,TYPE FLDB (AX)= 1 (2) MOV AX,TYPE TABLEA (AX)= 2 (3) MOV CX,LENGTH TABLEA (CX)= 20 (4) MOV DX,SIZE TABLEA (DX)= 40 (5) MOV CX,LENGTH TABLEB (CX)= 1

8.1 解释下列概念:

中断DMA,中断源,中断向量中断向量表,不可屏蔽中断,通道FCB,中断嵌套,文件标记中断入口,可屏蔽中断

【解】:答:⑴ 当进程要求设备输入数据时,CPU把准备存放输入数据的内存起始地址以及要传送的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器。

⑵ 发出数据传输要求的进行进入等待状态。此时正在执行的CPU指令被暂时挂起。进程调度程序调度其他进程占据CPU。

⑶ 输入设备不断地窃取CPU工作周期,将数据缓冲寄存器中的数据源源不断地写入内存,直到所要求的字节全部传送完毕。 ⑷ DMA控制器在传送完所有字节时,通过中断请求线发出中断信号。CPU在接收到中断信号后,转入中断处理程序进行后续处理。

⑸ 中断处理结束后,CPU返回到被中断的进程中,或切换到新的进程上下文环境中,继续执行。

中断源:引起中断的事件称为中断源。

中断向量表:每种中断都给安排一个中断类型号。80x86中断系统能处理256种类型的中断,类型号为0H~0FFH。如图8.3所示的中断源,系统时钟的中断类型为08,键盘为09,软中断中的除法错误的中断类型为0等。每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各类型中断处理程序的入口地址表。

中断嵌套:正在运行的中断处理程序,又被其他中断源中断,这种情况叫做中断嵌套。

中断就是CPU在执行当前程序时由于内外部事件引起CPU暂时停止当前正在执行的程序而转向执行请求CPU暂时停止的内外部事件的服务程序,该程序处理完后又返回继续执行被停止的程序;中断向量是中断处理子程序的入口地址;地址范围是00000H-003FFH。

实验一 系统认识实验

一.实验目的

掌握TDN86/88教学实验系统的基本操作。

二.实验设备

TDN86/88教学实验系统一台。

三.实验内容及步骤

1. 系统认识实验(1) (1)程序的输入与修改

从3500H内存单元开始建立0-15共16个数据。

实验步骤:

a. 使用串行通讯电缆将实验系统与PC机相连。 b. 开启实验系统。

c. 在系统软件所在目录(默认为C:\\TANGDU\\W8688)下运行文件WMD86.EXE进入集成操作

软件环境,打开文件菜单选择新建,即可开始输入源程序。 d. 输入程序后,在文件菜单中选择保存程序,注意文件名的格式,扩展文件名必须为*.ASM,

例:ABC.ASM。

e. 在编译菜单中选择汇编(CTRL+F2)对源程序进行汇编,若源程序没有错误生成目标文

件*.OBJ,若源程序中有错误则返回错误信息,根据错误信息对源程序进行修改后再进行汇编。 f. 汇编无误后,在编译菜单中选择链接(CTRL+F3)对汇编生成的*.OBJ目标文件进行链接,链接信息显示于屏幕上,如没有错误,生成相应的可执行文件*.EXE。

g. 在窗口菜单中选择调试(CTRL+1)打开调试窗口,出现系统提示符“>”后选择菜单中

的装入程序,选择相应的*.EXE文件,填入程序段地址与偏移量(默认段地址0000,偏移量2000,一般不用修改),确定后PC开始将程序从磁盘装入到教学实验系统内存,提示装载完毕后使用U命令进行反汇编,检查程序是否正确装入。U命令输入格式为U0000:2000。

h. 当发现源程序输入错误或需要调整时,在调试窗口下可用A命令来修改,如修改2000

句为MOV DI,3500的操作如下:

显示信息 > 0000:2000 0000:2003 >

(2)运行程序

系统提供了单步运行、断点运行、连续运行等方式,具体操作如下:

a. 单步运行:在“>”提示符下输入T↙或点击菜单中的单步运行执行,每运行一条指令后

会显示下一条待执行指令并显示变化寄存器的内容,重复T↙可一步一步运行直至程序结束。

b. 连续运行:在“>”提示符下输入G=0000:2000↙(在系统默认段址CS=0000情况下

可直接输入G=2000↙)可连续运行程序,在运行过程中,可通过CTRL+BREAK或点击菜单中的停止来终止程序运行。

c. 断点运行:在程序中可用B命令定义断点,系统规定最多定义10个断点,例如:

显示信息 > [0:] [1:] > B↙ 2009↙ ↙ 键入信息 A2000↙ MOV DI,3500↙ ↙ 键入信息

上例中定义了2009地址为断点,输入GB=0000:2000↙程序连续运行至断点时,程序中断并显示当前各寄存器内容。GB是G命令的扩充,表示含断点连续运行程序,断点仅当系统复位时清除。

(3)内存单元的内容显示:

使用D0000:3500↙可查看3500H-350FH单元中的内容是否为0-15共16个数。 (4)内存单元内容的修改:

若要修改某一单元内容,可进行如下操作,其中,“空格”键用于向待编辑单元的高地址方向移动地址,而“-”键则向反方向移动地址;用↙来确认输入,退出E命令。

显示信息 > 0000:3500 00_ 0000:3501 01_ 0000:3502 02_ 0000:3501 01_ >

2. 系统操作练习(2)

将内存3500H单元开始的0-15共16个数传递到3600H单元开始的数据区中。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)E3500↙,在3500-3510单元中分别送入00、01、02?。

(3)G=0000:2000↙,运行程序,按CTRL+BREAK中断,返回监控。 (4)D3600↙,显示结果:3600 00 01 02 ?。

E3500↙ 01 space Space - ↙ 键入信息

实验二 运算类编程实验

一.实验目的

1. 掌握使用运算类指令编程及调试方法。

2. 掌握运算类指令对各状态标志位的影响及其测试方法。

二.实验设备

TDN86/88教学实验系统一台

三.实验内容及步骤

8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对二进制、BCD码数据类型进行算术运算。

1. 二进制双精度加法运算

计算X+Y=Z,将结果Z存入某存储单元。

本实验程序是双精度(2个16位,既32位)运算,利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。(设:CS:0000H,IP:2000H) (2)用U0000:2000查看MOV AX,XXXX(DATA)语句,得到数据段段地址CS:XXXX。用E命令EXXXX:0000↙给XL,XH,YL,YH赋值存入二进制数A0 65 15 00和9E B7 21 00。 (3)G=0000:2000↙,运行程序。

(4)DXXXX:0008↙,显示计算结果:3E 1D 37 00 CC ?。 (5)反复试几组数,考察程序的正确性。

2. 十进制数的BCD码减法运算

计算X-Y=Z,其中,X、Y、Z为BCD码。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。(设:CS:0000H,IP:2000H) (2)用U0000:2000查看MOV AX,XXXX(DATA)语句,得到数据段段地址CS:XXXX。用E命令EXXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。 (3)G=0000:2000↙,运行程序。

(4)DXXXX:0004↙,显示计算结果:08 02 CC ?。 (5)反复试几组数,考察程序的正确性。

3. 乘法运算

本实验实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,乘积在屏幕上显示。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)用U0000:2000↙查看MOV AX,XXXX(DATA)语句,得到数据段段地址CS:XXXX。用E命令EXXXX:0000↙给在对应数据段填入乘数与被乘数。

(3)G=0000:2000↙,运行程序,屏幕显示结果。用CTRL+BREAK可终止程序运行。 (4)反复试几组数,考察程序的正确性。

四.思考题

1. 编写有符号数A1B1+A2B2的程序,A1、A2、B1、B2均为符号数。 2. 编写两个数值长度不等的BCD码相加程序。

实验三 分支程序设计实验

一.实验目的

1. 掌握分支程序的结构。

2. 掌握分支程序的设计、调试方法。

二.实验设备

TDN86/88教学实验系统一台

三.实验内容及步骤

1. 比较两个字符串STR1与STR2是否相同,若相同则在屏幕上显示MATCH,不同则显示

NOMATCH。

2. 设计一数据块间的搬移程序

设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图3-1所示。

图3-1

对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏,可以得出以上结论:

当源数据块首址>目的块首址时,从数据块首地址开始传送数据。

当源数据块首址<目的块首址时,从数据块末地址开始传送数据。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)用E命令在以SI为起址的单元中填入16个数。 (3)G=0000:2000↙,运行程序。

(4)用D命令查看DI为起址的单元中的数据是否与SI单元中的数据相同。 (5)试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。

四.思考题

为什么当源数据块首址>目的块首址时,应从数据块首地址开始传送数据?而当源数据块首址<目的块首址时,应从数据块末地址开始传送数据?

实验四 循环程序设计实验

一.实验目的

1. 加深对循环结构的理解。 2. 掌握循环结构程序设计的方法。 3. 熟练掌握调试循环程序的方法。

二.实验设备

TDN86/88教学实验系统一台

三.实验内容及步骤

1. 编制程序

计算式子1+2+3+?+99+100的结果。

2. 求某数据区内负数的个数

设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。 (2)E3000↙输入数据如下:

3000=06(数据个数) 3001=12 88 82 90 22 33

(3)G=0000:2000↙,运行实验程序。 (4)D=3007↙,显示结果03。

四.思考题

修改程序2,使其能分别求出数据区中正数、零和负数的个数。

实验五 排序程序设计实验

一.实验目的

1. 掌握分支、循环、子程序调用等基本的程序结构。 2. 学习综合程序的设计、编制及调试。

二.实验设备

TDN86/88教学实验系统一台

三.实验内容及步骤

1. 在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用气泡法对该数据区中数据按递增关系排序。 设计思想:

a. 从最后一个数(或第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N

-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。此时,N个数中的最小数将被排在N个数的最前列。

b. 对剩下的N-1个数重复上步,找到N-1个数中的最小数。 c. 重复第二步,直到N个数全部排序好为止。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)用E3000↙在3000-3009H数据区中任意放入10个无符号数。 (3)G=0000:2000↙,运行实验程序。 (4)用D=3000↙检查排序结果。

(5)反复修改数据区中的数,运行程序并观察结果,以验证程序的正确性。

2. 学生成绩名次表

将分数为1-100之间的30个成绩存入首址为3000H的单元中,3000H+i表示学号为i的学生成绩。编写程序能在3100H开始的区域排出名次表,3100H+i为学号i的学生名次。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。 (2)将30个成绩存入首址为3000H的单元中。 (3)调试并运行实验程序。

(4)检查3100H开始的区域中的名次表的正确性。

四.思考题

1. 请指出程序1中哪部分属于外循环,哪部分属于内循环? 2. 程序中对SI、CX压栈和弹栈的意义何在?

3. 修改程序2,使其能将3100H开始的区域中的名次表显示出来。

实验六 中断特性及8259应用编程实验

一.实验目的

1. 认识TDN86/88系统的中断特性。 2. 掌握8259中断控制器的工作原理。 3. 掌握8259可编程控制器的应用编程。 4. 学习掌握8259级连方式的使用方法。

5. 学习在接口实验单元上构造连接实验电路的方法。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

1. 8259应用实验(1)

图6-1 实验(1)线路

按图6-1所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。

实验步骤:

(1)按图6-1连接实验线路。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)G=0000:2000运行实验程序。

(4)重复按KK2微动开关,显示屏上应用“7”来响应,直到按10次后,系统处于停机状态,用CTRL+BREAK返回监控。

2. 8259应用实验(2)

图6-2 实验(2)线路

按图6-2所示实验线路,编写程序,完成下面的要求: 当无中断请求时,执行主程序,延时显示“main”,若有中断请求,则执行其中断服务程序,显示该中断号“6”或“7”;若正在执行较低级的中断服务程序,则允许比它优先级高的中断被响应(IRQ6>IRQ7)。主程序在执行过程中,每显示一个“main”,空一格。

实验步骤:

(1)按图6-2连接实验线路。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)G=0000:2000↙,运行实验程序,则连续显示MAIN,先后按动KK1和KK2微动开关来模拟中断请求信号,记录请求顺序及显示结果。

3. 8259级连实验

本实验是以系统中的8259作为主片,外接另一片8259作为从片,构成8259级连方式的中断实验线路,如图6-3所示,其中规定主片的IRQ7上连接一片从片,从片上的IRQ7接中断申请电路(R-S单脉冲触发器),并规定从片的中断矢量编号为30-37H,其命令寄存器组编址为00和01。

图6-3 8259级连实验接线图

实验步骤:

(1)按图6-3连接实验线路,其中INTA连接必须在开机上电之后。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)G=0000:2000↙,运行实验程序,并通过按动KK1微动开关向从片申请中断,每按动一次KK1,显示屏上显示一个“7”字符,表明CPU响应了一次中断。

四.思考题

在实验(2)中,若先按动KK2,在按动KK1(此时尚未显示“7”),显示结果会是什么?为什么?

实验七 8255并行接口应用实验

一.实验目的

1. 学习并掌握8255的各种工作方式及其应用。 2. 学习在系统接口实验单元上构造实验电路。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

1. 8255接口应用实验(1)

图7-1 实验线路图

按图7-1所示实验线路编写程序,使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组发光二极管上,然后通过对8255芯片编程来实现输入/输出功能。

实验步骤:

(1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)G=0000:2000↙,运行实验程序,拨动开关组,观察发光二极管应一一对应。

2. 8255接口应用实验(2)

按图7-2所示接线,编写程序,使8255端口A工作在方式0并作为输出口,端口B工作于方式1并作为输入口,则端口C的PC2成为选通信号输入端STBB,PC0成为中断请求信号输出端INTRB。当B口就绪后,通过发STBB信号来请求CPU读取端口B数据并送端口A输出显示。

图7-2 实验接线图(KK1-初态为“1”)

实验步骤:

(1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)G=0000:2000↙,运行实验程序,拨动开关组K0-K7,准备好后,按动微动开关KK1,观察发光二极管组,应与开关信号对应。

实验八 8253定时/计数器应用实验

一.实验目的

1. 熟悉8253在系统中的典型接法。 2. 掌握8253的工作方式及应用编程。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

1. 8253计数器应用实验(1)

设定8253的2#通道工作方式为方式0,用于事件计数,当计数值为5时,发出中断请求信号,显示“M”。其实验线路如图8-1所示。

图8-1 实验(1)线路

实验步骤:

(1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)用E命令在0000:003CH单元填入IRQ7中断矢量,即0000:003C 12 20 00 00。 (4)运行实验程序,按动微动开关KK1,观察是否每按6次,屏幕上显示一个“M”字符。

2. 8253定时器应用实验(2)

利用8253的0通道来定时中断(IRQ0),循环显示“0”-“9”十个数,实验线路如图8-2。

#

图8-2 实验(2)线路

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)运行程序,显示屏上应连续逐行显示“0”-“9”十个数,直到用“RESET”复位开关来中断。

(3)修改8253的0时常,再运行程序,观察显示的快慢程度。

3. 电子发声实验(3)

系统的OPCLK(1.1625MHz)作为音乐节拍,由表格查出每个音符对应的时常送给计数器2(工作在方式3:方波频率发生器),以确定音调,驱动扬声器产生音乐。实验接线如图8-3。

#

图8-3 实验(3)接线图

实验步骤:

(1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)G=2000↙运行程序,即可听到扬声器发出音乐声。

四.思考题

在将计数初值赋给8253后,马上就可以启动并进行定时或计数吗?

实验九 8251串行接口应用实验

(一)双机通讯实验

一.实验目的

1. 掌握8251的工作方式。 2. 学习串行通讯的有关知识。

3. 了解8251在半双工双机通讯情况下的软件编制,硬件连接技术。

二.实验设备

1. TDN86/88教学实验系统两台。 2. 排线、导线若干。

三.实验内容及步骤

本实验需用两台TDN86/88教学实验系统,并通过排线将两台仪器相连,具体接线如图9-1。

图9-1 双机通讯

其中1号机用做接收机,2号机用做发送机。实验目的是将2号机中的3000-3009H十个单元中的代码传送到1号机的3000-3009H单元中。

实验步骤:

(1)按图9-1将1、2号机连接起来。

(2)两台机器上电后,均输入程序,并要求2号机用E命令在3000-3009H十个单元中填入十个ASCII码,如:3000:30 31 32 33 34 35 36 37 38 39

(3)先使1号机程序运行,等串行接收数据,然后再运行2号机程序,发送字符串到串口,当数发送、接收完毕时,1号机显示相应的ASCII码字符串,如:R 0 1 2 3 4 5 6 7 8 9,用CTRL+BREAK可使程序中断,返回监控。

(4)检查1号机的3000-3009H单元,应和2号机一致。

(二)串口自发自收实验

一.实验目的

掌握8251串行通讯方式的硬件接口电路及软件编制。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

对于串行传输的数据格式,本实验有如下规定:

一个字有一个逻辑“1”起始位,8位ASCII码数据位,1位逻辑“1”停止位,传输波特率为9600baut。

实验步骤:

(1)将实验系统上8251的TXD与RXD直接相连。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)用E命令在4000-400A单元赋值。

(4)运行程序,用D命令观察3000-300A单元内容和4000-400A单元内容是否一致。

四.思考题

使两机分别工作在中断方式下,画出流程图,并编制程序。

实验十 A/D转换实验

一.实验目的

1. 学习掌握模/数信号转换基本原理。 2. 掌握ADC0809芯片的使用方法。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

按图编写实验程序,实现A/D转换。

图10-1 ADC0809应用实验线路

实验步骤:

(1)按图接线。

(2)输入程序并检查无误,运行程序。

(3)调节W电位起,显示屏上显示AD0809:IN0 XX。

(4)用万用表测出W输出电压,并记录显示屏上的相应数据,做出转换图。 (5)求0809芯片的整量化误差。

四.思考题

若改用EOC信号来申请中断读A/D值,程序如何设计?

实验十一 D/A转换实验

一.实验目的

1. 学习掌握数/模信号转换基本原理。 2. 掌握DAC0832芯片的使用方法。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

按图11-1所示实验线路编写程序,实现数模转换,并产生锯齿波、脉冲波,并用示波器功能观察波形。在实验接线中(1)为DAC0832实验接线图,(2)为测量单元接线图。根据该图接线,可通过PC示波器功能观察DAC0832输出的波形。

图11-1 DAC0832应用实验线路

实验步骤:

(1)按图11-1接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)从窗口菜单进入PC示波器功能。 (4)运行程序,观察DA输出波形。

四.思考题

1. 试改变各信号频率,通过增减延时观察波形的变化。

2. 使DAC0832为双缓冲方式应如何接线?

实验十二 8255键盘及显示接口实验

一.实验目的

熟练掌握8255编程。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

按图12-1实验线路编写实验程序,使数码块显示相应的数字。

图12-1 实验线路

实验步骤:

(1)按图12-1接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)运行程序。

(4)按动键盘,数码块会显示相应的数字。

实验十三 步进电机实验

一.实验目的

掌握步进电机的控制方法。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

本实验采用的步进电机为35BYJ46型四项八拍电机,电压为DC12V,其励磁线圈及其励磁顺序如下图及下表所示:

图13-1 实验线路图

实验中,P1端口各线的电平在各步中的情况如下表所示:

步序 1 2 3 4 5 6 7 8 PB 3 PB 2 PB 1 PB 0 对应B口输出值 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 01H 03H 02H 06H 04H 0CH 08H 09H

实验步骤:

(1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)G=0000:2000↙运行程序。 (4)按复位键终止程序运行。

(5)注意:步进电机不使用时请断开连接器,以免误操作使电机过分发热。

实验十四 直流电机闭环调速实验

一.实验目的

1. 了解直流电机闭环调速方法。 2. 掌握PID控制规律及算法。

3. 巩固计算机控制课程所学内容。

二.实验设备

1. TDN86/88教学实验系统一台。 2. 排线、导线若干。

三.实验内容及步骤

系统的8255 PB 0脉冲信号为控制量,经驱动电路驱动电机运转。霍尔测速元件输出的脉冲信号记录电机转速构成反馈量,在参数给定情况下,经PID运算,电机可在控制量作用下,按给定转速闭环运转。其中OPCLK为1.193MHz时钟信号,经8253的2号通道分频输出1ms的方波,接入8259产生IRQ6中断,作为系统采样时钟;PB 0产生PMW脉冲计时及转速累加,8259的IRQ7中断用于测量电机转速。

图14-1 实验线路图

实验步骤:

(1)按图14-1接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)进入PC示波器功能,运行程序。

(4)观察电机转速及示波器上给定值与反馈值的波形,分析其响应特性,改变参数IBAND、KPP、KII、KDD值后再观察其响应特性,选择一组较好的控制参数填入下表:

参数 IBAND KPP 1060H 1060H KII 0010H 0010H KDD 0020H 0020H 超调 稳定 <2% 15% 时间 4.8秒 项目 1:例程中参数响应特性 0060H 2:去掉IBAND 3:自测一组较好参数

0000H

附录 TDN86/88系统简介

TDN86/88实验系统由8088微机系统单元、接口实验单元和开关稳压电源组成,通过RS-232C串行通讯接口与PC微机相连。

系统硬件主要内容如下:

CPU 8088 8251、8253、8255、8259、DMA8237、级连8259、ADC0809、DAC0832、RAM6264、单脉冲触发器、电子发声单元、电机控制单元、LED数码块及键盘组、拨动开关及发光二极管组、面包板等 TS&CS扩展实验接口,PC总线接口 系统存储器 EPROM27512(64K)、SRAM62256(基本配置32K,可扩展至64K) 接口芯片及实验单元 外设接口

输入/输出接口编码:

电路名称 待扩展 8259 信号线 IOY0 IOY1 寄存器 命令寄存器 状态寄存器 0#计数器 1#计数器 2计数器 控制寄存器 A口 8255 IOY3 B口 C口 控制寄存器 系统中的8251 系统中的EPROM编程器 实验单元中的8251 待扩展

IOY6 IOY4 IOY7 数据口 控制寄存器 片选 数据口 控制寄存器 #编址 00-1FH 20H 21H 40H 41H 42H 43H 60H 61H 62H 63H C0H C1H 0101-0103 80H 81H E0-FFH 8253 IOY2