《关于微机原理的几个问答》由会员分享,可在线阅读,更多相关《关于微机原理的几个问答(3页珍藏版)》请在金锄头文库上搜索。
1、第二章1 存储器与寄存器有什么不同?答:寄存器在CPU的内部,它的访问速度快,但容量小(8086 微处理器只有14 个 16 位寄存器) 、成本高,它用名字来标识(如AX 、BX等) ,没有地址;存储器在CPU的外部,它的访问速度比寄存器慢,容量大(20 根地址线寻址1M内存空间)、成本低, 存储单元用地址来标识,地址可用各种方式形成。2 标志寄存器中的状态标志和控制标志有什么区别?答:状态标志用来记录程序运行结果的状态信息,许多指令执行完毕后都相应地设置状态标志,它又称为条件码标志,包括进位标志、溢出标志、符号标志、零标志、奇偶标志等;控制标志用来控制处理器执行指令的方式,一般在程序中根据需
2、要由指令设置,如方向标志、中断标志、陷阱标志等。3溢出标志OF和进位标志CF有什么不同?答:当运算结果的最高有效位有向高位的进位(加法) 或借位 (减法) 时,进位标志CF置 1;当运算结果超出了机器所能表示的数的范围时,产生溢出,溢出标志OF置 1。4一个字在存储器中是如何存放的?答:一个字在存储器中占用相邻的两个存储单元,低8 位存入低地址,高8 位存入高地址,字单元的地址用它的低地址来表示。5为什么要将存储器分段管理?答:对于 16 位字长的8086CPU而言,只能表示16 位存储器地址(编号从0000HFFFFH ) ;但8086CPU的地址线是20 根,最大可寻址1MB的存储空间,
3、其物理地址范围从00000HFFFFFH 。为了用 16 位地址在1MB空间寻址, 将 1MB存储器空间分成许多逻辑段,这样每个存储单元就可以用“段地址:偏移地址“来表示其准确的物理位置。段地址是逻辑段在主存中的起始位置,8086 规定段地址必须是xxxx0H 形式,省略低4 位 0,段地址就可用16 位二进制数表示, 通常保存在段寄存器中;偏移地址是存储单元距离段起始位置的偏移值,每个段最大64KB,所以偏移地址也可用16 位二进制数表示。这样,物理地址就可通过段地址乘以16 加上偏移地址得到6程序中的指令与数据在存储器中是怎样存放的?答:程序中的指令序列存放在代码段中,程序中使用的堆栈存放
4、在堆栈段中,程序中的数据默认存放在数据段中,有时也放在附加段中。第三章1什么是寻址方式?答:在指令中, 有时要寻找操作数的地址,有时要寻找转移地址(如转移指令、 CALL指令等),这些寻找地址的方式就称为寻址方式。8086 微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移地址的方式有段内寻址和段间寻址,它们又分为段内直接、段内间接、段间直接、段间间接寻址等。2PUSH 指令和 POP指令有什么特点?答:这是两个重要的对堆栈操作的指令,它们只能做字操作,它们所带的操作数不能是立即数, POP指令不允许使用
5、CS寄存器。3算术移位指令和逻辑移位指令有什么不同?答:算术移位指令一般用于带符号数的乘2 或除 2 运算,正确的运算结果应保证符号位不变;逻辑移位指令用于无符号数的乘2 或除 2 运算,参与移位的操作数的最高有效位并不代表符号位。4逻辑运算指令的主要作用是什么?答:逻辑运算指令对处理操作数的某些位很有用,例如可屏蔽某些位(将这些位置0) ,将某些位置 1,将某些位变反,测试某些位等。5 串处理指令有什么特殊规定?答:在串处理指令中,源串默认在数据段中,但允许使用段跨越前缀来修改,源操作数用SI寻址;目的串只能在附加段中,目的操作数用DI 寻址。 SI 与 DI 有自动增、减量的功能,可完成正
6、向或反向、字节操作或字操作的串处理。6条件转移指令和无条件转移指令有什么不同?答:条件转移指令的位移量只允许8 位,即目标地址应在本条转移指令的下一条指令地址的-128 +127 个字节的范围之内,因此它只能实现段内转移;无条件转移指令则没有此限制,它能够实现段内和段间两种转移,段内转移可使用8 位或 16 位位移量。第四章1 指令和伪指令有什么区别?答:指令是在程序运行期间由CPU来执行的,而伪指令(伪操作)是在汇编程序对源程序进行汇编时处理的操作,完成诸如数据定义、存储器分配、指示程序开始结束等功能。2 汇编语言源程序中的变量和标号有哪些属性?答:源程序中的变量和标号都有三种属性:段、偏移
7、及类型。变量在除代码段以外的其他段中定义,段地址存放在段寄存器中,偏移地址存放在基址或变址寄存器中,变量的类型可以是 BYTE (字节)、WORD(字) 、DWORD(双字)等;标号指示指令的地址,它的段地址总在CS中,偏移地址在IP 中,标号的类型可以是NEAR (近)或FAR (远)。3指令 AND AL, OPR1 AND 0FFH 中的两个AND有什么区别?答:第一个AND是操作码,表明这是一条逻辑运算指令,完成逻辑与运算;第二个AND是一个按位操作的逻辑操作符,它只能用于数值表达式。4在把二进制数以十六进制数的形式在屏幕上显示出来的程序中,关于显示字符的ASCII码是如何调整的?答:
8、在使用DOS 功能调用( INT 21H )显示单个字符时,必须得到要显示字符的ASCII 码。字符 0 到 9 的 ASCII 码为 30H到 39H,因此只要把0 到 9 加上 30H就可以了;但字符A到 F的 ASCII 码为 41H到 46H , 0AH到 0FH除了加上30H之外,还要再加上7。5 为什么说循环结构是分支结构的特例?答:循环结构在满足循环条件时实行循环,这实际上是多次走同一个分支,当不满足循环条件时,就走另一个分支,因此循环结构是一种特殊的分支结构。6 子程序调用和返回指令完成哪些操作?答: 子程序调用指令首先把子程序的返回地址(即调用程序中CALL指令的下一条指令的
9、地址)存入堆栈,然后转移到子程序的入口地址去执行,它又分为段内调用和段间调用;返回指令的操作是返回地址出栈送IP 寄存器(段内或段间)和CS寄存器(段间) 。7在用堆栈传参的子程序设计中,为什么常用带常数的返回指令?答:在用堆栈传参时,主程序中要把参数的地址压入堆栈,子程序中通过BP寄存器访问堆栈单元取出参数的地址,而不是用出栈的方法。因此为使返回到主程序后堆栈能恢复原始状态不变,要用带常数的返回指令调整SP的值。8在用堆栈传参的子程序设计中,为什么要PUSH BP ?答:这是因为子程序中要用到BP寄存器。 在子程序中, 为了取得从堆栈传递过来的参数,必须访问堆栈,这就要用到BP寄存器,而BX
10、 、SI、DI 等寄存器都不能用来访问堆栈。9过程是否只有调用它的时候才被汇编?答:不是。过程和其他指令一样,在汇编时就被汇编,只是调用时才被使用。10有必要将主程序定义为过程吗?答:一般来说,将主程序定义为一个过程并定义为FAR属性,就可以把主程序看作DOS调用的一个子过程。11什么是宏?答:宏是源程序中一段有独立功能的程序代码。它只需要在源程序中定义一次,就可以多次调用它,调用时只需要用一个宏指令语句就可以了。12宏指令是如何定义的?答:定义宏指令称为宏定义,宏定义是用一组伪操作来实现的,其格式为:宏指令名 MACRO 虚参 1,虚参 2,, (宏定义体:一组有独立功能的程序代码) END
11、M 13什么是宏调用?什么是宏展开?答:在源程序中对宏指令的调用称为宏调用,但对宏指令必须先定义后调用。宏展开是用宏定义体取代源程序中的宏指令名,并且用实元取代宏定义中的哑元的汇编过程。14在宏展开时,实参和虚参的个数不等,怎么办?答:汇编程序不要求实参和虚参的个数必须相等,当实参个数大于虚参个数时,多余的实参不予考虑;当实参个数小于虚参个数时,则多余的虚参作“空”处理。15宏调用中的实参(实元)可以是表达式吗?答:可以是表达式,还可以是常数、字符串、寄存器、存储单元名以及用寻址方式能找到的地址等,也可以是指令的操作码或操作码的一部分。应注意的是,宏展开后,即用实参取代虚参(又称哑元) 后,所
12、得到的汇编语句应该是有效的,否则汇编程序将会指示出错。在 MASM6中,还可以用:REQ指定某个参数是必须有的。16宏、伪指令的汇编过程如何?答:当源程序被汇编时,汇编程序将对每个宏调用作宏展开。宏展开就是用宏定义体取代源程序中的宏指令名,而且用实参取代宏定义中的形参。伪指令不是在程序运行期间由CPU执行的, 而是在汇编程序汇编期间处理的操作,它们可以完成如处理器的选择、定义程序模式、定义数据、分配存储区、指定程序结束等功能。17编程时应如何选择使用子程序结构还是宏汇编结构?答:使用子程序结构可提高编程效率,节省存储空间。但每次调用子程序,返回、保存及恢复寄存器以及参数的传送等都要增加程序的额外开销。因此,子程序结构适合于子程序代码较长,传参较多,有紧缩存储空间要求的情况下使用。使用宏汇编的程序执行效率较高,但汇编后的目标代码占用存储空间较大。因此,宏汇编一般用于子功能代码较短,传参较少的程序中使用。其实,使用子程序结构还是使用宏汇编结构,并没有固定的标准,大多数情况下,取决于程序员的编程风格。第八章1什么是 I/O 端口 ? CPU使用什么指令与外设进行数据交换? 答:CPU与 I/O 设备通过硬件接口或控制器相连接,这些接口或控制器都有数量不等的端口,这些端口有统一的地址编码,CPU通过这些端口使用输入输出指令IN、OUT与外设进行数据交换。