收藏 分享(赏)

《微机原理与接口技术》(第二版)龚尚福-习题解析和实验指导22381.doc

上传人:dreamzhangning 文档编号:2725823 上传时间:2018-09-26 格式:DOC 页数:38 大小:1.39MB
下载 相关 举报
《微机原理与接口技术》(第二版)龚尚福-习题解析和实验指导22381.doc_第1页
第1页 / 共38页
《微机原理与接口技术》(第二版)龚尚福-习题解析和实验指导22381.doc_第2页
第2页 / 共38页
《微机原理与接口技术》(第二版)龚尚福-习题解析和实验指导22381.doc_第3页
第3页 / 共38页
《微机原理与接口技术》(第二版)龚尚福-习题解析和实验指导22381.doc_第4页
第4页 / 共38页
《微机原理与接口技术》(第二版)龚尚福-习题解析和实验指导22381.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

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

2、将它们送到指令队列缓冲器暂存。CPU 执行指令时,总线接口单元要配合执行单元,从指定的内存单元或 I/O 端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或 I/O 端口中。执行单元 EU 中包含 1 个 16 位的运算器 ALU、8 个 16 位的寄存器、1 个 16 位标志寄存器 FR、1 个运算暂存器和执行单元的控制电路。这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。EU 对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。如果指令队列缓冲器中是空的,那么 EU 就要等待 BIU 通过外部总线从存储器中取得指令并送

3、到 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 表示当前使用的指令代码可以从该段寄存器

4、指定的存储器段中取得,相应的偏移值则由 IP 提供;堆栈段寄存器 SS 指定当前堆栈的起始地址;数据段寄存器 DS 指示当前程序使用的数据所存放段的起始地址;附加段寄存器 ES 则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。 (3)指针和变址寄存器:堆栈指针 SP 用以指出在堆栈段中当前栈顶的地址。入栈(PUSH )和出栈(POP)指令由 SP 给出栈顶的偏移地址。基址指针 BP 指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。变址寄存器 SI 和 DI 用来存放当前数据段中某个单元的偏移量。(4)指令指针与标志寄存器:指令指针 IP 的功能跟 Z80

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

6、制处理机状态或程序执行方式的表征。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;

7、否则 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 是否允许接收外部

8、中断请求。若 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 而设

9、计的工作方式,它要解决在 16 位字长的机器里怎么提供 20 位地址的问题,而解决的办法是采用存储器地址分段的方法。程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。每个段的大小可达 64 KB,这样段内地址可以用 16 位表示。存储器分段的方法虽然给程序设计带来一定的麻烦,但这种方法可以扩大存储空间,而且对于程序的再定位也是很方便的。2.6 什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?【解】:物理地址:完成存储器单元或 I/O 端口寻址的实际地址成为物理地址,CPU 型号不同其物理地址也不同。物理地址是指 CPU 和存储器进行数据交换时实际所使用的地址,而

10、逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高 16 位) 和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。当 CPU 寻址某个存储单元时,先将段寄存器的内容左移 4 位,然后加上指令中提供的 16位偏移地址而形成 20 位物理地址。在取指令时,CPU 自动选择代码段寄存器 CS,左移 4位后,加上指令提供的 16 位偏移地址,计算出要取指令的物理地址。堆栈操作时,CPU自动选择堆栈段寄存器 SS,将其内容左移 4 位后,加上指令提供的 16 位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,CPU 会自动选择数据段寄存器(或附加段

11、寄存器 ES),将段基值左移 4 位后加上 16 位偏移地址,得到操作数在内存的物理地址。2.9 在 80x86 微机的输入/输出指令中,I/O 端号通常是由 DX 寄存器提供的,但有时也可以在指令中直接指定 00H0FFH 的端口号。试问可直接由指令指定的 I/O 端口数是多少?【解】:由于在 80x86 的输入/输出指令中,可以直接在 00H0FFH 指定,所以直接由指令指定的 I/O 端口数是 256。3.1 指令分成几部分?每部分的作用是什么?【解】:每条指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令所要完成的操作。地址码字段:用来描述该指令的操作对象。一般是直接

