微机原理与接口技术(第四版)课后习题答案(1)

更新时间:2024-04-15 23:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 微型计算机系统 〔习题1.1〕简答题

(2)总线信号分成哪三组信号?

(3)PC机主存采用DRAM组成还是SRAM组成? (5)ROM-BIOS是什么? (6)中断是什么?

(9)处理器的“取指-译码-执行周期”是指什么? 〔解答〕

② 总线信号分成三组,分别是数据总线、地址总线和控制总线。 ③ PC机主存采用DRAM组成。

⑤ ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。

⑥ 中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。

⑨ 指令的处理过程。处理器的“取指—译码—执行周期” 是指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。 〔习题1.3〕填空题

(2)Intel 8086支持___________容量主存空间,80486支持___________容量主存空间。

(3)二进制16位共有___________个编码组合,如果一位对应处理器一个地址信号,16位地址信号共能寻址___________容量主存空间。

(9)最初由 公司采用Intel 8088处理器和( )操作系统推出PC机。

② 1MB,4GB ③ 216,64KB (9)IBM,DOS

〔习题1.4〕说明微型计算机系统的硬件组成及各部分作用。

〔解答〕

CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。

存储器:存储器是存放程序和数据的部件。

外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。

总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信

号。

〔习题1.7〕区别如下概念:助记符、汇编语言、汇编语言程序和汇编程序。 〔解答〕

助记符:人们采用便于记忆、并能描述指令功能的符号来表示机器指令操作码,该符号称为指令助记符。

汇编语言:用助记符表示的指令以及使用它们编写程序的规则就形成汇编语言。

汇编语言程序:用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。

汇编程序:汇编语言源程序要翻译成机器语言程序才可以由处理器执行。这个翻译的过程称为“汇编”,完成汇编工作的程序就是汇编程序(Assembler)。

第2章 处理器结构 〔习题2.1〕简答题

(1)ALU是什么?

(2)8086的取指为什么可以被称为指令预取? (4)堆栈的存取原则是什么?

(5)标志寄存器主要保存哪方面的信息?

(6)执行了一条加法指令后,发现ZF=1,说明结果是什么? (9)汇编语言源程序文件中,END语句后的语句会被汇编吗?

〔解答〕

① ALU是算术逻辑运算单元,负责处理器所能进行的各种运算,主要是算术运算和逻辑运算。

② 取指是指从主存取出指令代码通过总线传输到处理器内部指令寄存器的过程。8086分成总线接口单元和指令执行单元,可以独立操作。在执行单元执行一条指令的同时,总线接口单元可以读取下一条指令,等到执行时不需要进行取指了,所以称为预取。

④ 堆栈的存取原则是先进后出(也称为后进先出)操作方式存取数据。 ⑤ 标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。

⑥ 执行了一条加法指令后,发现ZF=1,表明运算结果为0。 ⑨ 不会。 〔习题2.3〕填空题

(3)逻辑地址由__________和__________两部分组成。代码段中下一条要

- -2

执行的指令由CS和__________寄存器指示,后者在实地址模型中起作用的仅有__________寄存器部分。

(4)进行8位二进制数加法:10111010+01101100,8位结果是__________,标志PF=__________。

(5)在实地址工作方式下,逻辑地址“7380H∶400H”表示的物理地址是__________,并且该段起始于__________物理地址。

(9)除外设数据外的数据寻址方式有3类,分别被称为_____________、_____________和_____________。 〔解答〕

③ 段地址,偏移地址,EIP,IP ④ 00100110,0

⑤ 73C00H,73800H

⑨ 立即数寻址、寄存器寻址和存储器寻址 〔习题2.4〕处理器内部具有哪3个基本部分?8086分为哪两大功能部件?其各自的主要功能是什么?

〔解答〕

处理器内部有ALU、寄存器和指令处理三个基本单元。 8086有两大功能部件:总线接口单元和执行单元。

总线接口单元:管理着8086与系统总线的接口,负责处理器对存储器和外设进行访问。8086所有对外操作必须通过BIU和这些总线进行。

执行单元EU:负责指令译码、数据运算和指令执行。

〔习题2.5〕8086怎样实现了最简单的指令流水线?

〔解答〕

8086中,指令的读取是在BIU单元,而指令的执行是在EU单元。因为BIU和EU两个单元相互独立、分别完成各自操作,所以可以并行操作。也就是说,在EU单元对一个指令进行译码执行时,BIU单元可以同时对后续指令进行读取;这就是最简单的指令流水线技术。

〔习题2.8〕什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达(均为十六进制形式):

① FFFF∶0 ② 40∶17 ③ 2000∶4500 ④ B821∶4567 〔解答〕

物理地址:在处理器地址总线上输出的地址称为物理地址。每个存储单元有一个唯一的物理地址。

逻辑地址:在处理器内部、程序员编程时采用逻辑地址,采用“段地址:偏移地址“形式。某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段中,但其物理地址是唯一的。

- -3

逻辑地址转换成物理地址:逻辑地址由处理器在输出之前转换为物理地址。将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址。

① FFFFH:0=FFFF0H ② 40H:17H=00417H ③ 2000H:4500H=24500H ④ B821H:4567H=BC777H

〔习题2.12〕汇编语句有哪两种,每个语句由哪4个部分组成?

〔解答〕

汇编语句有两种:执行性语句(处理器指令)、说明性语句(伪指令)。 每个语句有:标号、指令助记符、操作数或参数、注释4个部分组成。

〔习题2.16〕说明下列指令中源操作数的寻址方式?假设VARD是一个双字变量。

(1)mov edx,1234h (2)mov edx,vard (3)mov edx,ebx (4)mov edx,[ebx]

(5)mov edx,[ebx+1234h] (6)mov edx,vard[ebx] (7)mov edx,[ebx+edi]

(8)mov edx,[ebx+edi+1234h] (9)mov edx,vard[esi+edi] (10)mov edx,[ebp*4] 〔解答〕

① 立即数 ② 直接 ③ 寄存器 ④ 寄存器间接 ⑤ 寄存器相对 ⑥ 寄存器相对 ⑦ 基址变址

⑧ 相对基址变址 ⑨ 相对基址变址 ⑩ 带比例寻址

- -4

第3章 数据处理 〔习题3.1〕简答题

(1)使用二进制8位表达无符号整数,257有对应的编码吗?

(2)字符“'F'”和数值46H作为MOV指令的源操作数有区别吗?

(3)为什么可以把指令“MOV AX, (34+67H)*3”中的数值表达式看成是常量?

(4)数值500,能够作为字节变量的初值吗? (6)都是获取偏移地址,为什么指令“LEA EBX, [ESI]”正确,而指令“MOV EBX, OFFSET[ESI]”就错误?

(7)INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数?

(9)乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算?

(10)逻辑与运算为什么也称为逻辑乘? 〔解答〕

