第八章 输入输出程序设计 输入输出功能是计算机的重要组成部分,是 人—机交互功能的主要承担者。在早期的计算机系 统中,通常把输入输出设备或功能作为次要的部分, 而把CPU作为主要研究对象。但现在随着输入输出 设备的日益丰富、功能要求越来越复杂,输入输出 部分在整个计算机系统中的地位也得到了进一步提 高。 2019/9/3
输入输出设备是计算机系统的重要的组成部分, 没有输入输出设备,计算机就得不到要解决问题的 初始信息,处理的结果信息也不可能被送出,这样 的计算机不能完成任何工作。 计算机系统是通过硬件接口(或控制器 )以及 输出输出程序对外部设备实现处理和控制的。而汇 编语言能直接控制硬件,因此就成为编写输入输出 程序的最有效的语言。 2019/9/3
8.1 I/O设备的数据传送方式 8.1.1 CPU与外设 每种输入输出设备都是通过硬件接口或控制器与CPU相连接,这些接口都能支持输入输出指令IN,OUT与外部设备交换信息,这些信息包括控制、状态和数据三种不同性质的信息。 存 储 器 I/O 接 口 输 入 设 备 数据总线 DB 控制总线 CB 地址总线 AB 出 CPU 2019/9/3
控制信息:是由CPU发送给外部设备的,命令其处于某种方式或执行某种操作。 状态信息:从接口输入的状态信息表示I/O设备当前的状态。 数据信息:则是I/O设备和CPU真正要交换的信息。数据信息可分为三种类型:数字量、模拟量和开关量。这些信息可以是并行的,也可以是串行的。 CPU与外设之间的数据传送方式有:程序直接控制 I/O方式、中断方式 和 DMA方式。由于DMA方式是由DMA控制器实现其传送功能的,所以在这里只做简单介绍。主要讲解前两种方式。 2019/9/3
8.1.2 直接存储器存取方式(DMA)方式 当外设的速度相对很高,且一次传送的数据量很大时,中断方式的效率就很低。例如,对磁盘的读写操作,一般的文件都有几十K,几百K,甚至几兆,通过DMA方式利用专门的接口控制电路,在存储器与高速的外设之间进行大量的数据交换,而不需要CPU的参与。 DMA控制器-DMAC,除了具有一般接口的特点外,CPU可以通过对DMAC相应端口的读/写操作来控制DMA的工作方式;DMAC在得到总线控制权后,能够像CPU一样提供相应的控制信号来控制系统总线,从而实现外设与内存之间高速大量的数据传输。一般接口电路不具备控制总线的能力。 2019/9/3
存 储 器 外 部 设 备 C P U DMA 请求 响应 HOLD HLDA 控 制 2019/9/3
8.2 程序直接控制I/O方式 8.2.1 I/O接口基本结构及编址方式 关于I/O“接口”与“端口” I/O接口与CPU之间传送的信息有数据、状态和控制信号等3大类。每个接口内部都包含有一定数量的寄存器(一般包括数据寄存器、状态寄存器和控制寄存器),用来存放三种不同信息。为了区分不同的寄存器(REG),需要给每个REG分配一个地址号,这就类似于给内存单元编址一样。 I/O接口内部可寻址的REG又称为端口。按接受和传送的信息有分为数据端口(双向,输入缓冲,输出锁存),状态端口(一般只读),控制端口(一般只写)。CPU对外设工作方式的控制和信息的交换最终都归结为CPU通过IN/OUT指令对各个可寻址端口的读写操作。 2019/9/3
I/O接口编址方式 (1)统一编址:存储器(内存)与I/O端口的编址占用同一个地址空间。特点是所有对内存操作的指令对I/O端口同样有效,指令丰富,但会损失一部分的内存空间。 (2)独立编址:内存与I/O端口对应不同的地址空间。对I/O端口有专门的指令。缺点是对I/O端口操作的指令不及统一编址时丰富(例如,8086/8088中对I/O端口就只有最基本的输入输出指令),但能最大程度地满足存储空间的寻址范围。 2019/9/3
图 2019/9/3
I/O端口地址 I/O端口是CPU与输入输出设备的交换数据的场所,通过I/O端口,处理机可以接受从输入设备输入的信息;也可向输出设备发送信息。在计算机系统中,为了区分各类不同的I/O端口,就用不同的数字给它们进行编号,这种对I/O端口的编号就称为I/O端口地址。按照每次可交换一个字节数据的端口称为字节端口,每次可交换一个字数据的端口称为字端口。 在Intel公司的CPU家族中,I/O端口的地址空间可达64K,即可有65536个字节端口,或32768个字端口。这些地址不是内存单元地址的一部分,不能普通的访问内存指令来读取其信息,而要用专门的I/O指令才能访问它们。虽然CPU提供了很大的I/O地址空间,但目前大多数微机所用的端口地址都在0~3FFH范围之内,其所用的I/O地址空间只占整个I/O地址空间的很小部分。表8.1列举了几个重要的I/O端口地址。 2019/9/3
2019/9/3
每类端口有4个字的空间,对有二个串行口、二个并行口的计算机系统,其BIOS程序将得到如图所示的部分数据表。 计算机在启动时,BIOS程序(Basic Input/Output System)将检查计算机系统中有哪些端口地址。当发现有串行端口地址时,BIOS就把 该端口存放在以地址40:00H开始的数据区内;当发现有并行端口地址时,BIOS会把它 存入以地址40:08H开始的数据区内。 每类端口有4个字的空间,对有二个串行口、二个并行口的计算机系统,其BIOS程序将得到如图所示的部分数据表。 图中03F8H、02F8H、0378H和0278H分别为COM1、COM2、LPT1和LPT2的端口地址。 2019/9/3
8.2.2 I/O指令 I/O指令: PORT: 端口地址 输入指令: IN AL, PORT IN AX, PORT IN AL, DX IN AX, DX 输出指令: OUT PORT, AL OUT PORT, AX OUT DX, AL PORT: 端口地址 若地址值≦255,可直接寻址(寻址范围256个端口); 否则, 需经寄存器DX间接寻址(寻址范围64K个端口) 2019/9/3
(1) IN AX, 28H MOV DATA_WORD, AX (2) IN AL, 27H TEST AL, 00000100 JNZ ERROR MOV DX, 126 IN AL, DX OR AL, 80H OUT DX, AL 2019/9/3
简单的I/O程序举例:SOUND程序 code segment main proc far assume cs:code s: push ds xor ax,ax push ax mov bx,6000;f mov cx,1000;times mov dx,cx in al,61h and al,11111100b trig:xor al,2 out 61h,al mov cx,bx delay:loop delay dec dx jne trig ret main endp code ends end s 2019/9/3
程序直接控制I/O方式分:无条件传送方式 和条件传送方式 1)无条件传送 无条件:每次进行输入/输出之前,不需要查询外设的状态. 2)有条件传送 又称查询式传送,在每次输入/输出之前,先要读取外设的状态,满足一定的条件才能进行一次I/O操作。 2019/9/3
【例】向打印机输出字符。 C P U 打 印 机 控 制 器 打 印 机 图 打印机连接示意图 DB AB STB BUSY CB 图 打印机连接示意图 2019/9/3
2019/9/3
MOV BX ,OFFSET, BUFFER ;置缓冲区偏移量 MOV CX,CHRTL ;置输出字符计数器 : ┆源程序 MOV BX ,OFFSET, BUFFER ;置缓冲区偏移量 MOV CX,CHRTL ;置输出字符计数器 BG: MOV AL,[BX] ;取字符 MOV DX,378H ;输出字符到数据寄存器 OUT DX,AL MOV DX,379H ;读打印机状态 WT: IN AL,DX TEST AL,80H ;判‘忙’否? JZ WT ;忙,重查询 MOV DX,37AH ;形成选通信号 MOV AL,0DH ;令打印机打印字符 OUT DX,AL MOV AL,0CH INC BX ;指向下一输出字符 LOOP BG ┆ 2019/9/3
在看一个例子 Cpu要从三个设备轮流输入数据,proc1、 proc2、 proc3分别是设备1、设备2、设备3的数据输入程序,他们的状态寄存器的端口地址分别为stat1、stat2、stat3表示,这三个状态寄存器的第五位是输入准备位。 2019/9/3
input: in al , stat1 test al,20h jz dev2 call far ptr proc1 dev2: in al,stat2 jz dev3 call far ptr proc2 dev3: in al,stat3 jz no_input call far ptr proc 3 no_input 2019/9/3
8.3 中断传送方式 查询式传输过程的优点是硬件开销小,使用起来比较简单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了主机的利用率。 为了解决这个矛盾,我们提出了中断传送方式:即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU即返回继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。 2019/9/3
外部设备是如何连到主机上的? 2019/9/3
8.3.1 8086中断的分类:内部中断和硬件中断 (1)内部中断 8.3.1 8086中断的分类:内部中断和硬件中断 (1)内部中断 内部中断简称内中断,又称软件中断。它不需要外部硬件支持。并且不受中断标志位状态的影响。8086/8088内部中断有以下5种: l 除数为0中断——类型0中断 l 溢出中断——类型4中断INTO l 单步中断——类型1中断 l 断点中断——类型3中断 l 中断指令——指令INT n中断 由cpu的某些错误引起 为调试程序而设置的中断 2019/9/3
(2)硬件中断:来自处理机的外部条件 所以又称外中断硬件中断主要有两种来源——非屏蔽中断NMI 和可屏蔽中断INTR。 系统板的RAM在读写时产生奇偶校验错; I/O通道中的扩展选件出现奇偶校验错; 协处理器8087的异常状态产生的中断。 • 可屏蔽中断INTR是由外部设备通过一片8259A产生的中断请求。 从外设发出的中断请求到cpu响应中断,用两个控制条件起决定作用: 1、外设的中断请求是否被屏蔽。 2、cpu是否允许相应中断。 8259A内部有一个中断屏蔽寄存器,端口地址为21h 2019/9/3
中断屏蔽寄存器和中断命令寄存器 只允许键盘中断: mov al ,11111101 out 21h,al 结束硬件中断 mov al, 20h out 20h, al 2019/9/3
外部设备向cpu发出中断请求,cpu是否相应还与 IF 有关 STI——开中断指令 将标志寄存器中的中断标志位IF置1,允许CPU响应来自INTR引脚的中断请求 CLI——关中断指令 将标志寄存器中的中断标志位IF清0,使CPU不响应来自INTR引脚的中断请求 2019/9/3
8.3.2 中断向量表 在8086系统中,内存最低端的1K字节地址范围内(从00000-003FFH),放置256个中断的中断向量(入口地址),即称为中断向量表。每个中断矢量在表中占据4个字节,地址较高的两个字节放入口地址的段地址,地址较低的两个字节放偏移地址。 中断向量表中的存储地址 =中断类型码n×4 什么是中断向量、中断向量地址、中断向量表? 2019/9/3
2019/9/3
BIOS中断向量 38—3B E 软盘 表8-3 中断向量表 地址(Hex) 类型码 中断名称 地址(Hex) 类型码 中断名称 0—3 0 除以0 4—7 1 单步 8—B 2 非屏蔽 C—F 3 断点 10—13 4 溢出 14—17 5 打印屏幕 18—1B 6 保留 1D—1F 7 保留 20—23 8 定时器 24—27 9 键盘 28—2B A 保留的硬中断 2C—2F B 异步通信(COM2) 30—33 C 异步通信(COM1) 34—37 D 硬盘 38—3B E 软盘 3C—3F F 并行打印机 地址(Hex) 类型码 中断名称 40—43 10 视频显示I/O调用 44—47 11 设备检测调用 48—4B 12 存储器容量检测 4C—4F 13 软/硬盘I/O调用 50—53 14 通信I/O调用 54—57 15 盒式磁带I/O调用 58—5B 16 键盘I/O调用 5C—5F 17 打印机I/O调用 60—63 18 ROM BASIC 64—67 19 引导程序入口 68—6B 1A 时间调用 6C—6F 1B 键盘CTRL-BREAK控制 70—73 1C 定时器报时 74—77 1D 显示器参数表 78—7B 1E 软盘参数表 7C—7F 1F 字符点阵结构参数表 2019/9/3 BIOS中断向量
DOS中断向量 地址(Hex) 类型码 中断名称 80—83 20 程序结束,返回DOS 84—87 21 DOS系统功能调用 88—8B 22 程序结束地址 8C—8F 23 CTRL_BREAK退出地址 90—93 24 标准错误出口地址 94—97 25 绝对磁盘读 98—9B 26 绝对磁盘写 9C—9F 27 程序结束,驻留内存 A0—FF 28—3F 为DOS保留 100—17F 40—5F 保留(扩充BIOS中断向量) 180—19F 60—67 为用户软中断保留 1A0—1FF 68—7F 不用(其中70—77为I/O设备中断向量) 200—217 80—85 BASIC使用 218—3C3 86—F0 BASIC运行时,用于解释 3C4—3FF F1—FF 未用 DOS中断向量 2019/9/3
用户可以为保留的中断类型号扩充自己的需要的中断功能,对新增加的中断功能要在中断向量表中建立相应的中断向量。 用指令来为中断类型N设置中断向量: MOV AX, 0 MOV ES, AX MOV BX, N*4 ;中断入口地址 MOV AX, OFFSET INTHAND MOV ES:WORD PRT[BX],AX ;设置中断处理程序INTHAND MOV AX, SEG INTHAND ;的入口地址 MOV ES:WORD PRT[BX+2],AX ┆ INTHAND: ;中断处理程序 IRET 2019/9/3
——把类型号为AL的中断向量取出到ES:BX中 设置中断向量 预置AH=25H, AL=中断类型号,DS:DX=中断向量 用户在编写自己的中断处理程序代替系统中的某个中断处理功能时,要注意保留原来的中断向量。程序结束时,要恢复原来的中断向量。可以使用dos功能调用来存取中断向量 取中断向量 预置AH=35H, AL=中断类型号 执行INT 21H ——把类型号为AL的中断向量取出到ES:BX中 设置中断向量 预置AH=25H, AL=中断类型号,DS:DX=中断向量 ——把DS:DX指向的中断向量放置到中断向量表中类型号为AL的中断向量处 2019/9/3
例:使用DOS功能调用存取中断向量。 ┆ MOV AL, N MOV AH, 35H ;调用DOS功能35H INT 21H PUSH ES ;保存原中断向量 PUSH BX PUSH DS MOV AX, SEG INTHAND MOV DS, AX ;置用户定义的中断处理 MOV DX, OFFSET INTHAND ;程序INTHAND的入口 MOV AL, N ;地址(段地址和偏移地址) MOV AH, 25H ;设置新的中断向量 2019/9/3
POP DS ┆ POP DX ;恢复原中断向量 MOV AL , N MOV AH , 25H INT 21H RET INTHAND: ;中断处理程序 IRET 2019/9/3
8.3.3 中断过程 当中断发生时,由硬件自动完成下列动作: (1)取中断类型号N。 (2)标志寄存器(PSW)内容入栈。 8.3.3 中断过程 当中断发生时,由硬件自动完成下列动作: (1)取中断类型号N。 (2)标志寄存器(PSW)内容入栈。 (3)当前代码段寄存器(CS)内容入栈。 (4)当前指令计数器(IP)内容入栈。 (5)禁止外部中断和单步中断(IF=0,TF=0)。 (6)从中断向量表中取4*N的字节内容送IP,取 4*N+2的字节内容送CS。 (7)转中断处理程序。 2019/9/3
8.3.4 中断优先级和中断嵌套 IBM-PC规定中断的优先级次序为: 优先级高 内部中断(语法错,INTO,INT) 非屏蔽中断(NMI) 8.3.4 中断优先级和中断嵌套 IBM-PC规定中断的优先级次序为: 优先级高 内部中断(语法错,INTO,INT) 非屏蔽中断(NMI) 可屏蔽中断(INTR) 低 单步中断 可屏蔽中断的优先权又分为8级,在正常的优先级方式下,优先次序为:IR0 、IR1、 IR2、 IR3、 IR4、 IR5、 IR6、 IR7 2019/9/3
可屏蔽中断的优先权又分为8级,在正常的优先级方式下,优先次序为:IR0 、IR1、 IR2、 IR3、 IR4、 IR5、 IR6、 IR7 R SL 0 0 正常优先级关系 0 1 清除由L2-L0指定的中断请求 1 0 个中断优先级依次作循环一个位置 1 1 各中断优先级依次循环到由L2-L0指定的中断请求为最低 2019/9/3
中断嵌套:高优先级的中断请求能打断正在处理中的低级中断服务程序;在较高级的中断服务程序结束后,可返回被打断的低级中断服务程序,继续执行。 优先级:#1 < #2 < #3 主 程 序 1#中断服务子程序 2#中断服务子程序 3#中断服务子程序 中断 响应 中断 响应 中断请求 1# 2# 3# 断点 IRET IRET IRET STI和 EOI 在中断嵌套中如何是使用? 如果想让低级中断中断正在服务的高级中断应怎么做? 2019/9/3
8.3.5 中断处理的一般过程 (1)中断处理流程图 (2)中断服务子程序结构 1)保护现场(类似于执行通用子程序) 2)开中断(可选) N (1)中断处理流程图 (2)中断服务子程序结构 1)保护现场(类似于执行通用子程序) 2)开中断(可选) 3)执行关于当前中断源或异常处理所要求的I/O等程序操作 4)关中断(可选) 5)送中断结束命令给(EOI) 6)恢复现场 7)中断返回 Y N Y N Y 2019/9/3
比较: 中断控制与子程序调用 中断控制 子程序调用 程序进入方式 外部随机请求 CALL指令 比较: 中断控制与子程序调用 中断控制 子程序调用 程序进入方式 外部随机请求 CALL指令 程序进入时刻 当前指令执行后 执行CALL指令后 保护/恢复现场 视需要设置 视需要设置 保护/恢复断点 PSW/CS/IP CS/IP 返回主程序指令 执行IRET 执行RET 参数传递 无 无 2019/9/3
【例8.5】编一段中断处理程序,在主程序运行的过程中,每隔10秒钟响铃一次,同时在屏幕上显示“The bell is ring!”。 在系统定时器的中断处理程序中,有一条中断指令INT 1CH,时钟中断每发生一次(约每秒中断18.2次)都嵌套调用一次1CH的处理程序。 在ROM BIOS例程中,1CH的处理程序只有一条IRET指令,实际上它没有作任何工作,只是为用户提供了一个中断类型号。如果用户有某种定时周期性的工作需要完成,就可以利用系统定时器的中断间隔,用自己设计的处理程序来代替原有的1CH中断程序。 2019/9/3
编程如下: DATA SEGMENT COUNT DW 1 MESS DB ‘The bell is ring!’, 0DH,0AH,’$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES: DATA MAIN PROC FAR START:PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AL,1CH ;取中断向量 MOV AH,35H INT 21H 2019/9/3
MOV DX, OFFSET RING ;新偏移量送DX MOV AX, SEG RING MOV DS, AX ;新段址送DS DELAY1:DEC SI JNZ DELAY1 DEC DI JNZ DELAY POP DX ;恢复原中断向量 POP DS MOV AL,1CH MOV AH,25H INT 21H MAIN ENDP PUSH ES ;存原中断向量段址 PUSH BX ;存原中断向量偏移量 PUSH DS MOV DX, OFFSET RING ;新偏移量送DX MOV AX, SEG RING MOV DS, AX ;新段址送DS MOV AL, 1CH MOV AH, 25H INT 21H ;写入新的中断向量 POP DS IN AL, 21H ;读取中断屏蔽字 AND AL, 11111110B ;允许定时器中断 OUT 21H, AL STI ;开中断 MOV DI, 2000 DELAY:MOV SI,3000 ;延时 RING: PROC NEAR PUSH DS PUSH AX PUSH CX PUSH DX MOV AX,DATA MOV DS,AX 2019/9/3
STI ;开中断 DEC COUNT ;计秒值 JNZ EXIT MOV DX,OFFSET MESS MOV AH,09H INT 21H IN AL,61H AND AL,0FCH SOUND:XOR AL,02 OUT 61H,AL;扬声器发声 MOV CX,140H WAIT1: LOOP WAIT1;延时等待 DEC DX JNE SOUND MOV COUNT,182 EXIT: CLI ;关中断 POP DX POP CX POP AX POP DS IRET ;中断返回 RING ENDP CODE ENDS END START 2019/9/3
例8.6 在配置了键盘中断输入(中断类型09)和打印机输出(中断类型为0fh)两种外部设备的80x86的中断系统中,要求从键盘上接收一个字符,同时对32字节的输入缓冲区进行测试,如果缓冲区已满,则键盘挂起(禁止键盘中断输入),由打印机输出一个信息。 键盘和打印机分别由中断屏蔽寄存器(21h)的1位和7位控制。键盘的输入寄存器的端口地址为60h,控制寄存器的端口地址为61h.打印机输出寄存器的端口地址为378h,打印机控制寄存器的端口地址为37ah。 2019/9/3
例8.7 除数为0的软件中断(类型0)处理程序 int 21h的功能4ch,该功能是惟一不依赖于任何段寄存器内容的中止功能。该功能的另一个优点是能在al中返回一个表明程序是否正常终止的出口代码 ,al:00正常终止,01 用ctrl_C终止,02 严重设备错误引起终止;03用功能调用31h终止,0ffh cpu 错误引起终止。 2019/9/3
2.逻辑运算指令都是按 进行操作的,指令执行后只设置标志位,不保留结果的逻辑运算指令是 。 a. 位 b. 字节 c. 字 d. BCD码 1.假设字节单元(06925H)=12H,(06926H)=45H,(06927H)=78H,那么字单元(06925H)= ,字单元(06926H)= 。 a. 1245H b. 4578H c. 4512H d. 7845H 2.逻辑运算指令都是按 进行操作的,指令执行后只设置标志位,不保留结果的逻辑运算指令是 。 a. 位 b. 字节 c. 字 d. BCD码 e. AND f. OR g. XOR h. TEST 3.和指令AND AL,55 AND 0F0H 等效的指令是 ,和MOV BX, 0FH EQ 1111B等效的指令是 。 a. AND AL,55H b. AND AL,0F5H c. AND AL,50H d. AND AL, 0F0H e. MOV BX,0000H f. MOV BX,0FH g. MOV BX,0FFH h. MOV BX,0FFFFH 4.过程定义开始的伪指令是 。 宏定义结束的伪指令是 。 a. SEGMENT b. MACRO c. PROC d. ASSUME e. END f. ENDS g. ENDM h. ENDP 5.将数据37H定义为字节变量X1的语句是 ,数据37H定义为字变量X2的语句是 。 a. X1 DB 37 b. X2 DB 37 c. X1 DW 37H d. X2 DW 37H e. X1 DB 37H g. X2 DB 37H 6.互换指令XCHG可以在两个寄存器之间互换数据,也可以在 与 之间互换数据。 a. 寄存器 b. 立即数 c. 存储单元 d. 堆栈 7.对程序流向的控制和转移,就是对执行指令地址的修改。如在同一段内偏移,则修改 ,如在两个段之间转移,则修改 。 a. IP b. CS c. CS和IP d. CS或IP 2019/9/3
1.8088/8086 CPU内部共有 个寄存器,其中有 个通用寄存器、 个变址寄存器、 个段寄存器。 3.IBM-PC计算机全部指令的集合称为它的 。这些指令按功能可以分为六大类:数据传送指令、算术指令、 、串处理指令、 和 。 4.在不改变段寄存器的前提下,IBM-PC计算机内存寻址的最大范围是 字节。若CS=1234H,SS=2341H,DS=3412H,BP=8756H,则以BP寄存器间接寻址的非段超越的内存单元的物理地址是 。 5.程序有顺序结构 、 、 和 四种结构。 6.循环程序有两种结构形式,一种是 ,另一种是 ,当有可能一次也无需执行循环体时采用前者。 7.8088/8086允许使用 个中断向量,每个中断向量占 个字节,系统的低段地址从 到 存放着中断向量表。 8.下面是对DOS功能调用方法的简单说明: (1)在AH寄存器中存入所要调用功能的 。 (2)根据所调用功能的规定设置 。 (3)用 指令转入子程序入口。 (4)相应的子程序运行完后,可以按规定取得 。 2019/9/3
1、在指令系统中,段内、段间返回均为RET指令。试回答: (1)执行段内返回RET指令时,执行的操作是: 2、ARY DW 10 DUP(?) ┇ MOV AL,TYPE ARY MOV BL,LENGTH ARY MOV CL,SIZE ARY 上述MOV指令序列执行后的结果是什么? 3、设某数据段: DATA SEGMENT ORG 20H NUM1=8 NUM2=NUM1+10H DA1 DB 'COMPUTER' DB 0AH,0DH COUNT EQU $-DA1 DA2 DW 'CO','MP','UT','ER' DATA ENDS 试回答:(1)DA1的偏移地址是:___________________ (2)COUNT的值是___________________________________ (3)DA2+5字节单元的内容是_________________________________ 2019/9/3
13.在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来( )。 参考答案为:B 13.在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来( )。 参考答案为:B A.占内存空间小,但速度慢 B.占内存空间大,但速度快 C.占内存空间相同,速度快 D.占内存空间相同,速度慢 14.在程序执行过程中,IP寄存器中始终保存的是( )。 参考答案为:B A.上一条指令的首地址 B.下一条指令的首地址 C.正在执行指令的首地址 D.需计算有效地址后才能确定地址 15.PSW寄存器中共有( )位条件状态位,有( )位控制状态位。 参考答案为:A A.6、3 B.3、6 C.8、4 D.4、8 16.下列指令执行时出错的是( )。 参考答案为:A A.ADD BUF1,BUF2 B.JMP DWORD PTR DAT [BX] C.MOV AX,[BX+DI] NUM D.TEST AL,08H 17.已知(AX)=1234H,执行下述三条指令后,(AX)=( )。 参考答案为:D MOV BX,AX NEG BX ADD AX,BX A.1234H B.0EDCCH C.6DCCH D.0000H 18.在下列指令中,( )指令的执行会影响条件码中的CF位。 参考答案为:D A.JMP NEXT B.JC NEXT C.INC BX D.SHL AX,1 19.串指令中的目的操作数地址是由( )提供。 参考答案为:C A.SS:[BP] B.DS:[SI] C.ES:[DI] D.CS:[IP] 20.将DX的内容除以2,正确的指令是( )。 参考答案为:C A.DIV 2 B.DIV DX,2 C.SAR DX,1 D.SHL DX,1 2019/9/3
2.下述指令的目操作数是存放在堆栈段中,请填入正确答案。ADD____[BX],CH。 l.变量和标号的区别是________。 2.下述指令的目操作数是存放在堆栈段中,请填入正确答案。ADD____[BX],CH。 3.段地址和偏移地址为2000:5076的存储单元物理地址是____。 4.在下列程序段括号中,填入正确的答案。 ( ) SEGMENT BUF DB 12H,56H DATA ENDS ... CODE ( ) 5.指出下列指令错误原因,填入括号中。 A. MOV AX,BL ;( ) B. MOV CS,AX ;( ) C. DEC GAMA[BX];( ) D. MOV ES,5600H;( ) E. SUB AX,DS ;( ) 6.下列语句在存贮器中分别为变量分配多少字节?请填入括号中。 VR1 DW ? ;( ) VR2 DW 4 DUP(?),2;( ) CONT EQU 10 ;( ) 2019/9/3
1.在8086/8088系统中,存储器是分段的,每段最大长度是_______字节,段内偏移地址从_______到_______。 2.在程序调试时,显示某指令存放地址是2340:0056,则物理地址是_______。 3.汇编语言源程序中的语句有三种类型,它们是_______语句,_______语句和_______语句。 4.指令MOV AX,[BX+SI+10H]源操作数寻址方式是_______。 5.执行段间返回指令RET时,将栈顶的一个字弹出到_______后,又弹出一个字到_______寄存器中。 6.已知DS=3000H,DI=1200H,(31200H)=64H,(31201H)=93H,执行NEG WORD PTR[DI]后,(31200H)=_______,(31201H)=_______。 7.执行下列指令序列 MOV AL,80H MOV BL,08H CBW IDIV BL 则AH=_______AL=_______。 8.已知数据定义语句 ORG 120H VECT1 DW 200H VECT2 DW VECT1 执行 MOV AX,VECT1 AX=_______ MOV BX,VECT2 BX=_______。 2019/9/3
判断以下各语句是否有错误,如有错误请说明错误原因 1.MOV AX, 0 2.MOV [1000H], 1000H 3.MOV BL, AX 5.PUSH PSW 6.SHR DX, BL 7.MUL AL, BL 8.AND AX, [1000] 9.XCHG CS, DS 10.LDS AL, [BX] 2019/9/3
1.下列语句在存储器中分别为变量数据区分配多少个字节单元? (1)VAR3 DD 10 (2)VAR4 DW 4 DUP(?),2 2.设DS=2000H,BX=1256H,变量TABLE的偏移地址为20A1H,(232F7H)=3280H.下列指令分别执行后,IP的值各是多少? (1)JMP BX IP=___________________ (2)JMP TABLE[BX] IP=___________________ 3.选用NOT,AND,OR XOR逻辑指令编写一指令序列,实现将AL第0位,第2位同时置1,其他位变反。 1.指令 ARRAY DB 100 DUP (0,3 DUP (1,2),0,3) 汇编后为ARRAY存储单元分配 ( ) 个字节。 2.指令 LEA SI ,DATA1 可用指令( )代替。 3.中断向量表的地址范围是( )。 4.指令 MOV AX , 256[BX][SI]的寻址方式是 ( ) 。 5.STRING DB ‘AB’,0,0,‘CD’,0,0,‘EF’,0,0 请用DW伪指令改写上述语句,必须保持内存单元内容不变。 ( ) 2019/9/3
1.在指令系统中,段内、段间返回均为RET指令。试回答: (1)执行段内返回RET指令时,执行的操作是: 2.用两种办法,分别只用一条指令实现将DA1数据区中数据个数送入CX。 DA1 DB 20H DUP(?) DA2 DW 10H,45H,7856H 3.已知:BX=1357H,BP=2468H,SI=1000H,DI=2000H,SS=1000H,DS=2000H,ES=3000H,试分别指出下列各指令中存储器操作数的物理地址。 MOV AL,[BP+20H]的物理地址是 : MOV [BX+DI-80H],AL的物理地址是: MOV BL,ES:[SI+40H]的物理地址是: 2019/9/3
请用两种办法,分别只用一条指令实现将DA1数据区中数据个数送入CX。 2. 用三种不同方法实现在字存储单元DB1中存储2000H。 简答题 1. DA1 DB 20H DUP(?) DA2 DW 10H,45H,7856H 请用两种办法,分别只用一条指令实现将DA1数据区中数据个数送入CX。 2. 用三种不同方法实现在字存储单元DB1中存储2000H。 3. 已知:BX=1357H,BP=2468H,SI=1000H,DI=2000H,SS=1000H,DS=2000H,ES=3000H,试分别指出下列各指令中存储器操作数的物理地址。 MOV AL,[BP+20H]的物理地址是 。 MOV [BX+DI-80H],AL的物理地址是 。 MOV BL,ES:[SI+40H]的物理地址是 。 2019/9/3
1.8086/8088内存分段存取,受其内存总量的限制,最多只能分为16个段来使用。( )。 判断题(共10分,每小题1分) 1.8086/8088内存分段存取,受其内存总量的限制,最多只能分为16个段来使用。( )。 2.汇编语言接近于自然语言,易学、易用、通用强( )。 3.任意一程序模块最后一条语句必须是END [地址] ( )。 4.一个子程序必须有一条RET语句,也可以有多条( )。 5.指令执行后的结果为0。则零标志为0( )。 6.把若干个模块连接起来成为可执行文件的系统程序是汇编程序( )。 7.用指令的助记符、符号地址、标号等符号书写程序的语言成为汇编语言,汇编语言能被计算机直接识别( )。 8.指令INT 21H引起的中断是内中断( )。 9.直接寻址方式中,有效地址存放在代码段中指令操作码之后,但操作数一般存放在数据段中( )。 10.立即数不能直接送段寄存器( )。 2019/9/3
15、在汇编语言程序的开发过程中使用宏功能的顺序是( )。 A、宏定义,宏调用 B、宏定义,宏展开 15、在汇编语言程序的开发过程中使用宏功能的顺序是( )。 A、宏定义,宏调用 B、宏定义,宏展开 C、宏定义,宏调用,宏展开 D、宏定义,宏展开,宏调用 16、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是( )。 A、名字项 B、操作码项 C、操作数项 D、注释项 17、编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有( )。 A、CMP B、SUB C、AND D、MOV 18、为使CX=-1时,转至MINUS而编制了一指令序列,其中错误的序列是( )。 A、INC CX B、SUB CX,0FFFFH JZ MINUS JZ MINUS C、AND CX,0FFFFH D、XOR CX,0FFFFH 19、设ES=3000H,DI=00FFH,CX=0005H,AL=41H,DF=0,从300FFH开始的连续5个字节单元内容分别是44H,43H,42H,41H,41H。 执行REPNZ SCASB指令后,正确的结果是( ) A、DI=0104H,CX=0000H B、DI=0103H,CX=0001H C、DI=0102H,CX=0002H D、DI=0101H,CX=0003H 20、与LEA BX, ARRAY功能相同的指令是( ) A、MOV BX,ARRAY B、MOV BX, SEG ARRAY C、MOV BX,OFFSET ARRAY D、LDS BX, ARRAY 2019/9/3
请回答:(1)该程序段已占有的存储字节数是多少? (2)符号名DA4的值是多少?符号名DA5的值是多少? 1.现有如下程序段: DATA SEGMENT ORG 0020H DA1 DW 12H,23H DA2 DB 11H,21H DA3 EQU 1234H DA4 EQU $-DA2 DA5 DB 31H,32H DATA ENDS 请回答:(1)该程序段已占有的存储字节数是多少? (2)符号名DA4的值是多少?符号名DA5的值是多少? 2019/9/3