12、给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。3.2 指出下列 MOV 指令的源操作数的寻址方式:MOV AX,1234HMOV AX,BXMOV AX,BXMOV AX,TABLE;TABLE ;TABLE 是一个变量名MOV AX,1234HMOV AX,BX+1234HMOV AX,BPSIMOV AX,BX+SI-1234H【解】:MOV AX,1234H 立即寻址MOV AX,BX 寄存器寻址MOV AX,BX 寄存器间接寻址MOV AX,TABLE ;TABLE 是一个变量名 直接寻址方式MOV AX,1234H 直接寻址方式MOV

13、 AX,BX+1234H 寄存器相对寻址MOV AX,BPSI 基址变址寻址MOV AX,BX+SI1234H 相对地址变址寻址3.3 设:( DS)=2000H, ( BX)=0100H, (SS)=1000H, (BP)=0010H,TABLE 的物理地址为 2000AH, (SI)=0002H。求下列每条指令源操作数的存储单元地址:MOV AX,1234HMOV AX,BXMOV AX,TABLEBXMOV AX,BPMOV AX,BPSI【解】: 存储单元地址:(DS)10H + EA =2000H10H+1234H=21234H存储单元地址:(DS)10H +(BX)=2000H10

14、H+0100H=20100H存储单元地址:(DS)10H+EA=2000H 10H+0100H+000AH=2010AH存储单元地址:(SS)10H+EA=1000H10H+0010H=10010H储单元地址:(SS)10H+EA=1000H10H+0010H+0002H =10012H3.4 设 ARRAY 是字数组的首地址,写出将第 5 个字元素取出送 AX 寄存器的指令,要求使用以下几种寻址方式: 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址【解】:(1)直接寻址(2)寄存器间接寻址(3)寄存器相对寻址(4)基址变址寻址MOV AX, ARRAY+8 MOV BX, ARRAY