① 没有。使用二进制8位表达无符号整数,257没有对应的编码。 ② 字符“'F'”的ASCII码就是数值46H,所以没有区别。

③ 汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。

④ 不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。

⑥ 前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。

⑦ INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 ⑨ 加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。

⑩ 逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。

〔习题3.3〕填空题

(1)定义字节变量的伪指令助记符是_____________,获取变量名所具有的偏移地址的操作符是_____________。

(2)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是10进制数___________;如果认为它是BCD码,则表示真值_____________;又如果它是某个ASCII码,则代表字符__________。

(3)C语言用“\\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其ASCII码是_____________,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_____________,它将光标移到下一行。

- -5

(4)数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD PTR H8843”执行后,CX=_____________。

(5)用DWORD定义的一个变量XYZ,它的类型是_____________,用“TYPE XYZ”会得到数值为_____________。如果将其以字量使用,应该用_____________说明。

(6)数据段有语句“ABC BYTE 1,2,3”,代码段指令“MOV CL, ABC+2”执行后,CL=_____________。 〔解答〕

① BYTE,OFFSET ② 97,61,小写字母a

③ 0DH(13),0AH(10) ④ 8843H

⑤ DWORD,4,WORD PTR XYZ ⑥ 3 〔习题3.4〕

下列十六进制数表示无符号整数,请转换为十进制形式的真值: ① FFH ② 0H ③ 5EH ④ EFH 〔解答〕

① 255 ② 0 ③ 94 ④ 239 〔习题3.5〕

将下列十进制数真值转换为压缩BCD码: ① 12 ② 24 ③ 68 ④ 99 〔解答〕

① 12H ② 24H ③ 68H ④ 99H 〔习题3.6〕

将下列压缩BCD码转换为十进制数:

① 10010001 ② 10001001 ③ 00110110 ④ 10010000 〔解答〕

① 91 ② 89 ③ 36

- -6

④ 90 〔习题3.7〕

将下列十进制数用8位二进制补码表示: ① 0 ② 127 ③-127 ④ -57 〔解答〕

① 00000000 ② 01111111 ③ 10000001 ④ 11000111 〔习题3.8〕

进行十六进制数据的加减运算,并说明是否有进位或借位: ① 1234H+7802H ② F034H+5AB0H ③ C051H-1234H ④ 9876H-ABCDH 〔解答〕

① 1234H+7802H=8A36H,无进位 ② F034H+5AB0H=4AF4H,有进位 ③ C051H-1234H=BE1DH,无借位 ④ 9876H-ABCDH=ECA9H,有借位 〔习题3.10〕

设置一个数据段,按照如下要求定义变量或符号常量: ① my1b为字符串变量:Personal Computer ② my2b为用十进制数表示的字节变量:20 ③ my3b为用十六进制数表示的字节变量:20 ④ my4b为用二进制数表示的字节变量:20 ⑤ my5w为20个未赋值的字变量 ⑥ my6c为100的常量

⑦ my7c表示字符串:Personal Computer 〔解答〕

my1b byte 'Personal Computer' my2b byte 20 my3b byte 14h

my4b byte 00010100b my5w word 20 dup(?) my6c = 100

my7c equ

- -7

〔习题3.11〕定义常量NUM,其值为5;数据段中定义字数组变量DATALIST,它的头5个字单元中依次存放-10,2,5和4,最后1个单元初值不定。 〔解答〕 num equ 5 datalist

byte -10,2,5,4,?

〔习题3.12〕从低地址开始以字节为单位,用十六进制形式给出下列语句依次分配的数值:

byte 'ABC',10,10h,'EF',3 dup(-1,?,3 dup(4)) word 10h,-5,3 dup(?) 〔解答〕

41 42 43 0A 10 45 46 FF 00 04 04 04 FF 00 04 04 04 FF 00 04 04 04 10 00 FB FF 00 00 00 00 00 00

〔习题3.19〕请分别用一条汇编语言指令完成如下功能:(去E)

