在指令访问程序存储器的寻址方式中未存有提交程序?

  CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。有的指令中也直接包含操作数本身。

  第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(Program Counter)指定存储器的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,程序计数器根据指令长度增加存储器单元。指令的提取必须常常从相对较慢的存储器寻找,因此导致CPU等候指令的送入。这个问题主要被论及在现代处理器的快取和管线化架构。

  CPU根据存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令。一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(Addition)运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的定址值:暂存器或存储器位址,以定址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬件设备。不过在众多抽象且复杂的CPU和指令集架构中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU中往往可以重写,方便变更解码指令。

  在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算数逻辑单元(ALU,Arithmetic Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而输出将含有总和的结果。ALU内含电路系统,易于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里,运算溢出(Arithmetic Overflow)标志可能会被设置。

  最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体中。某些类型的指令会操作程序计数器,而不直接产生结果。这些一般称作“跳转”(Jumps),并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。许多指令也会改变标志暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志暂存器上设置一个数值。这个标志可藉由随后的跳转指令来决定程式动向。在执行指令并写回结果之后,程序计数器的值会递增,反覆整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令位址,且程序继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子装置中快速普及(常称为微控制(Microcontrollers))。

  CPU包括运算逻辑部件、寄存器部件和控制部件等。

  运算逻辑部件,可以执行定点或浮点的算术运算操作、移位操作以及逻辑操作,也可执行地址的运算和转换。

  寄存器部件,包括通用寄存器、专用寄存器和控制寄存器。通用寄存器又可分定点数和浮点数两类,它们用来保存指令中的寄存器操作数和操作结果。通用寄存器是中央处理器的重要组成部分,大多数指令都要访问到通用寄存器。通用寄存器的宽度决定计算机内部的数据通路宽度,其端口数目往往可影响内部操作的并行性。专用寄存器是为了执行一些特殊操作所需用的寄存器。控制寄存器通常用来指示机器执行的状态,或者保持某些指针,有处理状态寄存器、地址转换目录的基地址寄存器、特权状态寄存器、条件码寄存器、处理异常事故寄存器以及检错寄存器等。有的时候,中央处理器中还有一些缓存,用来暂时存放一些数据指令,缓存越大,说明CPU的运算速度越快,目前市场上的中高端中央处理器都有2M左右的二级缓存,高端中央处理器有4M左右的二级缓存。

1-1 硬件组成随堂测验

3、IA-32处理器中被称之为累加器通用寄存器是EAX。

4、IA-32处理器中ESP是堆栈指针寄存器。

5、IA-32处理器支持8个32位通用寄存器。

1-1 硬件组成随堂测验

3、物理地址也称逻辑地址,也是虚拟地址。

4、应用程序一般主要涉及代码段、数据段和堆栈段。

5、IA-32处理器的逻辑地址包括偏移地址。

1-1 硬件组成随堂测验

3、IA-32处理器的CS是代码段寄存器。

4、IA-32处理器的DS是数据段寄存器。

5、IA-32处理器的ESP与SS配合指向堆栈段当前栈顶。

1-2 程序格式随堂测验

3、指令一般由操作码和操作数组成。

4、在MASM的语句语法中,指令的目的操作数一般在左边,源操作数在右边。

5、IA-32处理器的指令所采用的二进制编码长度均是32位(Bit)。

1-2 程序格式随堂测验

3、MASM的语句分成执行性语句和说明性语句。

4、MASM汇编语言的分隔操作数使用英文逗号,不能用中文逗号。

5、MASM汇编语言的注释用分号开始,无所谓英文分号还是中文分号,都可以。

1-2 程序格式随堂测验

3、“END”伪指令仅说明汇编到此结束,并不具备返回操作系统的功能。

4、汇编结束也就是程序执行终止。

5、为IA-32处理器编程只应该使用8086的16位指令。

1-2 程序格式随堂测验

4、要显示字符串,可以使用本课程提供的DISPMSG子程序。

5、C语言使用函数名(含参数)就是调用函数,IA-32处理器需要使用“CALL”调用指令实现调用。

1-3 开发过程随堂测验

3、32位Windows控制台与16位模拟DOS窗口的界面和基本功能相同,所以本质上就是同一个程序。

5、32位中文Windows XP/7/8等操作系统中,Windows控制台窗口也支持中文的输入输出。

1-3 开发过程随堂测验

3、本课程提供一个“MAKE32.BAT”批处理文件用于快速开发汇编语言程序。

4、如果源程序文件没有错误,列表文件就为空。

5、开发过程中生成的目标模块文件(.OBJ)与列表文件(.LST)一样都是文本性质的文件,可以使用文字编辑软件打开。

21、尽管用汇编语言生成的执行代码较庞大,但其能够直接有效地控制硬件。

22、MASM规定用后缀字母H或h表达十六进制数据。

23、对32位字长的IA-32处理器来说,其主存不能采用8位(字节)编址。

24、IA-32处理器采用以字节为基本存储单位为主存空间编址。

25、主存中的一个存储单元的物理地址不是唯一的。

26、指向程序堆栈区的段寄存器是SS。

27、IA-32处理器读取指令,一定是在代码段中。

28、汇编程序使用的保留字,例如寄存器名称等,是不能用作用户定义的标识符的。

29、IA-32处理器按逻辑段组织程序,数据变量应该且必须在数据段中。

30、指令指针EIP寄存器属于通用寄存器。

31、源程序中只能用标号start表示程序的起始执行点。

32、使用简化段定义源程序格式,必须具有.model语句。

33、利用“END”伪指令就可以结束程序执行,返回操作系统。

34、伪指令“END”仅说明汇编到此结束,并不具备返回操作系统的功能。

35、采用汇编语言书写的一个ASM源程序文件,需要使用汇编语言程序转换为OBJ目标代码文件。

36、汇编程序(例如MASM)一般都提供大量的函数(过程)供程序员调用,所以汇编语言程序员通常不需要直接利用操作系统的资源。

37、MASM汇编语言的注释用分号开始,但不能用中文分号。

38、MASM汇编语言用逗号分隔两个操作数或者参数,英文逗号或者中文逗号都可以。

2-1 常量表达随堂测验

3、MASM中,字符用单引号括起,字符串用双引号括起。

4、MASM中,使用“=”或者“equ”都可以定义符号常量。

5、按照MASM语法,“AH”是一个8位寄存器,“0AH”表达十六进制数。

2-1 常量表达随堂测验

3、汇编语言中,表达真值“100”,可以使用二进制“B”表达。

4、小写字母“d”作为字符,它在主存中与十六进制数“64H”是一样的。

5、汇编语言中,表达真值“13”,可以使用十六进制数“0DH”表达。

2-2 变量定义随堂测验

2、MASM中定义的变量保存在通用寄存器中。

3、变量定义的参数表中出现“?”符号,说明该存储空间没有赋初值。

4、变量定义中的操作符“dup”用在初值表中,表示多个重复的参数。

5、MASM定义变量必须有变量名,否则不能定义。

2-2 变量定义随堂测验

4、定义字符串也可以使用字节变量定义伪指令“BYTE”。

5、数值“356”可以作为BYTE伪指令定义的变量初值。

2-2 变量定义随堂测验

3、MASM伪指令“word”定义的字量数据是指16位数据。

4、语句“word ?”表示预留一个字节存储空间。

5、数值“356”可以作为WORD伪指令定义的变量初值。

2-2 变量定义随堂测验

3、伪指令“DWORD”定义的32位变量要占用4个字节存储空间。

4、伪指令“dword”只能定义无符号整数为变量初值。

5、MASM定义无初值变量使用“?”符号,但通常汇编程序填入0。

2-3 变量应用随堂测验

3、所谓小端方式是指数据的低字节部分保存于存储器的低地址单元、高字节数据部分保存于存储器的高地址单元。

4、主存储器采用字节编址,意味着每个存储单元具有一个地址、保存一个字节的数据。

5、存储多字节数据采用小端方式一定比大端方式好,因为没有处理器采用大端方式。

2-3 变量应用随堂测验

3、变量的地址属性是指变量所在存储单元的逻辑地址,包括段基地址和偏移地址。

2-3 变量应用随堂测验

3、定义变量后,变量名就具有了类型属性。

4、定义为双字类型的变量,不能按字节或字类型访问。

5、本课程提供的子程序DISPRD可以显示8个32位通用寄存器的内容。

30、人们经常采用十六进制形式表达数据,这是因为计算机内部寄存器采用这种进制。

31、已知是采用BCD编码的二进制串,它表达整数的真值64。

32、已知是采用BCD编码的二进制串,它表达整数的真值101。

33、0307H是一个非压缩BCD码,它表达的真值是37 。

34、对于常数41H,在汇编语言中表达成字符’A’也是正确的,因为’A’的ASCII码就是41H。

35、在文字编辑软件中,按下键盘上的空格键往往显示空白,所以ASCII的空格编码不是字符编码。

40、IA-32处理器采用小端方式存储多字节数据。

42、“TYPE EDX”的结果是一个常量,等于2。

43、伪指令ORG只能用于数据段,指明变量开始的偏移地址。

3-1 立即数寻址随堂测验

1、寻址方式的含义是指通过地址访问指令或数据的方法。

2、数据寻址的含义是指通过地址访问指令操作数(数据)。

3、指令寻址是指确定要执行的下一条指令的地址。

4、指令操作数来自处理器的寄存器,被称为寄存器寻址。但把指令操作数保存于处理器的寄存器,就不能被称为寄存器寻址。

5、变量指向存储单元,所以访问变量就是存储器寻址。

3-1 立即数寻址随堂测验

3、立即数是指从指令的机器代码中直接取得的操作数。

4、立即数寻址方式只用于目的操作数。

5、语句“mov edx,type dvar”中(dvar是一个双字变量)源操作数采用立即数寻址。

3-2 寄存器寻址随堂测验

2、语句“mov eax, ebx”的两个操作数都是采用寄存器寻址方式。

3、语句“mov dx, ds”的源操作数不是寄存器寻址方式。

4、语句“mov bvar, cl”目的操作数的寻址方式是寄存器寻址方式。

3-3 存储器寻址随堂测验

2、存储器寻址的操作数当然在主存储器中了。

3、IA-32处理器的存储器寻址中,8个32位的通用寄存器都可以作为基址寄存器使用。

4、堆栈操作默认是由SS寄存器指示的段中。

5、存储器操作数由逻辑地址指示,一定要表达出段基地址。

3-3 存储器寻址随堂测验

2、直接寻址把存储器操作数的有效地址直接编码进指令的机器代码中。

3、MASM规定直接寻址只能用具体的地址值直接表达,不能使用变量名等形式表达。

4、在MASM语法中,语句“mov eax,dvar”和“mov eax,[dvar]”是同一条指令,其中dvar是一个双字类型的变量(名)。

3-3 存储器寻址随堂测验

2、存储器的寄存器间接寻址中,寄存器相当于一个地址指针的作用。

3、MASM中,“EBX”和“[EBX]”都表示EBX寄存器的内容,含义是一样的。

4、指令“mov ebx, [ebx]”的源操作数采用寄存器间接寻址。

3-3 存储器寻址随堂测验

4、寄存器相对寻址有一个位移量和一个寄存器内容相加形成存储器操作数的有效地址。

16、数据寻址的含义是指通过地址访问指令操作数(数据)。

17、立即数寻址只会出现在源操作数中。

18、存储器寻址方式的操作数当然在主存了。

19、寄存器间接寻址方式,操作数是在某一寄存器中。

20、IA-32处理器的有效地址是指存储器操作数的物理地址。

21、IA-32处理器的有效地址是指存储器操作数的偏移地址。

22、语句“mov edx, eax”的两个操作数都是采用寄存器寻址方式。

27、可以乘以比例的32位通用寄存器不包括ESP堆栈指针寄存器。

第4周 通用数据处理指令

4-1 数据传送类指令随堂测验

3、32位的IA-32处理器只支持32位数据操作,不支持8位或16位数据操作。

4-1 数据传送类指令随堂测验

3、指令“lea eax,[ebx]”是一条语法正确的指令。

4-1 数据传送类指令随堂测验

3、IA-32处理器指令“PUSH EAX”执行后,寄存器EAX内容被传送到当前栈顶。

4、堆栈操作指令也属于传送类指令,而指令“pop ecx”中,寄存器ECX是源操作数。

5、指令“PUSH EDI”执行后,寄存器ESP被加4。

4-2 算术运算类指令随堂测验

2、进行有符号整数的加减运算,判断是否超出运算范围可由溢出标志OF判断。

3、进位标志CF属于IA-32处理器的状态标志,而溢出标志OF不属于状态标志。

4、下面说法是否正确:进行8位加法“99H+31H”,会使CF=1。

5、IA-32处理器完成一条加减运算指令,如果是针对无符号数的加减运算就影响CF标志,而如果是有符号数的加减运算就影响OF标志。总之,加减运算只会影响CF或OF之一,不会同时进行设置。

4-2 算术运算类指令随堂测验

3、IA-32处理器对符号标志SF的定义是:运算结果最高位为1,则SF=1;否则SF=0。

4、IA-32处理器设计零标志ZF反映运算结果是否为0,结果为0,则ZF标志为1。

5、IA-32处理器的奇偶标志PF关注的是32位结果中“1”的个数是偶数还是奇数。

4-2 算术运算类指令随堂测验

3、加法指令ADD的运算结果影响状态标志的取值。

4、IA-32处理器的ADD加法指令只进行32位数据的加法操作。

5、IA-32处理器的ADD加法指令进行16位数据的加法,如果有进位则自动进入高1位数据结果中。

4-2 算术运算类指令随堂测验

3、SUB是算术运算类指令。

4、IA-32处理器的SUB减法指令只进行整数的减法操作。

5、减法指令SUB的运算结果影响除进位CF标志之外的其他状态标志。

4-2 算术运算类指令随堂测验

3、指令“dec [ebx]”没有语法错误。

4、加1指令INC和减1指令DEC的运算结果影响除进位CF标志之外的其他状态标志。

5、“NEG EAX”指令的功能是用0减去EAX内容,差值结果保存在EAX。

4-3 位操作类指令随堂测验

4-3 位操作类指令随堂测验

3、逻辑左移和算术左移的功能相同。

4、逻辑右移和算术右移的功能相同。

4-3 位操作类指令随堂测验

3、IA-32处理器指令ROL是指不带进位的循环左移指令。

4、不带CF标志的循环移位指令ROL和ROR执行后不会影响CF标志。

5、带进位循环右移指令RCR执行后,CF标志被设置为0。

30、指令“mov bx,eax”的错误原因是数据类型不匹配。

32、堆栈的操作原则是“先进后出”,压入数据是PUSH指令、弹出数据是POP指令。

33、空操作NOP指令其实根本没有指令。

34、NOP是空操作指令,所以处理器并不执行该指令。

37、IA-32处理器系统中,堆栈的数据压入和弹出操作可以是字节、字或双字为单位。

38、指令“mov [esi],[edi]”是错误的,因为IA-32处理器不存在这种传送组合。

41、进位和溢出标志都表达结果超出范围,所以加法运算有溢出,一定也进位了。

42、进行有符号整数的加减运算,判断是否超出运算范围可由进位标志CF判断。

43、ADD指令的某个加法运算结果使标志ZF=1,则标志SF为0。

44、ADD指令的某个加法运算结果使标志ZF=1,则标志PF为0。

45、虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。

46、80减90(80-90)需要借位,所以执行结束后,进位标志CF=1。

49、指令“neg eax”的功能是求EAX的绝对值。

5-1 移位实现乘法随堂测验

3、对二进制表达的整数来说,左移一位相当于数值乘以2。

4、对二进制表达的整数来说,右移一位相当于数值除以2。

5、理论上,任意两个整数相乘都可以移位、配合加减运算实现。

5-1 移位实现乘法随堂测验

3、对一个64位数据进行一位的左移操作,IA-32处理器可以使用一条SHL指令实现。

4、对一个64位数据进行一位的左移操作,IA-32处理器需要使用两条SHL指令实现。

5、已知qvar是用qword定义的64位类型的变量,IA-32处理器的指令“shr qvar,1”存在语法错误。

5-2 自然数求和随堂测验

4、用语句“sum qword ?”定义的一个4字(64位)变量sum,与32位EAX类型不一致,所以“mov sum, eax”存在语法错误。

5、IA-32处理器的乘法指令“mul ebx”产生的乘积是64位的。

5-2 自然数求和随堂测验

3、MASM中,助记符“CPUID”是IA-32处理器的一条处理器识别指令,该指令能够反馈处理器的有关信息。

4、IA-32处理器上,在EAX=0时执行CPUID指令时通过寄存器ECX、EDX和EBX返回处理器厂商字符串。

5、程序的顺序结构是不含分支、循环和调用的一条语句(指令)、一条语句(指令)逐个顺序执行的程序结构。

8、无符号数在前面加零扩展,数值不变。

9、有符号数前面进行符号扩展,位数加长一位、数值增加一倍。

10、符号扩展将数据位数加长,自然数据大小也相应增大。

11、算术右移指令执行的操作是:符号位不变,并顺次右移1位,最低位移出。

12、数据左移运算是低位向高位移动,最低位补0。

13、SHL指令左移一位,就是乘10。

14、因为EDX保存的是无符号整数,所以指令“shr edx,1”可以换做“sar edx,1”。

15、在明确EDX保存的是一个正整数的条件下,指令“SHR EDX,1”与“SAR EDX,1”完成的功能相同。

16、在一段顺序结构的程序中,通常不应该包含条件转移指令。

17、数据段有语句“sum qword ?”,代码段指令“mov sum, eax”并不存在语法错误。

18、程序的顺序结构是不含分支、循环和调用的一条语句(指令)、一条语句(指令)逐个顺序执行的程序结构。

6-1 转移指令随堂测验

3、指令寻址是指一条指令执行后,确定执行的下一条指令的位置的方式。

4、IA-32处理器中,指令指针EIP或者还包括代码段寄存器CS值的改变将引起程序流程的改变。

5、IA-32处理器中,执行一条指令后,设计指令指针EIP自动增量,实现了指令的顺序寻址。

6-1 转移指令随堂测验

3、已知label是某条之前的标号,指令“jmp label”的功能是让处理器执行label指示的那条指令。

4、JMP指令的功能对应C语言的goto语句,按照高级语言的结构化思想,汇编语言中也不应使用JMP指令,处理器可以不必设计JMP指令。

5、IA-32处理器设计使用一个字节表达位移量的相对寻址的短转移是为了减少机器代码的长度,提供更紧凑的指令代码、占用更少的存储空间。

6-1 转移指令随堂测验

3、执行条件转移指令Jcc,如果条件cc不成立,则顺序执行下一条指令。

4、对条件ZF=1条件成立的条件转移指令,MASM设计了两个助记符JZ和JE,其实是一条指令用了2个助记符,纯属“画蛇添足”。

5、条件转移指令Jcc利用的条件需要利用CMP、TEST等影响标志的指令产生。

6-1 转移指令随堂测验

3、对二进制数来说,偶数的最低位一定是0。

4、判断进位标志CF=0发生跳转,使用JNC指令。

6-1 转移指令随堂测验

3、一个程序片段中,出现了JMP或Jcc指令,应该就不再是顺序程序结构了。

4、测试指令TEST对操作数进行的是“逻辑与”操作。

6-2 单分支结构随堂测验

3、这里的“单分支结构”是指条件不满足顺序执行分支体,条件满足跳过分支体执行。

4、在汇编语言中用Jcc指令形成单分支结构,条件满足顺序执行分支体。

5、不论EAX保存什么整数,指令“neg eax”都可以实现求EAX绝对值的功能。

6-2 单分支结构随堂测验

3、JB和JA指令都属于处理器的程序流程控制指令。

4、同一个英文字母其大小写,在ASCII表中的数值相差32(=20H)。

5、大写字母“A”的ASCII值是61H。

6-3 双分支结构随堂测验

4、这里的“双分支结构”是指条件满足和不满足各自执行一个分支体,但最后都从共用的出口开始执行后续指令。

5、在双分支程序结构中,顺序执行的分支体最后需要JMP指令,目的是使第一个分支体执行结束之后,跳过第二个分支体,避免误入第二个分支体中。

6-3 双分支结构随堂测验

3、通用处理器中普遍采用补码表达有符号整数。

4、用8位进制补码表达一个有符号整数,数值“-150”无法表达。

5、两个有符号整数加减运算后,结果是否溢出应使用JO或JNO指令判断。

22、指令指针EIP或者还包括代码段寄存器CS值的改变将引起程序流程的改变。

23、CS不变,只改变EIP值,不能改变程序的执行顺序。

24、JMP指令的功能对应C语言的goto语句,按照高级语言的结构化思想,汇编语言中也不应使用JMP指令,处理器也不必设计JMP指令。

25、指令“jmp ebx”的转移目标地址来自寄存器EBX。

26、条件转移指令JC和JB虽然是两个助记符,但却是同一个指令。

27、执行JNZ指令发生转移的条件是ZF=1 。

28、执行JNS指令顺序执行的条件是SF=1 。

29、对无符号数和有符号数进行加减采用同样的指令,所以比较两者大小的条件转移指令也可以采用同样的指令。

30、JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。

32、采用偶校验对数据编码,8位二进制编码“”符合偶校验规则。

33、在双分支程序结构中,顺序执行的分支体最后需要JMP指令,目的是使第一个分支体执行结束之后,跳过第二个分支体,避免误入第二个分支体中。

34、汇编语言编写双分支结构的程序通常要使用Jcc指令进行分支,顺序执行的分支体最后需要JMP指令,该JMP指令无论如何分支都一定会被执行。

7-1 循环指令随堂测验

3、IA-32处理器的LOOP指令常用于增量计数的循环控制。

4、IA-32处理器的LOOP指令包含有对ECX寄存器减1的功能。

5、IA-32处理器的LOOP指令先对ECX是否为0进行判断,然后再执行对ECX寄存器减1的操作。

7-1 循环指令随堂测验

7-1 循环指令随堂测验

1、汇编语言程序中,只能实现“先循环、后判断”,不能实现“先判断、后循环”结构。

2、“先循环、后判断”的循环程序结构,循环体至少执行一次。

3、“先判断、后循环” 的循环程序结构,循环体可能一次都不执行。

7-2 计数控制循环随堂测验

3、LOOP指令适合实现减量计数控制循环。

4、采用寄存器间接寻址从头开始访问数组的每个元素,初始通常应将该寄存器赋值为数组首地址。

5、采用寄存器相对寻址从头开始访问数组的每个元素,初始可以将该寄存器赋值为0。

7-3 条件控制循环随堂测验

3、条件控制循环通常需要使用条件转移指令进行是否继续循环的判断。

4、通常情况下,“先判断、后循环”的循环程序结构可以修改为“先循环、后判断”的循环程序结构。

5、在汇编语言程序层面,条件控制循环结构与分支结构有相通的地方,循环体可以看做是需要多次执行的分支体。

7、若ECX=0,则LOOP指令和JECX指令都发生转移。

8、IA-32处理器的LOOP指令常用于增量计数的循环控制。

9、IA-32处理器的LOOP指令包含有对ECX寄存器减1的功能。

10、判断循环是否结束的循环控制部分只能安排在循环体之后。

11、循环初始值应该属于循环体之中。

12、通常循环体中应该包含进行循环条件修改的代码。

13、采用寄存器相对寻址从头开始访问数组的每个元素,初始可以将该寄存器赋值为0。

8-1 子程序设计随堂测验

3、主程序调用子程序使用CALL指令。

4、子程序返回主程序利用RET指令。

5、RET指令通常应该是子程序最后一条执行的指令。

8-1 子程序设计随堂测验

2、IA-32处理器的CALL指令压入堆栈的返回地址是CALL指令下条指令的地址。

3、返回指令RET从当前堆栈顶部获得返回地址。

4、子程序开始压入EBP保护,但返回前忘记弹出,这会导致原EBP内容出错,但子程序还可以正常返回。

5、语句“call next”之后,接着是语句“next: pop eax”,执行这两个指令后,EAX保存当前指令、即pop指令,也就是标号next的地址。

8-1 子程序设计随堂测验

4、过程定义PROC是一条处理器指令。

5、子程序设计无需关注参数传递问题。

8-2 参数传递随堂测验

3、寄存器传递参数的方法只适用于传递主程序给子程序的入口(输入)参数。

4、子程序中无论在任何情况下都应保存所有的寄存器、包括出口参数的寄存器。

5、对数值0~9,只要加30H,就依次成为字符'0'~'9'的ASCII码。

8-2 参数传递随堂测验

2、这里的共享变量对应C/C++语言的全局变量。

3、对于大量保存在主存储器缓冲器的参数,通常只能通过传递地址的方式,也被称为“传递引用”。

4、共享变量的参数传递方式只适合传递子程序返回给主程序的出口(输出)参数。

5、输入二进制数的正确数字应该只有0和1。

8-2 参数传递随堂测验

3、在80x86处理器上,C语言进行函数调用带入的参数实质上就是采用堆栈传递参数。

4、如果删除主程序指令“add esp,8”,但子程序中“ret”指令改为“ret 8”,示例程序仍能正确完成预期功能。

5、IA-32处理器中,利用EBP(或ESP)、而不是EBX、ESI等间接或相对寻址访问堆栈,是因为EBP(或ESP)间接或相对寻址的默认逻辑段是堆栈段。

8-3 程序模块随堂测验

3、源文件包含的方式需要将多个源程序文件分别汇编。

4、模块连接中的“模块”是指汇编(编译)后形成的目标模块OBJ文件。

5、MASM中使用PUBLIC伪指令说明某个变量、子程序等可以被其他模块文件调用。

8-3 程序模块随堂测验

3、加入子程序库的文件通常是子程序的源程序文件。

4、子程序库和子程序库文件包含的方法本质没有区别,只是连接过程的具体操作不同罢了。

5、存入子程序库的子程序都应该利用PUBLIC说明,表示其他程序模块可以调用。

8-3 程序模块随堂测验

3、宏调用在汇编时进行程序语句的展开,不需要返回。

4、MASM中,宏需要先定义后使用,且不必在任何段中。

5、宏也封装了一段程序,所以与子程序本质上相同。

15、CALL指令的执行并不影响堆栈指针ESP。

16、指令CALL的执行涉及堆栈操作。

17、子程序返回主程序使用RET指令。

18、IA-32处理器使用CALL调用子程序。

19、返回指令RET执行时,从当前堆栈顶部弹出返回地址。

20、过程定义PROC是一条MASM伪指令。

21、指令“RET i16”返回子程序的运行结果i16。

22、子程序不能进行嵌套调用。

23、带有出口参数的寄存器,子程序不必在进入时进行保护,所以在返回主程序前也不必恢复。

24、进入子程序后,将EAX、EBX、ECX和EDX按顺序压入堆栈,则子程序返回前弹出这些寄存器的顺序还是EAX、EBX、ECX和EDX。

25、子程序的开始时使用PUSH压入寄存器的顺序应于返回前POP寄存器的顺序相同,这样才能保证寄存器恢复正确。

26、子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。

27、分配在数据段的共享变量可用于主程序与子程序之间传递参数,这类似C语言的全局变量。

28、堆栈操作需要保持压入和弹出的区域平衡,但当使用堆栈将主程序参数传递给子程序时就不必了。

29、模块连接中的“模块”是指汇编(编译)后形成的目标模块OBJ文件。

30、使用宏进行源程序的编写,不仅简化了源程序的编写,同时也将其生成的目标代码变的更小。

31、利用INCLUDE包含的源文件实际上只是源程序的一部分。

32、宏调用与子程序调用一样都要使用CALL指令实现。

53、某个双字变量存放于存储器地址0403H~0406H中,对齐了地址边界。

55、进位和溢出标志都表达结果超出范围,所以加法运算有溢出,一定也进位了。

57、SHL指令左移一位,就是乘10。

58、JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。

59、堆栈操作需要保持压入和弹出的区域平衡,但当使用堆栈将主程序参数传递给子程序时就不必了。

60、IA-32处理器的ESP与SS配合指向堆栈段当前栈顶。

61、汇编结束也就是程序执行终止。

62、按照MASM语法,“AH”是一个寄存器名,“0AH”表达十六进制数。

63、变量指向存储单元,所以访问变量就是存储器寻址。

65、堆栈操作指令也属于传送类指令,指令“pop ecx”中,寄存器ECX是源操作数。

66、IA-32处理器执行程序时,主程序调用子程序使用CALL指令。

67、在CF=1的情况下,SUB指令和SBB指令的功能相同。

68、无符号数在前面加零扩展,数值大小不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。

69、对于常数41H,在汇编语言中表达成字符’A’也是正确的,因为’A’的ASCII码就是41H。

70、MASM汇编语言用逗号分隔两个操作数或者参数,英文逗号或者中文逗号都可以。

72、利用INCLUDE包含的源文件实际上只是源程序的一部分。

13、在Windows中关于“开始”菜单,下面说法正确的是( )。
    A、“开始”菜单中的所有内容都是计算机自己自动设定的,用户不能修改其中的内容
    C、“开始”菜单绝大部分都是可以定制的,但出现在菜单第一级的大多数选项不能被移动和重新组织,例如:“关闭”,“注销”等
    D、给“开始”|“程序”菜单添加以及组织菜单项都只能从“文件夹”窗口拖入文件。

15、在Windows资源管理器中,若想格式化一张磁盘,应选( )命令。
    C、右键单击磁盘图标,在弹出的快捷菜单中选择“格式化”命令

第1讲 计算机文化与计算思维

14、下列四条叙述中,有错误的一条是( )。
    D、对信息(即各种形式的数据)进行收集、储存、加工与传输等一系列活动的总称为实时控制

第2讲 信息与计算机中的数据

40、下列叙述中,正确的是( )。
    B、计算机内部,数据采用二进制表示,而程序则用字符表示
    D、微型计算机主机箱内的所有部件均由大规模、超大规模集成电路构成

73、计算机接入局域网需要配备()

74、单元格F3的绝对地址表达式为()

75、演示文稿中每张幻灯片都是基于某种()创建的,它预定义了新建幻灯片的各种占位符布局情况

77、在PowerPoint 中,幻灯片()是一种特殊的幻灯片,包含已设定格式的占位符。这些占位符是为标题、主要文本和所有幻灯片中出现的背景项目而设置的

78、当系统硬件发生故障或更换硬件设备时,为了避免系统意外崩溃应采用的启动方式为()

79、在Word操作过程中能够显示总页数、节号、页号、页数等信息的是

80、Word中当用户在输入文字时,在()模式下,随着输入新的文字,后面原有的文字将会被覆盖

我要回帖

更多关于 访问程序存储器的寻址方式 的文章

 

随机推荐