15、+8 MOV BX, 8 LEA BX, ARRAYMOV AX, BX MOV AX, ARRAYBX MOV SI, 8 MOV AX,BX+SI3.7 设当前( 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 此转移指令的目标转移地址

16、为:20100H JMP BX 此转移指令的目标转移地址为:21000H JMP WORD PTR ARRAY 此转移指令的目标转移地址为:23000H3.8 设当前(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 PTR NEXT JMP DWOR

17、D ARRAY【解】: JMP FAR PTR NEXT 此转移指令的目标转移地址为:31000H JMP DWORD ARRAY 此转移指令的目标转移地址为:30300H3.9 下列每组指令有何区别?(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 A

18、X,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.10 MOV CS,AX 指令正确吗?【解】:MOV CS,AX 指令不正确。因为 CS 是指令寄存器,由系统自动改变,不能由指令进行更改。3.11 写一指令序列,将 3456H 装入 DS 寄存器。【解】:MOV AX, 3456

19、HMOV DS, AX3.14 若正在访问堆栈中 03600H 单元,则 SS 和 SP 的值是多少?【解】:若正在访问堆栈中 03600H 单元,则 SS 和 SP 的值会有好多组合,其中可以有 SS是 0300H,SP 是 0600H。3.15 若(SS)=2000H, (SP)=000AH,先执行将字数据 1234H 和 5678H 压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及 SP 的内容变化过程示意图(标出存储单元的物理地址) 。【解】:物理地址(SS)10HSP3.16 解释 XLAT 指令是怎样转换 AL 寄存器中的内容的。并编写一段程序用 XLAT 指令SP200

20、06H20007H 56H78H34H12H2000AH20009HSP20008HSP2000AH 34H12H2000AH20009H20008H将 BCD 码 09 转换成对应的 ASCII 码,并将 ASCII 码存入数据 ARRAY 中。【解】:XLAT 指令是将 AL 的内容替换成存储单元中的一个数,往往用于代码转换。使用此指令前,先在数据段建立一个表格,表格首地址存入 BX 寄存器,欲取代码的表内位移量存入 AL 寄存器中。XLAT 指令将(AL) 值扩展成 16 位,与 (BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入 AL 寄存器。程序如下:TABLE DB

21、 30H, 31H, , 39HARRAY DB 1O DUP(?)MOV CL, 10MOV SI, 0MOV BX, OFFSET TABLEMOV AL, ALAGAIN: XLATMOV SI, ALINC SIINC ALLOOP AGAIN3.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

22、 0000 B 则:ZF=1、SF=0、CF=1 、OF=03.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,7SHL BX,CL【解】:(AX) =

23、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_OPBX+4*3DI,SP MOV WORD_OP1,WORD_OP2 MOV AX,WORD_OP1DX MOV SAVE WORD,DS MOV SP,SS :DATA_WORDBXSI MOV BXSI,2 MOV AX,WORD_OP1+WORD_OP2

24、 MOV AX,WORD_OP1-WORD_OP2+100 MOV WORD_OP1,WORD_OP1-WORD_OP2【解】: MOV BP,AL 两个操作数不匹配 MOV WORD_OPBX+4*3DI,SP MOV WORD_OP1,WORD_OP2 两个内存单元之间不能直接传送数据 MOV AX,WORD_OP1DX MOV SAVE WORD,DS MOV SP, SS:DATA_WORDBXSI 当基址为 BX 时,选取 DS 寄存器 MOV BXSI,2 MOV AX,WORD_OP1+WORD_OP2 MOV AX,WORD_OP1-WORD_OP2+100 MOV WORD_

25、OP1,WORD_OP1-WORD_OP24.2 假设 VAR1 和 VAR2 为字变量,LAB 为标号,试指出下列指令的错误之处: ADD VAR1,VAR2 SUB AL,VAR1 JMP LABSI JNZ VAR1 JMP NEAR LAB【解】: ADD VAR1,VAR2ADD 两个操作数不能同时为存储单元,MOV AX, VAR1ADD AX, VAR2 SUB AL,VAR1两个操作数不匹配SUB AX, VAR1 JMP LABSI LAB 与SI 不能相加JMP WORD PTR SI JNZ VAR1JNZ 后面应是标号,不应是变量JNZ LAB JMP NEAR LAB

26、缺少 PTR 运算符JMP NEAR PTR LAB4.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) FFHFBH0202H01H02H01H00H02H01H02H01H00H02H01H02H01H00HF4H0CH45H54H59H41HBYTE_VAR BYTE1212H0121121201212 45H00H56H00H54H00H59H00H41H00H02H00H

27、01H00H00H00H02H00H01H00H00HWORD_VAR 030 个字节120122BYTE54.4 假设程序中的数据定义如下:PARTNO DW ?PNAME DB 16 DUP(?)COUNT DD ?PLENTH EQU $-PARTNO问 PLENTH 的值为多少 ?它表示什么意义 ?【解】:PLENTH 的值为 22,它表示数据的个数。4.5 有符号定义语句如下:BUFF DB 1,2,3, 123EBUFF DB 0L EQU EBUFF-BUFF问 L 的值是多少?【解】:PLENTH 的值为 6。4.6 假设程序中的数据定义如下:LNAME DB 30 DUP(?

28、)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE-LIST DB 1,7,8,3,2 用一条 MOV 指令将 LNAME 的偏移地址放入 AX。 用一条指令将 CODE_LIST 的头两个字节的内容放入 SI。 写一条伪操作使 CODE_LENGHT 的值等于 CODE_LIST 域的实际长度。【解】: 用一条 MOV 指令将 LNAME 的偏移地址放入 AX。MOV AX, OFFSET LANME 用一条指令将 CODE_LIST 的头两个字节的内容放入 SI。MOV SI, WORD PTR CODE_LSIT 写一条伪操作使 CODE_LENGHT

29、的值等于 CODE_LIST 域的实际长度。CODE_LENGHT EQU CITY-CODE_LIST4.7 试写出一个完整的数据段 DATA_SEG,它把整数 5 赋予一个字节,并把整数-1,0,2,5 和 4 放在 10 字数组 DATA_LIST 的头 5 个单元中。然后,写出完整的代码段,其功能为:把 DATA_LIST 中头 5 个数中的最大值和最小值分别存入 MAX 和 MIN 单元中。【解】:参考程序如下:DATA_SEG SEGMENTDB1 DB 5DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?)COUNT DB 5MAX DB ?02H 256H

30、MIN DB ?DATA_SEG ENDSCODE_SEG SEGMENTASSUME CS:CODE_SEG, DS:DATA_SEGSTART PROC FARPUSH DS MOV AX, 0PUSH AXMOV AX, DATA_SEGMOV DS, AXLEA BX, DATA_LISTMOV CX, COUNT-1MOV AL, BXMOV AH, BX+1LOOP1: INC BXCMP AH, ALJAE LOOP1XCHG AH, ALLOOP2 INC BXCMP AH, BXJAE LISXCHG AH, BXJMP LOP2LIS: CMP AL , BXJBE LOP

31、2XCHG AL, BXLOOP2MOV MAX, AHMOV MIN, ALRETSTART ENDPCODE_SEG ENDSEND START4.10 给出等值语句如下:ALPHA EQU 100BETA EQU 25GAMMA EQU 2下列表达式的值是多少? ALPHA*100+BETA ALPHA MOD GAMMA+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+BETA1001002510025 A

32、LPHA MOD GAMMA+BETA100/(252)19 (ALPHA+2)*BETA-2(100+2)*252548 (BETA/3) MOD 5(25/3) MOD 53 (ALPHA+3)*(BETA MOD GAMMA) (100+3)*(25 MOD 2)103 ALPHA GE GAMMA100 GZ GAMMA0FFFFH BETA AND 725 AND 71 GAMMA OR 32 OR 334.9 对于下面的数据定义,三条 MOV 指令分别汇编成什么?(可用立即数方式表示)TABLEA DW 10 DUP(?)TABLEB DB 10 DUP(?)TABLEC DB 1

33、234MOV AX,LENGTH TABLEAMOV BL,LENGTH TABLEBMOV CL,LENGTH TABLEC【解】: MOV AX,LENGTH TABLEA MOV AX, OOOAHMOV BL,LENGTH TABLEB MOV BL, 0AHMOV CL,LENGTH TABLEC MOV CL, O1H4.10 对于下面的数据定义,各条 MOV 指令单独执行后,有关寄存器的内容是什么?FLDB DB ?TABLEA DW 20 DUP(?)TABLEB DB ABCD MOV AX,TYPE FLDB MOV AX,TYPE TABLEA MOV CX,LENGTH

34、 TABLEA MOV DX,SIZE 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)= 18.1 解释下列概念:中断 DMA,中断源,中断向量中断向量表,不可屏蔽中断,通道 FCB,中断嵌套,文件标记中断入口,可屏蔽中断【解】:答: 当进程要求设备输入数据时,CPU 把准备存放输

35、入数据的内存起始地址以及要传送的字节数分别送入 DMA 控制器中的内存地址寄存器和传送字节计数器。 发出数据传输要求的进行进入等待状态。此时正在执行的 CPU 指令被暂时挂起。进程调度程序调度其他进程占据 CPU。 输入设备不断地窃取 CPU 工作周期,将数据缓冲寄存器中的数据源源不断地写入内存,直到所要求的字节全部传送完毕。 DMA 控制器在传送完所有字节时,通过中断请求线发出中断信号。CPU 在接收到中断信号后,转入中断处理程序进行后续处理。 中断处理结束后,CPU 返回到被中断的进程中,或切换到新的进程上下文环境中,继续执行。中断源:引起中断的事件称为中断源。中断向量表:每种中断都给安排

36、一个中断类型号。80x86 中断系统能处理 256 种类型的中断,类型号为 0H0FFH。如图 8.3 所示的中断源,系统时钟的中断类型为 08,键盘为09,软中断中的除法错误的中断类型为 0 等。每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各类型中断处理程序的入口地址表。中断嵌套:正在运行的中断处理程序,又被其他中断源中断,这种情况叫做中断嵌套。中断就是 CPU 在执行当前程序时由于内外部事件引起 CPU 暂时停止当前正在执行的程序而转向执行请求 CPU 暂时停止的内外部事件的服务程序,该程序处理完后又返回继续执行被停止的程序;中断向量是中断处理子程序的入口地址;地址范围是 0

37、0000H-003FFH。实验一 系统认识实验一实验目的掌握 TDN86/88 教学实验系统的基本操作。二实验设备TDN86/88 教学实验系统一台。三实验内容及步骤1. 系统认识实验(1)(1)程序的输入与修改从 3500H 内存单元开始建立 0-15 共 16 个数据。实验步骤:a 使用串行通讯电缆将实验系统与 PC 机相连。b 开启实验系统。c 在系统软件所在目录(默认为 C:TANGDUW8688)下运行文件 WMD86.EXE 进入集成操作软件环境,打开文件菜单选择新建,即可开始输入源程序。d 输入程序后,在文件菜单中选择保存程序,注意文件名的格式,扩展文件名必须为*.ASM,例:A

38、BC.ASM。e 在编译菜单中选择汇编(CTRL+F2)对源程序进行汇编,若源程序没有错误生成目标文件*.OBJ,若源程序中有错误则返回错误信息,根据错误信息对源程序进行修改后再进行汇编。f 汇编无误后,在编译菜单中选择链接(CTRL+F3)对汇编生成的*.OBJ 目标文件进行链接,链接信息显示于屏幕上,如没有错误,生成相应的可执行文件*.EXE。g 在窗口菜单中选择调试(CTRL+1)打开调试窗口,出现系统提示符“”后选择菜单中的装入程序,选择相应的*.EXE 文件,填入程序段地址与偏移量(默认段地址 0000,偏移量 2000,一般不用修改) ,确定后 PC 开始将程序从磁盘装入到教学实验

39、系统内存,提示装载完毕后使用 U 命令进行反汇编,检查程序是否正确装入。U 命令输入格式为U0000:2000。h 当发现源程序输入错误或需要调整时,在调试窗口下可用 A 命令来修改,如修改 2000句为 MOV DI,3500 的操作如下:显示信息 键入信息 A20000000:2000 MOV DI,35000000:2003 (2)运行程序系统提供了单步运行、断点运行、连续运行等方式,具体操作如下:a. 单步运行:在“”提示符下输入 T或点击菜单中的单步运行执行,每运行一条指令后会显示下一条待执行指令并显示变化寄存器的内容,重复 T可一步一步运行直至程序结束。b. 连续运行:在“”提示符

40、下输入 G0000:2000(在系统默认段址 CS0000 情况下可直接输入 G2000)可连续运行程序,在运行过程中,可通过 CTRL+BREAK 或点击菜单中的停止来终止程序运行。c. 断点运行:在程序中可用 B 命令定义断点,系统规定最多定义 10 个断点,例如:显示信息 键入信息 B0: 20091: 上例中定义了 2009 地址为断点,输入 GB0000:2000程序连续运行至断点时,程序中断并显示当前各寄存器内容。GB 是 G 命令的扩充,表示含断点连续运行程序,断点仅当系统复位时清除。(3)内存单元的内容显示:使用 D0000:3500可查看 3500H-350FH 单元中的内容

41、是否为 0-15 共 16 个数。(4)内存单元内容的修改:若要修改某一单元内容,可进行如下操作,其中, “空格”键用于向待编辑单元的高地址方向移动地址,而“-”键则向反方向移动地址;用来确认输入,退出 E 命令。显示信息 键入信息 E35000000:3500 00_ 01 space0000:3501 01_ Space0000:3502 02_ - 0000:3501 01_ 2. 系统操作练习(2)将内存 3500H 单元开始的 0-15 共 16 个数传递到 3600H 单元开始的数据区中。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)E3500,在 3500-3