(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。 (2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。

(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。

(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。 (5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。 〔解答〕 ① add edx,ebx ② add al,[ebx+esi] ③ add [bx+0b2h],cx ④ add varw,3412h ⑤ add eax,0a0h

〔习题3.20〕分别执行如下程序片断,说明每条指令的执行结果:(去E)

(1)

mov eax,80h add eax,3 add eax,80h adc eax,3 (2)

mov eax,100

; EAX=__________ ; EAX=__________,CF=__________,SF=__________ ; EAX=__________,CF=__________,OF=__________ ; EAX=__________,CF=__________,ZF=__________ ; EAX=__________

- -8

add ax,200 ; EAX=__________,CF=__________ (3) mov eax,100 ; EAX=__________ add al,200 ; EAX=__________,CF=__________

(4) mov al,7fh ; AL=__________ sub al,8 ; AL=__________,CF=__________,SF=__________ sub al,80h ; AL=__________,CF=__________,OF=__________ sbb al,3 ; AL=__________,CF=__________,ZF=__________ 〔解答〕

(1) ; EAX=80H ; EAX=83H,CF=0,SF=0 ; EAX=103H,CF=0,OF=0 ; EAX=106H,CF=0,ZF=0

(2) ; EAX=100 ; EAX=300,CF=0

(3) ; EAX=100 ; EAX=44,CF=1(包含256的进位含义:256+44=300)

(4) mov al,7fh ; AL=7FH sub al,8 ; AL=77H,CF=0,SF=0 sub al,80h ; AL=F7H,CF=1,OF=1 sbb al,3 ; AL=F3H,CF=0,ZF=0 〔习题3.21〕(推敲)

给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:

mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al

; AL=89H CF ZF SF OF PF ; AL=12H 1 0 0 1 1

- -9

〔解答〕

mov al,89h add al,al

add al,9dh cmp al,0bch sub al,al dec al inc al ; AL=0AFH ; AL=0AFH ; AL=00H ; AL=0FFH ; AL=00H 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 1 1

〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成EDX.EAX←buffer1-buffer2功能。(去E) 〔解答〕 ; 数据段 buffer1 qword 67883000h buffer2 qword 67762000h ; 代码段 mov eax,dword ptr buffer1 mov edx,dword ptr buffer1+4 sub eax,dword ptr buffer2 sbb edx,dword ptr buffer2+4

〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:(去E)

(1)

mov esi,10011100b ; ESI=__________H and esi,80h ; ESI=__________H or esi,7fh ; ESI=__________H xor esi,0feh ; ESI=__________H (2)

mov eax,1010b ; EAX=__________B shr eax,2 ; EAX=__________B,CF=__________ shl eax,1 ; EAX=__________B,CF=__________ and eax,3 ; EAX=__________B,CF=__________ (3)

mov eax,1011b ; EAX=__________B rol eax,2 ; EAX=__________B,CF=__________ rcr eax,1 ; EAX=__________B,CF=__________ or eax,3 ; EAX=__________B,CF=__________ (4)

xor eax,eax ; EAX=__________,CF=__________,OF=__________

- -10

; ZF=__________,SF=__________,PF=__________ 〔解答〕

(1) ; ESI=9CH ; ESI=80H ; ESI=FFH ; ESI=01H

(2) ; EAX=1010B(可以有前导0,下同) ; EAX=0010B,CF=1 ; EAX=0100B,CF=0 ; EAX=0000B,CF=0

(3) ; EAX=1011B(可以有前导0,下同) ; EAX=101100B,CF=0 ; EAX=10110B,CF=0 ; EAX=10111B,CF=0

(4) ; EAX=0,CF=0,OF=0 ; ZF=1,SF=0,PF=1

〔习题3.24〕3.24 给出下列各条指令执行后AX的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax

test ax,0f0f0h

〔解答〕 mov ax,1470h ; AX=1470H CF OF SF ZF PF and ax,ax ; AX=1470H 0 0 0 0 0 or ax,ax ; AX=1470H 0 0 0 0 0 xor ax,ax ; AX=0000H 0 0 0 1 1 not ax ; AX=FFFFH 0 0 0 1 1 test ax,0f0f0h ; AX=0F0F0H 0 0 1 0 1

- -11

〔习题3.25〕逻辑运算指令怎么实现复位、置位和求反功能?

〔解答〕

AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。 〔习题3.27〕(去E)

编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。 〔解答〕 ; 代码段 mov ecx,3 again: shl eax,1 rcl edx,1 loop again

〔习题3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。 〔解答〕 ; 数据段 bcd byte 92h ; 代码段 mov al,bcd shr al,4 add al,30h call dispc mov al,bcd and al,0fh add al,30h call dispc

〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。 ; 数据段

array1 dword 1,2,3,4,5,6,7,8,9,10 array2 dword 10 dup(?) ; 代码段

- -12

mov ecx,lengthof array1 mov ebx,0

again: mov eax,array1[ebx*4] add eax,8000h mov ______________ add ebx,__________ loop again 〔解答〕 mov array2[ebx*4],eax add ebx,1 第4章 汇编语言程序设计 〔习题4.1〕简答题

(3)为什么判断无符号数大小和有符号大小的条件转移指令不同?

(4)双分支结构中两个分支体之间的JMP指令有什么作用? (5)为什么特别强调为子程序加上必要的注释?

(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题? (7)参数传递的“传值”和“传址”有什么区别? (8)INCLUDE语句和INCLUDELIB有什么区别? 〔解答〕

③ 无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关系要利用不同的标志位组合,所以有对应的两组指令。

④ 双分支结构中两个分支体之间的JMP指令,用于实现结束前一个分支回到共同的出口作用。

⑤ 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。

⑥ 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。

⑦ “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;“传址”时,被调用程序可能修改通过地址引用的变量内容。

⑧ INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件。 〔习题4.3〕填空题

(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成四种类型:段内转移、__________,段内转移、__________和段间转移、__________,段间转移、__________。

- -13

(2)假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP=__________,执行指令“JMP TABLE[EBX]”后EIP=__________。

(3)?CMP EAX,3721H?指令之后是JZ指令,发生转移的条件是EAX=__________,此时ZF=__________。(去E)

(5)循环结构程序一般有三个部分组成,它们是__________,循环体和__________部分。

(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__________。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是__________。

(8)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是__________。

(9)MASM汇编语言中,声明一个共用的变量应使用__________伪指令;而使用外部变量要使用__________伪指令声明。 〔解答〕

① 相对寻址,间接寻址,直接寻址,间接寻址 ② 1256H,3280H ③ 3721H,1

⑤ 循环初始,循环控制 ⑦ TEST ENDP,ENDM ⑧ EBP

⑨ PUBLIC,EXTERN 〔习题4.6〕

执行如下程序片断后,CMP指令分别使得5个状态标志CF、ZF、SF、OF和PF为0还是为1?它会使得哪些条件转移指令指令Jcc的条件成立、发生转移? mov eax,20h cmp eax,80h 〔解答〕

CF=1 ZF=0 SF=1 OF=0 PF=1

可以使得条件成立、发生转移的指令有:JC JS JP JNZ JNO

- -14

〔习题4.8〕在采用奇偶校验传输数据的接收端应该验证数据传输的正确性。例如,如果采用偶校验,那么在接收到的数据中,其包含?1?的个数应该为0或偶数个,否则说明出现传输错误。现在,在接收端编写一个这样的程序,如果偶校验不正确显示错误信息,传输正确则继续。假设传送字节数据、最高位作为校验位,接收到的数据已经保存在Rdata变量中。

〔解答〕 ; 数据段 Rdata byte 57h ;保存接收的数据 error byte 'Error !',0 ; 代码段 mov al,Rdata and al,0ffh ;标志PF反映“1”的个数 jp done ;个数为偶数,正确继续 mov eax,offset error ;个数为奇数,显示出错 call dispmsg done:

〔习题4.10〕编程,首先测试双字变量DVAR的最高位,如果为1,则显示字母?L?;如果最高位不为1,则继续测试最低位,如果最低位为1,则显示字母?R?;如果最低位也不为1,则显示字母?M?。 〔解答〕 ; 数据段 dvar dword 57h ; 代码段 mov eax,dvar test eax,80000000h jnz nextl test eax,1 jnz nextr mov al,'M' jmp done nextl: mov al,'L' jmp done nextr: mov al,'R' done: call dispc

- -15

〔习题4.11〕编写一个程序,先提示输入数字“Input Number:0~9”,然后在下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error!”,继续等待输入数字。

〔解答〕 ; 数据段

inmsg byte 'Input number(0~9): ',0

ermsg byte 0dh,0ah,'Error! Input again: ',0 ; 代码段 mov eax,offset inmsg ; 提示输入数字 call dispmsg again: call readc ; 等待按键 cmp al,'0' ; 数字 < 0? jb erdisp cmp al,'9' ; 数字 > 9? ja erdisp call dispcrlf call dispc jmp done erdisp: mov eax,offset ermsg call dispmsg jmp again done:

〔习题4.12〕有一个首地址为ARRAY的20个双字的数组,说明下列程序段的功能。

mov ecx,20 mov eax,0 mov esi,eax

sumlp: add eax,array[esi] add esi,4 loop sumlp mov total,eax 〔解答〕

求这20个双字的和,保存在TOTAL变量,不关进心进位和溢出。

- -16

〔习题4.13〕编程中经常要记录某个字符出现的次数。现编程记录某个字符串中空格出现的次数,结果保存在SPACE单元。

〔解答〕 ; 数据段

string byte 'Do you have fun with Assembly ?',0 ;以0结尾的字符串 space dword ? ; 代码段 mov esi,offset string xor ebx,ebx ;EBX用于记录空格数 again: mov al,[esi] cmp al,0 jz done cmp al,20h ;空格的ASCII码是20H jne next ;不相等、不是空格,转移 inc bx ;相等、是空格,空格个数加1 next: inc esi jmp again ;继续循环 done: mov space,ebx ;保存结果

〔习题4.14〕编写计算100个16位正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到WORDSUM,如超过则显示‘Overflow !’。 〔解答〕 ; 数据段

array word 2005,2008,98 dup (1394) ; 假设100个16位正整数 wordsum word ?

error byte 'Overflow !',0 ; 代码段 and ebx,0 mov ecx,100 xor ax,ax

again: add ax,array[ebx*2] jc over inc ebx loop again mov wordsum,ax

over: mov eax,offset error

- -17

call dispmsg

〔习题4.15〕在一个已知长度的字符串中查找是否包含?BUG?子字符串。如果存在,显示?Y?,否则显示?N?。

〔解答〕 ; 数据段

string byte 'If you find any error in the program, you can DEBUG it.' count = sizeof string bug byte 'BUG' ; 代码段 mov ecx,count mov edi,offset string L1: mov esi,offset bug push edi mov edx,sizeof bug LN: mov al,[esi] cmp [edi],al jne L2 inc esi inc edi dec edx jne LN pop edi mov al,'Y' jmp L3 L2: pop edi inc edi loop L1 mov al,'N' L3: call dispc

〔习题4.16〕主存中有一个8位压缩BCD码数据,保存在一个双字变量中。现在需要进行显示,但要求不显示前导0。由于位数较多,需要利用循环实现,但如何处理前导0和数据中间的0呢?不妨设置一个标记。编程实现。 〔解答〕 ; 数据段 bcd dword 00371002h

- -18

; 代码段 mov esi,bcd cmp esi,0 jnz goon mov al,'0' call dispc jmp done goon: mov ecx,8 xor ebx,ebx again: rol esi,4 mov eax,esi and eax,0fh cmp ebx,0 jnz disp cmp eax,0 jz next mov ebx,1 disp: add al,30h call dispc next: loop again done:

; EBX=0,表示可能是前导0

; EAX低4位保存当前要显示的BCD码 ; EBX≠0,说明不是前导0,要显示 ; EBX=0,说明可能是前导0

; EAX=0,说明是前导0,不显示

; EAX≠0,没有前导0了,令EBX=1≠0

〔习题4.17〕已知一个字符串的长度,剔除其中所有的空格字符。请从字符串最后一个字符开始逐个向前判断、并进行处理。

〔解答〕 ; 数据段

string byte 'Let us have a try !',0dh,0ah,0 ; 代码段 mov ecx,sizeof string cmp ecx,2 jb done lea eax,string ; 显示处理前的字符串 call dispmsg mov esi,ecx dec esi

outlp: cmp string[esi],' ' ; 检测是否是空格 jnz next ; 不是空格继续循环 mov edi,esi ; 是空格,进入剔除空格分支

- -19

inlp:

next:

done:

dec ecx inc edi

mov al,string[edi] ; 前移一个位置 mov string[edi-1],al cmp edi,ecx jb inlp dec esi ; 继续进行 cmp esi,0 jnz outlp ; 为0结束 lea eax,string ; 显示处理后的字符串 call dispmsg

〔习题4.19〕请按如下说明编写子程序:

子程序功能:把用ASCII码表示的两位十进制数转换为压缩BCD码 入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码 出口参数:AL=对应BCD码 〔解答〕 asctob proc shl dh,4 mov al,dh and dl,0fh or al,dl ret asctob endp

〔习题4.21〕编写一个源程序,在键盘上按一个键,将其返回的ASCII码值显示出来,如果按下ESC键(对应ASCII码是1BH)则程序退出。请调用书中的HTOASC子程序。 〔解答〕 ; 代码段,主程序 again: call readc cmp al,1bh jz done mov bl,al mov al,':' call dispc

- -20

done:

mov al,bl rol al,4

call htoasc ; 调用子程序 call dispc ; 显示一个字符 mov al,bl

call htoasc ; 调用子程序 call dispc ; 显示一个字符 call dispcrlf jmp again

〔习题4.22〕编写一个子程序,它以二进制形式显示EAX中32位数据,并设计一个主程序验证。

〔解答〕 ; 代码段,主程序 mov eax,8F98FF00H call dispbd ; 调用子程序 ; 代码段,子程序 dispbd proc ; 32位二进制数的输出 push ecx push edx mov ecx,32 ; 要输出的字符个数 dbd: rol eax,1 ; AL循环左移一位 push eax and al,01h ; 取AL最低位 add al,30h ; 转化成相应的ASCLL码值 call dispc ; 以二进制的形式显示 pop eax loop dbd pop edx pop ecx ret dispbd endp

〔习题4.26〕

编制3个子程序把一个32位二进制数用8位十六进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。

- -21

(1)采用EAX寄存器传递这个32位二进制数 (2)采用temp变量传递这个32位二进制数 (3)采用堆栈方法传递这个32位二进制数 〔解答〕

(1) ; 数据段

wvar word 307281AFH ; 代码段,主程序 mov eax,wvar call disp mov al,'H' call dispc ; 代码段,子程序 disp proc push ebx push ecx mov ecx,8 ; 8位 dhw1: rol eax,4 mov ebx,eax and al,0fh ; 转换为ASCII码 add al,30h cmp al,'9' jbe dhw2 add al,7 dhw2: call dispc mov eax,ebx loop dhw1 pop ecx pop ebx ret disp endp

(2) ; 数据段

wvar word 307281AFH temp word ? ; 代码段,主程序 mov eax,wvar mov temp,eax

- -22

call disp mov al,'H' call dispc ; 代码段,子程序 disp proc push ebx push ecx mov ecx,8 ; 8位 mov eax,temp dhw1: rol eax,4 mov ebx,eax and al,0fh ; 转换为ASCII码 add al,30h cmp al,'9' jbe dhw2 add al,7

dhw2: call dispc ; 显示一个字符 mov eax,ebx loop dhw1 pop ecx pop ebx ret disp endp

(3) ; 数据段

wvar word 307281AFH ; 代码段,主程序 push wvar call disp add esp,4 mov al,'H' call dispc ; 代码段,子程序 disp proc push ebp mov ebp,esp push ebx push ecx mov ecx,8 ; 8位

- -23

dhw1:

dhw2:

disp

mov eax,[ebp+8] rol eax,4 mov ebx,eax and al,0fh ; 转换为ASCII码 add al,30h cmp al,'9' jbe dhw2 add al,7 call dispc mov eax,ebx loop dhw1 pop ecx pop ebx pop ebp ret endp

〔习题4.28〕设计一个简单的两个整数的加法器程序。

〔解答〕 ;ex0428.asm include io32.inc .data

msg1 byte 'Enter the integers:',13,10,0

msg2 byte 13,10,'Enter space to continue! Enter any other key to exit!',13,10,0 .code start: mov eax,offset msg1 call dispmsg call readsid mov ebx,eax mov al,'+' call dispc call dispcrlf call readsid add ebx,eax

- -24

mov al,'=' call dispc mov eax,ebx call dispsid call dispcrlf mov eax,offset msg2 call dispmsg call readc cmp al,20h je start exit 0 end start

〔习题4. 31〕

区别如下概念:宏定义、宏调用、宏指令、宏展开、宏汇编。 〔解答〕

宏定义:就是对宏进行说明,由一对宏汇编伪指令MACRO和ENDM来完成。

宏调用:宏定义之后的使用。在使用宏指令的位置写下宏名,后跟实体参数。 宏指令:使用宏时,其形式很像指令,所以称为宏指令。 宏展开:在汇编时,汇编程序用对应的代码序列替代宏指令。 宏汇编:指使用宏的方法进行汇编语言程序设计。 第5章 微机总线 〔习题5.1〕简答题

(1)为什么称处理器的数据总线是双向的?

(2)8086的地址和数据总线为什么要分时复用? (3)具有三态能力的引脚输出高阻意味着什么? (4)总线周期中的等待状态是个什么工作状态? (6)总线数据传输为什么要进行总线仲裁? (7)异步时序为什么可以没有总线时钟信号? 〔解答〕

① 数据总线承担着处理器与存储器、外设之间的数据交换,既可以输入也可以输出,故其是双向的。

② 为减少引脚个数,8086采用了地址总线和数据总线分时复用。即数据总线在不同时刻还具有地址总线的功能。

③ 具有三态能力的引脚当输出呈现高阻状态时,相当于连接了一个阻抗很

- -25

高的外部器件,信号无法正常输出;即放弃对该引脚的控制,与其他部件断开连接。

④ 处理器的运行速度远远快于存储器和I/O端口。处理器检测到存储器或I/O端口不能按基本的总线周期进行数据交换时,插入一个等待状态Tw。等待状态实际上是一个保持总线信号状态不变的时钟周期。

⑥ 总线上可能连接多个需要控制总线的主设备,需要确定当前需要控制总线的主设备,所以需要总线仲裁。

⑦ 异步时序是由总线握手(Handshake)联络(应答)信号控制,不是由总线时钟控制。故总线时钟信号可有可无。 〔习题5.3〕填空题

(1)某个处理器具有16个地址总线,通常可以用A__________表达最低位地址信号,用A15表达最高地址信号。

(2)8086有3个最基本的读写控制信号,它们是M/IO,__________和__________。

(3)8086预取指令时,在其引脚上将产生__________总线操作;执行指令“MOV AX, [BX]”时,在其引脚上将产生__________总线操作;执行指令“MOV [BX], AX”时,在其引脚上将产生__________总线操作。

(5)8086处理器进行I/O读操作时,其引脚M/IO为低,引脚为__________;ISA总线的__________引脚低有效说明进行I/O读操作。PCI总线用C/BE[3::0]#引脚编码为__________表示I/O读总线周期。

(6)占用总线进行数据传输,一般需要经过总线请求和仲裁、__________、__________和结束4个阶段。 〔解答〕

① 0

② 读,写

③ 存储器读,存储器读,存储器写 ⑤ 低有效,,0010 ⑥ 寻址,数据传送 〔习题5.4〕

处理器有哪4种最基本的总线操作(周期)? 〔解答〕

存储器读、存储器写,I/O读、I/O写。

〔习题5.5〕8086处理器的输入控制信号有RESET,HOLD,NMI和INTR,其含义各是什么?当它们有效时,8086 CPU将出现何种反应?

〔解答〕

RESET:复位输入信号,高电平有效。该引脚有效时,将迫使处理器回到其

- -26

初始状态;转为无效时,CPU重新开始工作。

HOLD:总线请求,是一个高电平有效的输入信号。该引脚有效时,表示其他总线主控设备向处理器申请使用原来由处理器控制的总线。

NMI:不可屏蔽中断请求,是一个利用上升沿有效的输入信号。该引脚信号有效时,表示外界向CPU申请不可屏蔽中断。

INTR:可屏蔽中断请求,是一个高电平有效的输入信号。该引脚信号有效时,表示中断请求设备向处理器申请可屏蔽中断。

〔习题5.6〕区别概念:指令周期、总线周期(机器周期)、时钟周期、T状态。 〔解答〕

指令周期:一条指令从取指、译码到最终执行完成的过程。 总线周期(机器周期):有数据交换的总线操作。

时钟周期:处理器的基本工作节拍,由时钟信号产生,一个高电平和一个低电平为一个周期。

T状态:完成特定操作的一个时钟周期。由于时间上一个T状态等于一个时钟周期,所以常常将两者混为一谈。

〔习题5.7〕总结8086各个T状态的主要功能。

〔解答〕

T1状态:总线周期的第一个时钟周期主要用于输出存储器地址或I/O地址; T2状态:输出读/写控制信号。

T3状态:锁存地址、处理器提供的控制信号和数据在总线上继续维持有效,且T3时钟的前沿(下降沿)对READY引脚进行检测。READY信号有效,进入T4周期。

T4状态:总线周期的最后一个时钟周期,处理器和存储器或I/O端口继续进行数据传送,直到完成,并为下一个总线周期做好准备。

Tw状态:等待状态。处理器在T3前沿发现READY信号无效后,插入Tw。Tw状态的引脚信号延续T3时的状态、维持不变。

〔习题5.8〕请解释8086(最小组态)以下引脚信号的含义:CLK,A19/S6~A16/S3,AD15~AD0,ALE,M/IO,和。默画它们在具有一个等待状态的存储器读总线周期中的波形示意。

〔解答〕

CLK:时钟输入。时钟信号是一个频率稳定的数字信号,其频率就是处理器的工作频率,工作频率的倒数就是时钟周期的时间长度。

A19/S6~A16/S3:地址/状态分时复用引脚,是一组4个具有三态能力的输出信号。这些引脚在访问存储器的第一个时钟周期输出高4位地址A19~A16,

- -27

在访问外设的第一个时钟周期输出低电平无效;其他时间输出状态信号S6~S3。

AD15~AD0:地址/数据分时复用引脚,共16个引脚,用作地址总线时是单向输出信号;用作数据总线时是双向信号,具有三态输出能力。

ALE:地址锁存允许,是一个三态、输出、高电平有效的信号。有效时,表示复用引脚(AD15~AD0和A19/S6~A16/S3)上正在传送地址信号。

M/IO:访问存储器或者I/O,是一个三态输出信号,该引脚高电平时,表示处理器将访问存储器,此时地址总线A19~A0提供20位的存储器物理地址。该引脚低电平时,表示处理器将访问I/O端口,此时地址总线A15~A0提供16位的I/O地址。

:读控制,也是一个三态、输出低电平有效信号。有效时,表示处理器

正在从存储单元或I/O端口读取数据。

:写控制,是一个三态、输出低电平有效信号。有效时,表示处理器正

将数据写到存储单元或I/O端口。 第6章 存储系统 〔习题6.1〕简答题

(1)存储系统为什么不能采用一种存储器件构成? (6)存储器的存取时间和存取周期有什么区别? (9)地址重复是怎么回事? 〔解答〕

① 因为各种存储器件在容量、速度和价格方面存在矛盾。速度快,则单位价格高;容量大,单位价格低,但存取速度慢。故存储系统不能采用一种存储器件。

⑥ 存取时间是指从读/写命令发出,到数据传输操作完成所经历的时间;存取周期表示两次存储器访问所允许的最小时间间隔。存取周期大于等于存取时间。

⑨ 译码电路中只有部分地址线参与译码会造成地址重复,也就是一个存储单元占有多个存储器地址。 〔习题6.3〕填空题

(1)计算机存储容量的基本单位:1 B(Byte)=__________b(bits),1KB=__________B,1MB=__________KB,1GB=__________MB,1TB=__________GB=__________B。

(3)在半导体存储器中,RAM指的是__________,它可读可写,但断电后信息一般会__________;而ROM指的是__________,正常工作时只能从中__________信息,但断电后信息__________。

(4)存储结构为8K×8位的EPROM芯片2764,共有__________个数据引脚、__________个地址引脚。用它组成64KB的ROM存储区共需__________片芯片。

- -28

(5)对一个存储器芯片进行片选译码时,有一个高位系统地址信号没有参加译码,则该芯片的每个存储单元占有__________个存储器地址。

(7)在8088处理器系统中,假设地址总线A19~A15输出01011时译码电路产生一个有效的片选信号。这个片选信号将占有主存从__________到__________的物理地址范围,共有__________容量。 〔解答〕

① 8,1024,1024,1024,1024,240

③ 随机存取存储器,丢失,只读存储器,读取,不会丢失 ④ 8,13,8 ⑤ 2

⑦ 58000H,5FFFFH,32KB 〔习题6.5〕简述存储系统的层次结构及各层存储部件特点。

〔解答〕

为解决容量、速度和价格的矛盾,存储系统采用金字塔型层次结构,单位价格和速度自上而下逐层减少,容量自上而下逐层增加。

存储系统的各层存储部件自上而下依次是:CPU寄存器、高速缓存、主存存储器(RAM/ROM),辅助存储器如磁盘、光盘等。CPU寄存器、高速缓存器集成在CPU芯片上,对用户来说,是透明的,它们用于暂存主存和处理器交互的数据,以减少频繁读取主存而影响处理器速度;主存储器则可和处理器直接交换数据,而辅助存储器必须经过主存存储器,才可与处理器进行数据交换。

〔习题6.6〕在半导体存储器件中,什么是SRAM、DRAM和NVRAM? 〔解答〕

SRAM是静态读写存储器芯片,它以触发器为基本存储单元,以其两种稳定状态表示逻辑0和逻辑1。

DRAM是动态读写存储器芯片,它以单个MOS管为基本存储单元,以极间电容充放电表示两种逻辑状态,需要不断刷新保持信息正确。

NVRAM多指带有后备电池的SRAM芯片,这种芯片采用CMOS制造工艺设计以减少用电。

〔习题6.7〕SRAM芯片的片选信号有什么用途?对应读写控制的信号是什么? 〔解答〕

片选信号:片选有效时,才可以对该芯片进行读/写操作;无效时,数据引脚呈现高阻状态、与系统数据总线隔离,并可降低内部功耗。

读控制信号:在芯片被选中的前提下,若有效,则芯片将允许地址信号选择的存储单元内的数据输出到数据引脚上。

写控制信号:在芯片被选中的前提下,若有效,则芯片将数据引脚上

- -29

的数据写入地址信号选择的存储单元内。

〔习题6.8〕DRAM为什么要刷新,存储系统如何进行刷新?

〔解答〕

DRAM以单个MOS管为基本存储单元,以极间电容充放电表示两种逻辑状态。由于极间电容的容量很小,充电电荷自然泄漏会很快导致信息丢失,所以要不断对它进行刷新操作、即读取原内容、放大再写入。

存储系统的刷新控制电路提供刷新行地址,将存储DRAM芯片中的某一行选中刷新。实际上,刷新控制电路是将刷新行地址同时送达存储系统中所有DRAM芯片,所有DRAM芯片都在同时进行一行的刷新操作。

刷新控制电路设置每次行地址增量,并在一定时间间隔内启动一次刷新操作,就能够保证所有DRAM芯片的所有存储单元得到及时刷新。

〔习题6.9〕什么是掩摸ROM、OTP-ROM、EPROM、EEPROM和Flash ROM? 〔解答〕

掩膜ROM:通过掩膜工艺、将要保存的信息直接制作在芯片当中,以后再也不能更改。

OTP-ROM:该类芯片出厂时存储的信息为全“1”,允许用户进行一次性编程,此后便不能更改。

EPROM:一般指可用紫外光擦除、并可重复编程的ROM。

EEPROM:也常表达为E2PROM,其擦除和编程(即擦写)通过加电的方法来进行,可实现“在线编程”和“在应用编程”

Flash ROM:是一种新型的电擦除可编程ROM芯片,能够很快擦除整个芯片内容。

〔习题6.11〕什么是存储器芯片的全译码和部分译码?各有什么特点? 〔解答〕

全译码:使用全部系统地址总线进行译码。特点是地址唯一,一个存储单元只对应一个存储器地址(反之亦然),组成的存储系统其地址空间连续。

部分译码:只使用部分系统地址总线进行译码。其特点:有一个没有被使用的地址信号就有两种编码,这两个编码指向同一个存储单元,出现地址重复。

第7章 输入输出接口 〔习题7.1〕简答题

(2)计算机两个功能部件、设备等之间为什么一般都需要数据缓冲?

- -30

(6)透明锁存器和非透明锁存器是什么区别? (7)什么样的外设可以采用无条件数据传送方式? (9)远调用CALL指令和INT N指令有什么区别? (10)为什么说外部中断才是真正意义上的中断? 〔解答〕

② 数据缓冲用于匹配快速的处理器与相对慢速的外设或两个功能部件速度不匹配的数据交换。

⑥ 透明锁存器的控制端为有效电平时,输出随输入变化,常称为直通或透明。非透明锁存器不论其控制端为低或为高电平,输出状态都不随输入变化。

⑦ 如发光二极管、按键和开关等简单设备,它们的工作方式十分简单;相对处理器而言,其状态很少发生变化或变化很慢。这些设备与处理器交换数据时,可采用无条件传送。

⑨ 远调用CALL指令利用直接或间接寻址调用另一个代码段的子程序;INT n指令利用中断向量表(地址表)的方法调用另一个代码段的中断服务程序,还有保存标志寄存器的功能。

⑩ 外部中断是由处理器外部提出中断请求引起的程序中断。相对于处理器来说,外部中断是随机产生的,所以是真正意义上的中断。 〔习题7.3〕填空题

(1)计算机能够直接处理的信号是__????___?,__????___?和__????___?形式。

(2)在Intel 80x86系列处理器中,I/O端口的地址采用__????___?编址方式,访问端口时要使用专门的__????___?指令,有两种寻址方式,其具体形式是:__????___?和__????___?。

(3)指令IN是将数据从__????___?传输到__????___?,执行该指令处理器引脚产生__????___?总线周期。

(4)指令“IN AL, 21H”的目的操作数是__????___?寻址方式,源操作数是__????___?寻址方式。

(5)指令“OUT DX, EAX”的目的操作数是__????___?寻址方式,源操作数是__????___?寻址方式。

(6)DMA的意思是__????___?,主要用于高速外设和主存间的数据传送。进行DMA传送的一般过程是:外设先向DMA控制器提出__????___?,DMA控制器通过__????___?信号有效向处理器提出总线请求,处理器回以__????___?信号有效表示响应。此时处理器的三态信号线将输出__????___?状态,即将它们交由__????___?进行控制,完成外设和主存间的直接数据传送。

(10)某时刻中断控制器8259A的IRR内容是08H,说明其__????___?引脚有中断请求。某时刻中断控制器8259A的ISR内容是08H,说明__????___?中断正在被服务。

- -31

〔解答〕

① 数字量、开关量、脉冲量

② I/O独立,输入输出(I/O)指令,直接寻址,DX寄存器间接寻址 ③ I/O端口(接口,外设),处理器(主机),I/O读 ④ 寄存器,I/O地址的直接寻址 ⑤ I/O地址的间接寻址,寄存器 ⑥ 直接存储器存取,DMA请求,总线请求,总线响应,高阻,DMAC(DMA控制器)

⑩ IR3,IR3请求的

〔习题7.4〕一般的I/O接口电路安排有哪三类寄存器?它们各自的作用是什么?

〔解答〕

① 数据寄存器

保存处理器与外设之间交换的数据。 ② 状态寄存器

保存外设当前的工作状态信息。处理器通过该寄存器掌握外设状态,进行数据交换。

③ 控制寄存器

保存处理器控制接口电路和外设操作的有关信息。处理器向控制寄存器写入控制信息,选择接口电路的不同工作方式和与外设交换数据形式。

〔习题7.5〕什么是I/O独立编址和统一编址,各有什么特点?

〔解答〕

独立编址是将I/O端口单独编排地址,独立于存储器地址。

统一编址是将I/O端口与存储器地址统一编排,共享一个地址空间。

端口独立编址方式,处理器除要具有存储器访问的指令和引脚外,还需要设计I/O访问的I/O指令和I/O引脚,其优点是:不占用存储器空间;I/O指令使程序中I/O操作一目了然;较小的I/O地址空间使地址译码简单。但I/O指令功能简单,寻址方式没有存储器指令丰富。

统一编址方式,处理器不再区分I/O口访问和存储器访问。其优点是:处理器不用设计I/O指令和引脚,丰富的存储器访问方法同样能够运用于I/O访问。缺点是:I/O端口会占用存储器的部分地址空间,通过指令不易辨认I/O操作。

〔习题7.6〕简述主机与外设进行数据交换的几种常用方式。 〔解答〕

主机与外设进行数据交换的几种常用方式:

- -32

① 无条件传送方式,常用于简单设备,处理器认为它们总是处于就绪状态,随时进行数据传送。

② 程序查询方式:处理器首先查询外设工作状态,在外设就绪时进行数据传送。

③ 中断方式:外设在准备就绪的条件下通过请求引脚信号,主动向处理器提出交换数据的请求。处理器无其他更紧迫任务,则执行中断服务程序完成一次数据传送。

④ DMA传送: DMA控制器可接管总线,作为总线的主控设备,通过系统总线来控制存储器和外设直接进行数据交换。此种方式适用于需要大量数据高速传送的场合。

〔习题7.8〕现有一个输入设备,其数据端口地址为FFE0H,状态端口地址为FFE2H。当状态标志D0=1时,表明一个字节的输入数据就绪。请编写利用查询方式进行数据传送的程序段,要求从该设备读取100个字节保存到BUFFER缓冲区。

〔解答〕 mov bx, offset buffer mov cx,100 again: mov dx,0ffe2h status: in al,dx ; 查询一次 test al,01h jz status mov dx,0ffe0h in al,dx ; 输入一个字节 mov [bx],al inc bx loop again ; 循环,输入100个字节 〔习题7.9〕

某个字符输出设备,其数据端口和状态端口的地址均为80H。在读取状态时,当标志位D7=0时,表明该设备闲,可以接收一个字符。请编写利用查询方式进行数据传送的程序段,要求将存放于缓冲区ADDR处的一串字符(以0为结束标志)输出给该设备。 〔解答〕 mov bx,offset addr again: cmp byte ptr [bx],0 jz done status: in al,80h ; 查询 test al,80h

- -33

done:

jnz status mov al,[bx] out 80h,al inc bx jmp again

; 输出一个字节 ; 循环

〔习题7.10〕以可屏蔽中断为例,说明一次完整的中断过程主要包括哪些环节? 〔解答〕

中断请求:外设通过硬件信号的形式、向处理器引脚发送有效请求信号。 中断响应:在满足一定条件时,处理器进入中断响应总线周期。 关中断:处理器在响应中断后会自动关闭中断。

断点保护:处理器在响应中断后将自动保护断点地址。

中断源识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。

现场保护:对处理器执行程序有影响的工作环境(主要是寄存器)进行保护。 中断服务:处理器执行相应的中断服务程序,进行数据传送等处理工作。 恢复现场:完成中断服务后,恢复处理器原来的工作环境。 开中断:处理器允许新的可屏蔽中断。

中断返回:处理器执行中断返回指令,程序返回断点继续执行原来的程序。

〔习题7.11〕什么是中断源?为什么要安排中断优先级?什么是中断嵌套?什么情况下程序会发生中断嵌套?

〔解答〕

计算机系统中,凡是能引起中断的事件或原因,被称为中断源。

处理器随时可能会收到多个中断源提出的中断请求,因此,为每个中断源分配一级中断优先权,根据它们的高低顺序决定响应的先后。

一个中断处理过程中又有一个中断请求、并被响应处理,被称为中断嵌套。 必须在中断服务程序中打开中断,程序才会发生中断嵌套。

〔习题7.12〕明确如下中断有关的概念:中断源、中断请求、中断响应、关中断、开中断、中断返回、中断识别、中断优先权、中断嵌套、中断处理、中断服务。

〔解答〕

中断源:能引起中断的事件或原因。

中断请求:是外设通过硬件信号的形式、向处理器引脚发送有效请求信号。 中断响应:中断响应是在满足一定条件时,处理器进入中断响应总线周期。

- -34

关中断:禁止处理器响应可屏蔽中断。 开中断:允许处理器响应可屏蔽中断。

中断返回:处理器执行中断返回指令,将断点地址从堆栈中弹出,程序返回断点继续执行原来的程序。

中断识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。

中断优先权:为每个中断源分配一级中断优先权,即系统设计者事先为每个中断源确定处理器响应他们的先后顺序。

中断嵌套:在一个中断处理过程中又有一个中断请求被响应处理,称为中断嵌套。

中断处理:接到中断请求信号后,随之产生的整个工作过程,称中断处理。 中断服务:指处理器执行相应的中断服务程序,进行数据传送等处理工作。

〔习题7.19〕中断控制器8259A中IRR,IMR和ISR三个寄存器的作用是什么? 〔解答〕

中断请求寄存器IRR:保存8条外界中断请求信号IR0~IR7的请求状态。Di位为1表示IRi引脚有中断请求;为0表示该引脚无请求。

中断屏蔽寄存器IMR:保存对中断请求信号IR的屏蔽状态。Di位为1表示IRi中断被屏蔽(禁止);为0表示允许该中断。

中断服务寄存器ISR:保存正在被8259A服务着的中断状态。Di位为1表示IRi中断正在服务中;为0表示没有被服务。

第8章 常用接口技术 〔习题8.1〕简答题

(1)为什么称8253/8254的工作方式1为可编程单稳脉冲工作方式? (2)为什么写入8253/8254的计数初值为0却代表最大的计数值?

(3)处理器通过8255的控制端口可以写入方式控制字和位控制字,8255如何区别这两个控制字呢?

(4)“8255具有锁存输出数据的能力”是什么意思?

① 方式1可以通过编程产生一个确定宽度的单稳脉冲,故称工作方式1为可编程单稳脉冲工作方式。

② 因为计数器是先减1,再判断是否为0,所以写入0实际代表最大计数值。 ③ 通过控制字的D7位来区别:D7=1,该控制字为方式控制字;否则为位控制字。

④ 8255的三种工作方式均可实现输出数据锁存,即数据输出后被保存在8255内部,可以读取出来,只有当8255再输出新一组数据时才改变。

- -35

〔习题8.3〕填空题

(1)8253芯片上有__________个__________位计数器通道,每个计数器有__________种工作方式可供选择。若设定某通道为方式0后,其输出引脚OUT为__________电平;当__________后通道开始计数,__________信号端每来一个脉冲__________就减1;当__________,则输出引脚输出__________电平,表示计数结束。

(3)8255具有__________个外设数据引脚,分成3个端口,引脚分别是__________,__________和__________。

(4)8255的A和B端口都定义为方式1输入,端口C上半部分定义为输出,则方式控制字是__________,其中D0位已经没有作用、可为0或1。

(5)对8255的控制寄存器写入A0H,则其端口C的PC7引脚被用作__________信号线。 〔解答〕

① 3,16,6,低,写入计数初值(并进入减1计数器),脉冲输入CLK,减法计数器,计数器的计数值减为0,高

③ 24,PA0~PA7,PB0~PB7,PC0~PC7 ④ 10110110(=B6H,B7H) ⑤

〔习题8.4〕8253芯片每个计数通道与外设接口有哪些信号线,每个信号的用途是什么?

〔解答〕

CLK时钟输入信号:在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1。

GATE门控输入信号:控制计数器工作,可分成电平控制和上升沿控制两种类型。

OUT计数器输出信号:当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号。

〔习题8.5〕8253芯片需要几个I/O地址,各用于何种目的? 〔解答〕

4个,读写计数器0,1和2,及控制字。

〔习题8.6〕试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。

① 使计数器1工作在方式0,仅用8位二进制计数,计数初值为128。

- -36

② 使计数器0工作在方式1,按BCD码计数,计数值为3000。 ③ 使计数器2工作在方式2,计数值为02F0H。 〔解答〕

① mov al,50h mov dx,207h out dx,al mov al,128 ; =80h mov dx,205h out dx,al

② mov al,33h mov dx,207h out dx,al mov ax,3000h ; 不是3000 mov dx,204h out dx,al mov al,ah out dx,al

③ mov al,0b4h mov dx,207h out dx,al mov al,02f0h mov dx,206h out dx,al mov al,ah out dx,al

〔习题8.8〕针对8255芯片工作方式1输出时序,说明数据输出的过程。 〔解答〕

① 中断方式下,处理器响应中断,执行输出OUT指令:输出数据给8255,发出信号。查询方式下,通过端口C的状态确信可以输出数据,处理器执行输出指令;

② WR信号一方面清除INTR,另一方面在上升沿使有效,通知外设接收数据。实质上信号是外设的选通信号;

③ WR信号结束后,数据从端口数据线上输出。当外设接收数据后,发出

- -37

响应; ④ 信号使出新的中断请求。

无效,上升沿又使INTR有效(允许中断的情况),发

〔习题8.9〕设定8255芯片的端口A为方式1输入,端口B为方式1输出,则读取口C的数据的各位是什么含义? 〔解答〕

PC0:端口B的中断请求信号 PC1:端口B输出缓冲器满信号 PC2:端口B中断允许控制位 PC3:端口A的中断请求信号 PC4:端口A中断允许控制位 PC5:端口A输入缓冲器满信号 PC6/PC7:I/O信号

〔习题8.12〕有一工业控制系统,有四个控制点,分别由四个对应的输入端控制,现用8255的端口C实现该系统的控制,如本题图形。开关K0~K3打开则对应发光二极管L0~L3亮,表示系统该控制点运行正常;开关闭合则对应发光二极管不亮,说明该控制点出现故障。编写8255的初始化程序和这段控制程序。 〔解答〕 ; 写入方式字 mov al,100×00×1b ; =81H(×表示任意,可以填写为0,也可以为1) mov dx,控制口地址 ; 可以假设为0FFFEH out dx,al ;加入下一段更好,使L0~L3全亮 mov al,0fh mov dx,端口C地址 ; 可以假设为0FFFCH out dx,al ;控制程序段 mov dx,端口C地址 ; 可以假设为0FFFCH in al,dx ; 读入PC0~PC3 mov cl,4 shl al,cl ; 左移4位 out dx,al ; 控制PC4~PC7

- -38

本文来源:https://www.bwwdw.com/article/v04p.html

Top