存储器和寄存器

  • 格式:ppt
  • 大小:373.00 KB
  • 文档页数:32

下载文档原格式

  / 32
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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