42、510 单元中分别送入 00、01、02。(3)G0000:2000,运行程序,按 CTRL+BREAK 中断,返回监控。(4)D3600,显示结果:3600 00 01 02 。实验二 运算类编程实验一实验目的1. 掌握使用运算类指令编程及调试方法。2. 掌握运算类指令对各状态标志位的影响及其测试方法。二实验设备TDN86/88 教学实验系统一台三实验内容及步骤8086/8088 指令系统提供了实现加、减、乘、除运算的基本指令,可对二进制、BCD码数据类型进行算术运算。1. 二进制双精度加法运算计算 XYZ,将结果 Z 存入某存储单元。本实验程序是双精度(2 个 16 位,既 32 位)运算

43、,利用累加器 AX,先求低十六位和,并存入低址存储单元,后求高 16 位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用 ADC 指令,则低位相加有进位时,CF1,高位字相加时,同时加上 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)G0000:200

44、0,运行程序。(4)DXXXX:0008,显示计算结果:3E 1D 37 00 CC 。(5)反复试几组数,考察程序的正确性。2. 十进制数的 BCD 码减法运算计算 X-YZ,其中,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)G0000:2000,运行程序。(4)DXXXX:000

45、4,显示计算结果:08 02 CC 。(5)反复试几组数,考察程序的正确性。3. 乘法运算本实验实现十进制数的乘法,被乘数和乘数均以 BCD 码形式存放于内存中,乘积在屏幕上显示。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)用 U0000:2000查看 MOV AX,XXXX(DATA)语句,得到数据段段地址 CS:XXXX。用 E 命令 EXXXX:0000给在对应数据段填入乘数与被乘数。(3)G0000:2000,运行程序,屏幕显示结果。用 CTRLBREAK 可终止程序运行。(4)反复试几组数,考察程序的正确性。四思考题1. 编写有符号数 A1B1A 2B2的程序,

