·1·北邮《微机接口技术》周峰,倪晖版参考答案第二章2.8086CPU由哪两个单元组成?其中,指令队列在哪个单元中,有何作用?答:总线接口单元(BusInterfaceUnit,BIU)和执行单元(ExecutionUnit,EU)。指令队列在BIU中。它的作用是当EU在执行指令时,空闲的BIU可以从内存读取后续指令到指令队列,这样就可以将取指令工作和执行指令工作重叠进行,从而提高CPU的工作效率,加快指令的执行速度。3.8086CPU中8位寄存器和16位寄存器是什么关系?答:8086的通用寄存器包括数据寄存器、指针寄存器和变址寄存器。其中数据寄存器包含AX、BX、CX、DX四个16位寄存器,但他们每个都可以分开作为两个单独的8位寄存器使用。8086的指针寄存器和变址寄存器不可分割为8位寄存器。4.8086CPU中的IP寄存器有何用途?答:IP寄存器是指令指针寄存器,用来存放下一条要执行的指令在代码段中的偏移地址。在程序运行过程中,IP寄存器始终指向下一条指令的首地址,与CS寄存器联合确定下一条指令的物理地址。8086就是通过IP寄存器来控制指令序列的执行流程。5.在标志寄存器中,用于反映运算结果属性的标志位有哪些?它们每一位所表示的含义是什么?答:有CF、PF、AF、ZF、SF、OF。它们的含义如下:CF:进位标志。它记录运算时从最高有效位产生的进位值或结果值。最高有效位有进位或有借位时CF=1,否则CF=0。PF:奇偶标志。它记录运算结果的奇偶检验条件。当结果操作·2·数中“1”的个数为偶数时PF=1,否则PF=0。AF:辅助进位标志。在字节运算时,由低半字节(字节的低4位)向高半字节有进位或借位时,AF=1,否则AF=0。ZF:零标志。运算结果为零时ZF=1,否则ZF=0。SF:符号标志。它记录运算结果的最高位,即由符号数的符号。OF:溢出标志。在运算过程中,如果运算结果已经超出了机器能表示的数值范围(指有符号数)称为溢出,此时OF=1,否则OF=0。6.分别完成下面的8位运算,并说明各主要标志位的状态,以及结果是否产生溢出(提示:需要分为有符号数和无符号数两种情况)。(1)90H+3CH(2)3CH-90H(3)7DH-9CH答:(1)有符号:CCH主要标志CF=0PF=1AF=0ZF=0SF=1OF=0无溢出无符号:CCH主要标志CF=0PF=1AF=0ZF=0SF=1OF=0无溢出(2)有符号:ACH主要标志CF=1PF=1AF=0ZF=0SF=1OF=1溢出无符号:ACH主要标志CF=1PF=1AF=0ZF=0SF=1OF=0溢出(3)有符号:E1H主要标志CF=1PF=1AF=0ZF=0SF=1OF=1溢出无符号:E1H主要标志CF=1PF=1AF=0ZF=0SF=1OF=0溢出7.假设下列各组数值均分配在10000H开始的连续存储单元中,分别画出各组数值在内存中的存储形式。字节:2、‘2’、‘B’、‘b’和‘0’;字:12H、1004H、-1和0;双字:420H、12345678H和0。答:(1)2‘2’‘B’‘b’‘0’10000H02H32H42H62H30H(2)·3·12H1004H-1010000H12H04HFFH00H10001H00H10HFFH00H(3)420H12345678H010001H20H78H00H10002H04H56H00H10003H00H34H00H10004H00H12H00H8.什么是物理空间?8086CPU的物理地址是多少位?其决定的物理空间有多大?答:物理空间是指由编址单元(如字节)大小和地址总线宽度决定的可寻址的存储器地址空间。8086CPU具有20条地址总线,所以它的物理地址是20bit。8086的存储是按照字节存储的,所以其物理空间为202B=1MB。9.什么是逻辑空间?8086的逻辑空间有何特点?其逻辑地址如何构成?答:采用分段存储管理方式,将物理空间分割,通过段映射构建的由多个独立的逻辑段构成的存储空间即为逻辑空间。8086使用16位地址在段内寻址,称为段的偏移地址,因此其特点是段的最大长度162=64KB。在8086中,将16位的段地址和16位的偏移地址合称为逻辑地址,其中段地址舍弃了最低四位的0,故逻辑地址等于段地址乘以10H加偏移地址。10.简述面向逻辑空间编程比面向物理空间编程的优势。答:可以解除程序设计对实际物理空间的依赖。具体表现在:程序设计时不需要了解存储器的使用情况,操作系统或监控程序会将程序分配在空闲空间,不会和系统程序或其他程序冲突;第二,程序设计时采用的是逻辑空间的地址,存储管理部件将自动、透明地进行逻辑空间地址到物理空间地址·4·的转换,即逻辑空间到物理空间的映射,所以,不同的空间分配对程序没有影响;第三,逻辑空间是相对“观察者”而言的,即不同的人面对的逻辑空间是独立无关的,所以每个编程者都是在自己的逻辑空间上编程。11.8086CPU是如何实现逻辑空间到物理空间的映射的?答:逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段内地址。段地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起始位置的偏移量。12.简述段寄存器的作用。答:为了保证地址转换的效率,访问存储器时,总是由段寄存器提供段址。8086在BIU中设有4个段寄存器(CS、DS、SS、ES),CPU可以在某一时刻通过这4个段寄存器来访问4个不同的段。在程序设计层面,可以通过指定段和段寄存器的关系来标识段,这样在实际编程时,绝大多数情况下逻辑地址只需要指定偏移地址。13.已知当前(CS)=7F00H,(IP)=017CH,问下条指令的物理地址是什么?答:(CS)*10H+(IP)=7F00H*10H+017CH=7F000H+017CH=7F17CH14.已知当前(DS)=5C00H,(ES)=5D10H,而数据的物理地址是63654H,若分别使用DS和ES段寄存器访问该数据,问偏移地址分别是多少?答:若使用DS,则(IP)=63654H-(DS)*10H=63654H-5C000H=7654H。若使用ES,则(IP)=63654H-(ES)*10H=63654H-5D100H=6554H。15.什么是I/O端口?8086CPU的端口空间是多大?需要使用地址总线的多少位访问端口空间?答:I/O端口即输入输出接口,是外部设备和主机交换信息的接口,在它们之间的通信中起到了转换和缓冲数据的作用。8086的I/O端口空间大小为162=64KB。需要16位,8086使用地址总线的低16位访问I/O端口。16.简述Intel的32位处理器如何对16位处理器的寄存器进行扩展,有何好处。·5·答:(1)将16位通用寄存器扩展16位形成32位通用寄存器。同时还保留了原来的16位寄存器和8位寄存器。(2)将指令寄存器IP扩展16位形成32为的EIP寄存器。(3)段寄存器仍然是16位的,但增加了FS和GS两个段寄存器。(4)将寄存器Flags扩展16为形成32位的EFLAGS标志寄存器,增加了新的标志。32位微处理器完整保留了16位微处理器的寄存器结构,可保证16位架构的程序可以不经修改的运行在32位架构中,即向前兼容,是Intel商业成功的重要保证。17.简述32位处理器的工作模式。答:(1)实模式。实模式下的工作原理与8086相同,就相当于一个告诉的8086处理器。(2)保护模式。该模式有以下特点:支持多任务;支持存储器的分段管理和分页管理,易于实现虚拟操作系统;具有保护功能,包括存储器保护、任务特权级保护和任务之间的保护。(3)虚拟8086模式。虚拟8086模式是为了在保护模式下执行8086程序而设计的。在虚拟8086模式下可执行16位的软件,同时虚拟8086模式又可以以任务的形式与真正的32位任务进行切换,共享资源。18.简述保护模式下存储管理的特点。答:在保护模式下,微处理器支持分段存储管理和分页存储管理。分段存储管理完成由多个逻辑段构建的逻辑空间映射到线性空间的工作;程序设计面向逻辑空间进行;如果不使用分页存储管理,则线性空间就是物理空间;分页存储管理将线性空间按照一定的大小(4KB)划分页(逻辑页),然后以页为单位在物理空间上进行分配(物理页)和回收,并实现逻辑页到物理页的映射;分页存储管理对使用者是透明的。第三章1.指令由哪两部分构成?分别起什么作用?答:由操作码和操作数组成。操作码表示指令所要完成操作的功能和性质,操作数提供该操作的对象。·6·2.存储器寻址方式提供的是什么地址?它最终如何映射到实际的物理地址?答:由段址和偏移地址组成的逻辑地址。逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段内地址。段地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起始位置的偏移量。3.简述立即寻址和直接寻址、寄存器寻址和寄存器间接寻址的区别。答:立即寻址的指令所需的操作数直接存放在指令中,指令的操作数字段就是真正的操作数。直接寻址是在指令中给出操作数所在内存单元的段内偏移量。寄存器寻址的操作数存放在寄存器中,指令的操作数字段是使用的寄存器。寄存器间接寻址方式中,寄存器内存放的是操作数的地址,而不是操作数本身,即操作数是通过寄存器间接得到的。4.指出下列各种操作数的寻址方式。MOVAX,420HMOV[BX],SIMOVAX,[90]MOV[DI+90],AHMOVAL,[BP+SI+20]答:答案一(默认求源操作数寻址方式)1)MOVAX,420H立即寻址2)MOV[BX],SI寄存器寻址3)MOVAX,[90]直接寻址4)MOV[DI+90],AH寄存器寻址5)MOVAL,[BP+SI+20]相对基址变址寻址答案二1)MOVAX,420H源:立即寻址目:寄存器寻址2)MOV[BX],SI源:寄存器寻址目:基址寻址3)MOVAX,[90]源:直接寻址目:寄存器寻址4)MOV[DI+90],AH源:寄存器寻址目:变址寻址5)MOVAL,[BP+SI+20]源:(相对)基址变址寻址目:寄存器寻址·7·5.指出下列寻址方式中源操作数所使用的段寄存器。MOVAX,[SI+20H]MOVAL,[1000H]MOVAX,ES:[BX][SI]MOVAX,[BP+1234H]答:(1)DS(2)DS(3)ES(4)SS6.已知寄存器(BX)=2010H、(DI)=0FFF0H和(BP)=420H,试分别计算出下列寻址方式中源操作数的有效地址。MOVAX,[2345H]MOVAX,[BX]MOVAX,ES:[DI+200]MOVAX,DS:[BP+DI]MOVAX,[BX+DI+114H]答:1)MOVAX,[2345H]2345H2)MOVAX,[BX]2010H3)MOVAX,ES:[DI+200]0B8H4)MOVAX,DS:[BP+DI]410H5)MOVAX,[BX+DI+114H]2114H7.使用类似MOV指令的双操作数指令需要注意什么?答:(1)MOV指令不需要经过ALU处理,所以对标志位没有影响;(2)MOV指令是双操作数指令,在使用时有一些限制:立即数不能作为目的操作数;CS不能作为目的操作数;段寄存器不能到段寄存器;立即数不能到段寄存器;内存不能到内存;8.8086系统的堆栈是如何组织的?如何判断堆栈满或空?答:8086的堆栈采用存储器方式实现,8086将堆栈组织为一个逻辑段,称为堆栈段。堆栈段的段址由寄存器SS指定,堆栈指针由SP寄存器担当。若SP当前值等于SS段址的内的最小值,即SP为0时,堆栈满;若SP当前值等于堆栈指定的SP初始值时,堆栈空。9.已知(SS)=0FF00H、(SP)=00B0H,先执行两条将8086H和0F20H入栈的PUSH指令,再执行一条POP指令。请画出堆栈内容变化过程示意图(请标出存储单元的物理地址)。答:·8·执行完两条PUSH后:||0FF00H←SS……|20H|0FFACH←SP|0FH|0FFADH|86H|0FFAEH|80H|0FFAFH再