46、A 1、A 2、B 1、B 2均为符号数。2. 编写两个数值长度不等的 BCD 码相加程序。实验三 分支程序设计实验一实验目的1. 掌握分支程序的结构。2. 掌握分支程序的设计、调试方法。二实验设备TDN86/88 教学实验系统一台三实验内容及步骤1. 比较两个字符串 STR1 与 STR2 是否相同,若相同则在屏幕上显示 MATCH,不同则显示NOMATCH。2. 设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块) 。源数据块和目的数据块在存储中可能有三种情况,如图 3-1 所示。图 3-1对于两个数据块分离的情况,如图 3-1(a)

47、 ,数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏,可以得出以上结论:当源数据块首址目的块首址时,从数据块首地址开始传送数据。当源数据块首址目的块首址时,应从数据块首地址开始传送数据?而当源数据块首址IRQ7) 。主程序在执行过程中,每显示一个“main” ,空一格。实验步骤:(1)按图 6-2 连接实验线路。(2)输入程序并检查无误,经汇编、连接后装入系统。(3)G0000:2000,运行实验程序,则连续显示 MAIN,先后按动 KK1 和 KK2 微动开关来模拟中断请求信号,记录请求顺序及显示结果。3. 8259 级连实验本实验是以系统中的 8259 作为主片,外接另一片 8259 作为从片,构成 8259 级连方式的中断实验线路,如图 6-3 所示,其中规定主片的 IRQ7 上连接一片从片,从片上的 IRQ7接中断申请电路(RS 单脉冲触发器) ,并规定从片的中断矢量编号为 30-37H,其命令寄存器组编址为 00 和 01。图 6-3 8259 级连实验接线图实验步骤

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报