10子程序结构

CALL和RET指令自测

1、单选题:
‍IA-32处理器调用子程序前,将返回地址保存在:‍
选项:
A: 数据段
B: 代码段
C: 堆栈段
D: 附加段
答案: 【 堆栈段

2、单选题:
‍指令“call eax”的指令寻址是:‌
选项:
A: 寄存器寻址
B: 寄存器间接寻址
C: 相对寻址
D: 直接寻址
答案: 【 寄存器间接寻址

3、判断题:
​主程序调用子程序使用CALL指令。‍
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‌子程序返回主程序利用RET指令。‍
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
​RET指令通常应该是子程序最后一条执行的指令。‍
选项:
A: 正确
B: 错误
答案: 【 正确

共享变量传递参数自测

1、单选题:
‍temp是定义在数据段的变量,主程序将数据保存在temp变量中,子程序从该变量中取用数据,这是什么参数传递方式?​
选项:
A: 寄存器
B: 共享变量
C: 堆栈
D: 虚实结合
答案: 【 共享变量

2、判断题:
‌这里的共享变量对应C/C++语言的全局变量。‎
选项:
A: 正确
B: 错误
答案: 【 正确

3、判断题:
​对于大量保存在主存储器缓冲器的参数,通常只能通过传递地址的方式,也被称为“传递引用”。​
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
​共享变量的参数传递方式只适合传递子程序返回给主程序的出口(输出)参数。‏
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‏输入二进制数的正确数字应该只有0和1。‍
选项:
A: 正确
B: 错误
答案: 【 正确

单元测试10

1、单选题:
‏对应主程序CALL指令调用子程序,子程序结束通常采用______指令返回主程序。‏
选项:
A: jmp
B: call
C: endp
D: ret
答案: 【 ret

2、单选题:
‍子程序最后,通常需要执行的返回指令是__________。‎
选项:
A: LOOP
B: JZ
C: RET
D: CALL
答案: 【 RET

3、单选题:
​进行子程序设计时,MASM要求使用______伪指令对。‌
选项:
A: segment / ends
B: proc / endp
C: macro / endm
D: call / ret
答案: 【 proc / endp

4、单选题:
‌IA-32处理器使用CALL指令调用子程序时,返回地址被保存到______。‌
选项:
A: 共享变量
B: 寄存器EBP
C: 当前堆栈顶部
D: 寄存器ESP
答案: 【 当前堆栈顶部

5、单选题:
‎指令“CALL EBX”采用了指令的__________方式。‌
选项:
A: 相对寻址
B: 直接寻址
C: 寄存器间接寻址
D: 存储器间接寻址
答案: 【 寄存器间接寻址

6、单选题:
‌主程序将数据本身传递给子程序,这是_______。‎
选项:
A: 传数值的入口参数
B: 传地址的入口参数
C: 传数值的出口参数
D: 传地址的出口参数
答案: 【 传数值的入口参数

7、单选题:
‏接着CALL指令的32位存储器地址是00450806H,则CALL指令执行时压入堆栈的数据从存储器低地址到高地址,按字节为单位依次是_____________。‏
选项:
A: 00H,45H,08H,06H
B: 06H,08H,45H,00H
C: 00H,08H,45H,06H
D: 06H,45H,08H,00H
答案: 【 06H,08H,45H,00H

8、单选题:
‍指令“mov esi,[ebp+4]”的源操作数来自_____________。​
选项:
A: 数据段
B: 堆栈段
C: 代码段
D: 附加段
答案: 【 堆栈段

9、单选题:
‍call指令执行后,堆栈的栈顶内容为______。‏
选项:
A: 子程序的入口地址
B: call指令的下一条指令
C: call指令的下一条指令的地址
D: call指令所在地址
答案: 【 call指令的下一条指令的地址

10、单选题:
‏MASM汇编语言用于定义子程序的伪指令是______。‏
选项:
A: proc
B: proc 和endp
C: procedure
D: procudure和endp
答案: 【 proc 和endp

11、判断题:
‌CALL指令的执行并不影响堆栈指针ESP。​
选项:
A: 正确
B: 错误
答案: 【 错误

12、判断题:
‍指令CALL的执行涉及堆栈操作。‏
选项:
A: 正确
B: 错误
答案: 【 正确

13、判断题:
‌子程序返回主程序使用RET指令。‎
选项:
A: 正确
B: 错误
答案: 【 正确

14、判断题:
‎IA-32处理器使用CALL调用子程序。‌
选项:
A: 正确
B: 错误
答案: 【 正确

15、判断题:
‌返回指令RET执行时,从当前堆栈顶部弹出返回地址。‏
选项:
A: 正确
B: 错误
答案: 【 正确

16、判断题:
‌过程定义PROC是一条MASM伪指令。‌
选项:
A: 正确
B: 错误
答案: 【 正确

17、判断题:
‎指令“RET i16”返回子程序的运行结果i16。​
选项:
A: 正确
B: 错误
答案: 【 错误

18、判断题:
‎子程序不能进行嵌套调用。‎
选项:
A: 正确
B: 错误
答案: 【 错误

19、判断题:
‍带有出口参数的寄存器,子程序不必在进入时进行保护,所以在返回主程序前也不必恢复。​
选项:
A: 正确
B: 错误
答案: 【 正确

20、判断题:
‍进入子程序后,将EAX、EBX、ECX和EDX按顺序压入堆栈,则子程序返回前弹出这些寄存器的顺序还是EAX、EBX、ECX和EDX。​
选项:
A: 正确
B: 错误
答案: 【 错误

21、判断题:
‎子程序的开始时使用PUSH压入寄存器的顺序应于返回前POP寄存器的顺序相同,这样才能保证寄存器恢复正确。‌
选项:
A: 正确
B: 错误
答案: 【 错误

22、判断题:
‌子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。‍
选项:
A: 正确
B: 错误
答案: 【 错误

23、判断题:
‏分配在数据段的共享变量可用于主程序与子程序之间传递参数,这类似C语言的全局变量。‌
选项:
A: 正确
B: 错误
答案: 【 正确

24、判断题:
‌堆栈操作需要保持压入和弹出的区域平衡,但当使用堆栈将主程序参数传递给子程序时就不必了。​
选项:
A: 正确
B: 错误
答案: 【 错误

堆栈传递参数自测

1、单选题:
‌主程序压入堆栈8个字节数据传递给子程序,平衡堆栈时需要将ESP:‌
选项:
A: 加8
B: 减8
C: 加2
D: 减2
答案: 【 加8

2、单选题:
‎除法指令“idiv ecx”的64位被除数在:‎
选项:
A: EDX和ECX中
B: EDX和EBX中
C: EDX和EAX中
D: ECX和EBX中
答案: 【 EDX和EAX中

3、判断题:
‎在80x86处理器上,C语言进行函数调用带入的参数实质上就是采用堆栈传递参数。‏
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‏如果删除主程序指令“add esp,8”,但子程序中“ret”指令改为“ret 8”,示例程序仍能正确完成预期功能。​
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‍IA-32处理器中,利用EBP(或ESP)、而不是EBX、ESI等间接或相对寻址访问堆栈,是因为EBP(或ESP)间接或相对寻址的默认逻辑段是堆栈段。‏
选项:
A: 正确
B: 错误
答案: 【 正确

子程序设计自测

1、单选题:
‍MASM的过程定义伪指令PROC说明过程(含子程序)开始,与之配合子程序结束时还有一个伪指令是:​
选项:
A: ENDP
B: ENDM
C: NEDS
D: RET
答案: 【 ENDP

2、单选题:
‍子程序设计应该关注的原则中,不正确的是:‍
选项:
A: 压入和弹出操作要成对使用,保持堆栈平衡
B: 子程序开始保护寄存器,返回前相应恢复
C: 子程序允许嵌套
D: 子程序不允许递归
答案: 【 子程序不允许递归

3、单选题:
‎DOS/Windows操作系统下,控制显示器光标回到下行首列,需要两个控制字符,它们的ASCII值是:‏
选项:
A: 0dh,0
B: 0ah,0
C: 0dh,0ah
D: 09h,07h
答案: 【 0dh,0ah

4、判断题:
‎过程定义PROC是一条处理器指令。​
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‌子程序设计无需关注参数传递问题。‎
选项:
A: 正确
B: 错误
答案: 【 错误

子程序调用自测

1、单选题:
‍指令“mov esi,[ebp+4]”的源操作数来自:‎
选项:
A: 数据段
B: 代码段
C: 堆栈段
D: 附加段
答案: 【 堆栈段

2、判断题:
​IA-32处理器的CALL指令压入堆栈的返回地址是CALL指令下条指令的地址。‌
选项:
A: 正确
B: 错误
答案: 【 正确

3、判断题:
‍返回指令RET从当前堆栈顶部获得返回地址。‎
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‎子程序开始压入EBP保护,但返回前忘记弹出,这会导致原EBP内容出错,但子程序还可以正常返回。​
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
​语句“call next”之后,接着是语句“next: pop eax”,执行这两个指令后,EAX保存当前指令、即pop指令,也就是标号next的地址。‎
选项:
A: 正确
B: 错误
答案: 【 正确

寄存器传递参数自测

1、单选题:
‌一个双字(二进制32位)数据,以十六进制形式显示,需要显示十六进制多少位?‏
选项:
A: 1
B: 2
C: 4
D: 8
答案: 【 8

2、单选题:
‌4位二进制代码“1010”对应十六进制“A”,将这个4位二进制代码按照十六进制输出,需要转换为字母“A”的ASCII,这需要在这个4位二进制代码基础上加:‎
选项:
A: 37H
B: 39H
C: 41H
D: 61H
答案: 【 37H

3、判断题:
‍寄存器传递参数的方法只适用于传递主程序给子程序的入口(输入)参数。‎
选项:
A: 正确
B: 错误
答案: 【 错误

4、判断题:
‎子程序中无论在任何情况下都应保存所有的寄存器、包括出口参数的寄存器。‏
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‌对数值0~9,只要加30H,就依次成为字符'0'~'9'的ASCII码。‏
选项:
A: 正确
B: 错误
答案: 【 正确

11多模块程序结构

单元测试11

1、单选题:
‏MASM包含子程序库文件使用的伪指令是:‌
选项:
A: include
B: includelib
C: #include
D: define
答案: 【 includelib

2、单选题:
​MASM包含源程序文件使用的伪指令是________。‍
选项:
A: include
B: includelib
C: #include
D: define
答案: 【 include

3、单选题:
‏进行宏定义的一对伪指令是_______。​
选项:
A: segment / ends
B: proc / endp
C: macro / endm
D: call / ret
答案: 【 macro / endm

4、单选题:
‏关于宏汇编,如下论述错误的是_____________。‏
选项:
A: 像子程序调用一样,宏指令需要使用CALL指令进行宏调用
B: 需要先进行宏定义,然后才能进行宏调用
C: 宏定义可以进行嵌套
D: 在源程序进行汇编的阶段进行宏展开
答案: 【 像子程序调用一样,宏指令需要使用CALL指令进行宏调用

5、单选题:
‎某程序模块使用伪指令“public varname”,这表明varname_______。‎
选项:
A: 是共享的,其他程序模块也可以使用
B: 是在其他程序模块中定义的
C: 只能在其他程序模块使用
D: 只能在本程序中使用,不能定义
答案: 【 是共享的,其他程序模块也可以使用

6、单选题:
‍某程序模块使用伪指令“extern varname”,这表明varname_______。‍
选项:
A: 只能在其他外部程序模块使用
B: 是在其他程序模块中定义的
C: 是在本程序模块定义的
D: 既可以在本程序定义,也可以进行使用
答案: 【 是在其他程序模块中定义的

7、判断题:
‎MASM的源文件包含方法中,除主程序文件外,每个被包含的源程序文件最后都需要一个“end”语句,表示汇编过程结束。​
选项:
A: 正确
B: 错误
答案: 【 错误

8、判断题:
‍MASM的多模块连接方法中,因为是分别汇编,所以各个模块的源程序文件最后都需要一个“end”语句,表示汇编过程结束。‏
选项:
A: 正确
B: 错误
答案: 【 正确

9、判断题:
‏MASM中使用PUBLIC伪指令说明某个变量、子程序等可以被其他模块文件调用。‍
选项:
A: 正确
B: 错误
答案: 【 正确

10、判断题:
‌模块连接中的“模块”是指汇编(编译)后形成的目标模块OBJ文件。‎
选项:
A: 正确
B: 错误
答案: 【 正确

11、判断题:
‏使用宏进行源程序的编写,不仅简化了源程序的编写,同时也将其生成的目标代码变的更小。‍
选项:
A: 正确
B: 错误
答案: 【 错误

12、判断题:
‌利用INCLUDE包含的源文件实际上只是源程序的一部分。​
选项:
A: 正确
B: 错误
答案: 【 正确

13、判断题:
‌宏调用在汇编时进行程序语句的展开,不需要返回。​
选项:
A: 正确
B: 错误
答案: 【 正确

14、判断题:
‎宏调用与子程序调用一样都要使用CALL指令实现。‍
选项:
A: 正确
B: 错误
答案: 【 错误

子程序库和库文件包含自测

1、单选题:
‏MASM包含子程序库文件使用的伪指令是:‍
选项:
A: include
B: includelib
C: #include
D: define
答案: 【 includelib

2、单选题:
‌MASM语句“includelib io32.lib”说明其采用的多模块方法是:‎
选项:
A: 源文件包含
B: 模块连接
C: 子程序库
D: 库文件包含
答案: 【 库文件包含

3、判断题:
‌加入子程序库的文件通常是子程序的源程序文件。​
选项:
A: 正确
B: 错误
答案: 【 错误

4、判断题:
‎子程序库和子程序库文件包含的方法本质没有区别,只是连接过程的具体操作不同罢了。‏
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
​存入子程序库的子程序都应该利用PUBLIC说明,表示其他程序模块可以调用。‏
选项:
A: 正确
B: 错误
答案: 【 正确

宏汇编自测

1、单选题:
‌进行宏定义,在MASM中使用macro开始,需要使用__________结束。‏
选项:
A: endm
B: ends
C: endp
D: end
答案: 【 endm

2、单选题:
‌宏的特点不包括:‎
选项:
A: 宏不减小目标程序,执行速度没有改变
B: 宏通过形参、实参结合实现参数传递
C: 宏常依附于源程序
D: 宏调用要CALL指令转向、RET指令返回
答案: 【 宏调用要CALL指令转向、RET指令返回

3、判断题:
‎宏调用在汇编时进行程序语句的展开,不需要返回。‎
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
​MASM中,宏需要先定义后使用,且不必在任何段中。‌
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‏宏也封装了一段程序,所以与子程序本质上相同。‎
选项:
A: 正确
B: 错误
答案: 【 错误

源文件包含和模块连接自测

1、单选题:
‍MASM包含源程序文件使用的伪指令是:‍
选项:
A: include
B: includelib
C: #include
D: define
答案: 【 include

2、单选题:
​MASM语句“include io32.inc”说明其采用的多模块方法是:‎​‎
选项:
A: 源文件包含
B: 模块连接
C: 子程序库
D: 库文件包含
答案: 【 源文件包含

3、判断题:
‏源文件包含的方式需要将多个源程序文件分别汇编。‏
选项:
A: 正确
B: 错误
答案: 【 错误

4、判断题:
‎模块连接中的“模块”是指汇编(编译)后形成的目标模块OBJ文件。‍
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
​MASM中使用PUBLIC伪指令说明某个变量、子程序等可以被其他模块文件调用。‍
选项:
A: 正确
B: 错误
答案: 【 正确

12DOS环境编程

DOS功能调用自测

1、单选题:
‏调用中断服务程序的8086指令是:‏
选项:
A: int
B: call
C: invoke
D: proc
答案: 【 int

2、单选题:
‏DOS调用(中断号21H)的功能号采用哪个寄存器传递。‌‏‌
选项:
A: AL
B: AH
C: BX
D: DX
答案: 【 AH

3、单选题:
‎在DOS平台实现程序执行终止,返回操作系统的DOS功能号可以是:‏
选项:
A: 21H
B: 4CH
C: 00H
D: 4C00H
答案: 【 4CH

4、单选题:
‎主程序调用DOS中断服务程序,主要采用的参数传递方式是:‎
选项:
A: 寄存器
B: 共享变量
C: 堆栈
D: 虚实结合
答案: 【 寄存器

5、判断题:
​16位DOS操作系统是以中断服务程序形式为程序员提供系统功能调用的。‏
选项:
A: 正确
B: 错误
答案: 【 正确

DOS应用程序自测

1、单选题:
‍编写16位DOS平台的汇编语言程序,基于本课程的MASM源程序框架,要访问数据段的数据,程序员应设置的段寄存器是:‎
选项:
A: CS
B: SS
C: DS(和ES)
D: FS和GS
答案: 【 DS(和ES)

2、单选题:
‎在本课程的16位DOS源程序框架中存在,但不存在于32位Windows控制台源程序框架中的语句是:‍
选项:
A: .data
B: .code
C: mov ds,ax
D: end start
答案: 【 mov ds,ax

3、判断题:
​这里的DOS应用程序是指基于DOS操作系统编写的应用程序。‎
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‎16位DOS应用程序也和32位Windows应用程序一样使用平展(FLAT)存储模型。‏
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‍在DOS环境,原基于Windows控制台的I/O子程序库仍然可以使用。‎
选项:
A: 正确
B: 错误
答案: 【 错误

DOS环境自测

1、单选题:
‎基于实地址存储模型的DOS系统,对应的主存空间容量是:‌
选项:
A: 64KB
B: 1MB
C: 16MB
D: 4GB
答案: 【 1MB

2、单选题:
‎编写基于实地址存储模型的DOS应用程序,每个段最大只能是:‌
选项:
A: 64KB
B: 1MB
C: 16MB
D: 4GB
答案: 【 64KB

3、判断题:
‎在8086处理器中,偏移地址是16位的。‏
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‎DOS系统只有一个特权级别,应用程序可以访问任意资源,例如,允许使用I/O指令直接对外设端口操作。​
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‌8086的16位存储器寻址方式和IA-32处理器的32位存储器寻址方式使用的寄存器都是一样的。‎
选项:
A: 正确
B: 错误
答案: 【 错误

IN和OUT指令自测

1、单选题:
​80x86处理器的全部I/O地址有多少个?‏
选项:
A: 256
B: 64K
C: 1M
D: 4G
答案: 【 64K

2、单选题:
‏按照MASM语法,表达80x86处理器输入指令正确的是:‌
选项:
A: in al, dx
B: in al, [dx]
C: in dx, al
D: in [dx],al
答案: 【 in al, dx

3、单选题:
‍采用I/O直接寻址的指令是:‍
选项:
A: mov al,80h
B: out 80h,al
C: out dx,al
D: in al,dx
答案: 【 out 80h,al

4、判断题:
‌从汇编语言角度看,80x86处理器使用I/O指令通过I/O地址访问外设。​
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‏IA-32处理器的双字量输入输出使用32位EAX寄存器,它是从连续的4个8位端口输入输出4个字节。‍
选项:
A: 正确
B: 错误
答案: 【 正确

IO接口的编程结构自测

1、单选题:
‌I/O接口电路通常具有三类基本寄存器,不包括:‏
选项:
A: 数据寄存器
B: 状态寄存器
C: 控制寄存器
D: 信号寄存器
答案: 【 信号寄存器

2、单选题:
​保存外设或其I/O接口当前工作状态的寄存器是:‍
选项:
A: 数据输出寄存器
B: 数据输入寄存器
C: 状态寄存器
D: 控制寄存器
答案: 【 状态寄存器

3、判断题:
‍I/O地址是指用于区别外设接口电路中不同寄存器的编号。​
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‎I/O(外设)端口(Port)是I/O地址、输入输出地址(外设地址)的一种较通俗的说法。‌
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‎类似汇编语言程序员可以把处理器抽象为寄存器,I/O接口电路呈现给程序员也是各种可编程寄存器。‎
选项:
A: 正确
B: 错误
答案: 【 正确

单元测试12

1、单选题:
‏在8086处理器中,CS=5788H、IP=94H时指向的存储单元物理地址是____________。‌
选项:
A: 57974H
B: 5883H
C: 57914H
D: 58ECH
答案: 【 57914H

2、单选题:
‍在8086处理器中,对于 “mov ax,[100h]”指令,如果DS=1400H,则源操作数来自内存物理地址__________处。‍
选项:
A: 1400H
B: 100H
C: 1500H
D: 14100H
答案: 【 14100H

3、单选题:
‎执行INT 21H指令后,8086处理器将转入__________号中断服务程序。​
选项:
A: 20
B: 20H
C: 21
D: 21H
答案: 【 21H

4、单选题:
‏2号DOS功能调用需要利用DL传递字符,这是所谓的_______传递参数方式。‍
选项:
A: 立即数
B: 变量
C: 寄存器
D: 堆栈
答案: 【 寄存器

5、单选题:
‌9号DOS功能调用需要利用DS:DX传递字符串首地址,这是_______。‏
选项:
A: 传数值的入口参数
B: 传地址的入口参数
C: 传数值的出口参数
D: 传地址的出口参数
答案: 【 传地址的入口参数

6、单选题:
‏实现字符串显示在DOS环境使用9号功能调用,而在Windows控制台窗口可以使用__________函数(功能)。‌
选项:
A:  GetStdHandle
B: MessageBox
C: ReadConsole
D: WriteConsole
答案: 【 WriteConsole

7、单选题:
​IA-32处理器涉及输入输出操作的I/O敏感指令包括_____________。‏
选项:
A: XCHG
B: OUT
C: LEA
D: ADC
答案: 【 OUT

8、单选题:
‏指令“IN AL, 21H”的功能是__________。​
选项:
A: 立即数21H传送给AL
B: 将21H号主存单元的数据传送给AL
C: I/O地址21H传送给AL
D: 将21H号I/O地址的数据传送给AL
答案: 【 将21H号I/O地址的数据传送给AL

9、单选题:
‍按照MASM语法,表达80x86处理器输入指令正确的是_____________。​
选项:
A: in al, [dx]
B: in al, dx
C: in dx, [al]
D: in dx,al
答案: 【 in al, dx

10、单选题:
​指令“OUT 21H,AL”目的操作数所采用的寻址方式是_____________。​
选项:
A: 数据寻址的DX寄存器寻址
B: I/O寻址的DX寄存器间接寻址
C: 数据寻址的立即数寻址
D: I/O寻址的直接寻址
答案: 【 I/O寻址的直接寻址

11、单选题:
‌PC机CMOS RAM信息通过71H端口输入,指令可以是_____________。​
选项:
A: IN  AL, 71H
B: IN  71H, AL
C: OUT AL, 71H
D: OUT 71H,AL
答案: 【 IN  AL, 71H

12、单选题:
‌选择访问PC机CMOS RAM的9号单元信息,需要首先通过70H端口输出9这个编号,指令可以是_____________。‎
选项:
A: IN AL, 70H
B: IN 70H, AL
C: OUT AL, 70H
D: OUT 70H, AL
答案: 【 OUT 70H, AL

13、判断题:
‏在8086处理器中,偏移地址是16位的。‎
选项:
A: 正确
B: 错误
答案: 【 正确

14、判断题:
‌将8086处理器支持的内存物理地址35001H的转换为逻辑地址,如果段地址为3400H,则其偏移地址应为1001H。‌
选项:
A: 正确
B: 错误
答案: 【 正确

15、判断题:
‎DOS提供给程序的系统功能需要使用CALL指令进行调用。‌
选项:
A: 正确
B: 错误
答案: 【 错误

16、判断题:
​I/O端口(Port)是I/O地址、输入输出地址(外设地址)的一种较通俗的说法。‏
选项:
A: 正确
B: 错误
答案: 【 正确

17、判断题:
‏I/O地址是指用于区别外设接口电路中不同寄存器的编号。​
选项:
A: 正确
B: 错误
答案: 【 正确

18、判断题:
‍从汇编语言角度看,80x86处理器使用I/O指令通过I/O地址访问外设。‌
选项:
A: 正确
B: 错误
答案: 【 正确

19、判断题:
​80x86处理器的传送MOV指令也支持访问外设端口。​
选项:
A: 正确
B: 错误
答案: 【 错误

20、判断题:
‎指令“IN BX,20H”正确,表示从20H端口输入一个数据、存放到BX寄存器。‌
选项:
A: 正确
B: 错误
答案: 【 错误

21、判断题:
​8086处理器中,“MOV [AX],BX”是非法指令。​
选项:
A: 正确
B: 错误
答案: 【 正确

22、判断题:
‍指令“OUT DX,AX”的两个操作数均采用寄存器寻址方式,一个来自处理器、一个来自外设。‍
选项:
A: 正确
B: 错误
答案: 【 错误

读取CMOSRAM数据程序自测

1、单选题:
‍在读取CMOS RAM的汇编语言程序中,执行“out 70h,al”指令的功能是:‏
选项:
A: 将从70H存储单元读取一个字节数据保存于AL寄存器
B: 将把AL寄存器内容保存于70H存储单元
C: 将从70H号I/O端口读取一个字节数据保存于AL寄存器
D: 将把AL寄存器值内容输出到70H号I/O端口
答案: 【 将把AL寄存器值内容输出到70H号I/O端口

2、单选题:
‌PC机CMOS RAM中的8号单元以BCD码格式保存月份,所以如果读取了10H数值,它代表是:‍
选项:
A: 1月
B: 8月
C: 10月
D: 错误月份值
答案: 【 10月

3、判断题:
‍CMOS RAM是使用CMOS技术的存储器芯片,PC机用以保存配置信息以及实时时钟。‏
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‍PC机中CMOS RAM内信息通过70H和71H两个I/O地址访问。​
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‍PC机中CMOS RAM是存储器芯片,所以它属于主存空间的一部分。‌
选项:
A: 正确
B: 错误
答案: 【 错误

13与C++混合编程

单元测试13

1、单选题:
‏从汇编语言角度看,编译器通常将Visual C++函数的返回值保存于__________。‏
选项:
A: 堆栈
B: 变量
C: 专用寄存器
D: 通用寄存器EAX
答案: 【 通用寄存器EAX

2、单选题:
​MASM汇编语言与Visual C++进行模块连接的混合编程时,如果Visual C++使用C语言调用规范,那么汇编语言的语言类型应该是__________。‎
选项:
A: _cdecl
B: c
C: stdcall
D: _stdcall
答案: 【 c

3、单选题:
‍汇编语言与C++语言混合编程时要求采用一致的调用规范,对应C++语言的_cdecl调用规范,汇编语言应使用__________调用规范。​
选项:
A: C
B: STDCALL
C: BASIC
D: FORTRAN
答案: 【 C

4、单选题:
‎Visual C++与MASM汇编语言的混合编程形式包括__________。​
选项:
A: 宏汇编
B: 嵌入汇编
C: 宏连接
D: 系统功能调用
答案: 【 嵌入汇编

5、单选题:
​Visual C++与MASM汇编语言的混合编程形式包括__________。‏
选项:
A: 宏汇编
B: 系统功能调用
C: 模块连接
D: 宏连接
答案: 【 模块连接

6、判断题:
‍汇编语言与Visual C++的混合编程仅指汇编语言调用C语言标准函数。‏
选项:
A: 正确
B: 错误
答案: 【 错误

7、判断题:
​Visual C++6.0中,嵌入汇编指令主要使用“_ _asm”关键字指示。‎
选项:
A: 正确
B: 错误
答案: 【 正确

8、判断题:
‍嵌入汇编是直接在C/C++语言程序中插入汇编语言指令的一种简单方便混合编程方法。‍
选项:
A: 正确
B: 错误
答案: 【 正确

9、判断题:
‏在C/C++语言中嵌入的汇编语句可以充分利用MASM汇编语言的特性,例如宏汇编。‏
选项:
A: 正确
B: 错误
答案: 【 错误

10、判断题:
‍模块连接中的“模块”是指汇编(编译)后形成的目标模块OBJ文件。‎
选项:
A: 正确
B: 错误
答案: 【 正确

11、判断题:
‌Visual C++的发布版本相对于调试版本来说,只是去掉了调试信息,其他一样。‎
选项:
A: 正确
B: 错误
答案: 【 错误

12、判断题:
‌模块连接的混合编程是在各自的开发环境中生成模块文件、然后再连接到一起,所以不必考虑对方的数据类型、调用规范等问题。‏
选项:
A: 正确
B: 错误
答案: 【 错误

13、判断题:
‏编写被Visual C++程序调用的汇编语言模块时,汇编结束语句END就不需要了。‏
选项:
A: 正确
B: 错误
答案: 【 错误

14、判断题:
‎编写被Visual C++程序调用的汇编语言模块时,汇编结束语句仍然应该是“END START”,其中必须有START指明程序起始执行的位置。‍
选项:
A: 正确
B: 错误
答案: 【 错误

15、判断题:
‏Visual C++调试程序支持汇编语言层次的调试。‏
选项:
A: 正确
B: 错误
答案: 【 正确

16、判断题:
‌使用Visual C++连接汇编语言模块时,两者的调用规范应该一致。‌
选项:
A: 正确
B: 错误
答案: 【 正确

嵌入汇编的方法自测

1、单选题:
‍相对于高级语言,汇编语言的优点是:​
选项:
A: 开发的程序占用存储空间小、运行速度快
B: 不与处理器密切相关、移植性较好
C: 编程和调试都比较容易
D: 开发效率高
答案: 【 开发的程序占用存储空间小、运行速度快

2、判断题:
​汇编语言与高级语言、或不同高级语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程,称为“混合编程”。‎
选项:
A: 正确
B: 错误
答案: 【 正确

3、判断题:
​C/C++语言支持一种比较独特的混合编程方法,可以直接在C/C++语言的源程序中插入汇编语言指令,这被称为“嵌入汇编”。‍
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‎在C/C++语言中嵌入的汇编语言语句可以采用C/C++语言、没有任何限制。​
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‎嵌入汇编的可移植性略差,更适用汇编语言的若干指令或程序片段的嵌入。‎
选项:
A: 正确
B: 错误
答案: 【 正确

嵌入汇编的程序自测

1、判断题:
​Visual C++6.0中,嵌入汇编语言指令主要使用“_ _asm”关键字指示。​
选项:
A: 正确
B: 错误
答案: 【 正确

2、判断题:
‏Visual C++ 6版本中使用嵌入汇编的方法不需要独立的汇编程序。​
选项:
A: 正确
B: 错误
答案: 【 正确

3、判断题:
‏采用嵌入汇编的方法编写的一个函数,就不需要按照C/C++规则进行声明了。‏
选项:
A: 正确
B: 错误
答案: 【 错误

4、判断题:
‎C/C++语言调用嵌入汇编方式编写的函数,需要按照汇编语言规则使用寄存器传递参数。‍
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‍嵌入汇编可用于提高C/C++程序内某特殊功能段的处理效率,但会影响到源程序的可移植性。‏
选项:
A: 正确
B: 错误
答案: 【 正确

模块连接的方法自测

1、单选题:
‍模块连接传递参数时应保证数据类型一致,对于C/C++的32位长整型 (unsigned ) long对应汇编语言的类型是:‍
选项:
A: byte
B: word
C: dword
D: qword
答案: 【 dword

2、单选题:
‏从汇编语言角度看,编译器通常将Visual C++函数的返回值保存于:‏
选项:
A: 堆栈
B: 变量
C: 专用寄存器
D: EAX
答案: 【 EAX

3、判断题:
‏模块连接的方法是指各种语言的程序分别编写,利用各自的开发环境编译形成OBJ模块文件,然后将它们连接在一起,生成可执行文件。​
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‍模块连接方式由于各自编写各自的模块,所以不必考虑调用规范是否一致。‎
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‏相较于混合编程的嵌入汇编方法,模块连接方法的通用性强、可移植性略好。‏
选项:
A: 正确
B: 错误
答案: 【 正确

模块连接的程序自测

1、单选题:
‌Visual C++的_cdecl调用规范(C语言调用规范),对应MASM语言类型是:​
选项:
A: c
B: stdcall
C: fastcall
D: flat
答案: 【 c

2、单选题:
‍C/C++语言调用汇编语言编写的函数模块时,C/C++语言的实参带入形参,但从汇编语言角度看,所采用的参数传递方法仍然是:​
选项:
A: 寄存器传递方式
B: 共享变量传递方式
C: 堆栈传递方式
D: EAX传递方式
答案: 【 堆栈传递方式

3、判断题:
‏使用Visual C++连接汇编语言模块时,两者的调用规范应该一致。‍
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‏C++调用汇编语言编写的函数,需要使用“extern “C””进行声明。‌
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‌C/C++语言调用汇编语言编写的函数模块,需要按照汇编语言规则使用寄存器传递参数。‌
选项:
A: 正确
B: 错误
答案: 【 错误

14Windows编程

ExitProcess函数自测

1、单选题:
‎Windows的ExitProcess函数原型中,有参数uExitCode,其类型是UINT,表示32位无符号整数,对应对应MASM的类型是:‌
选项:
A: byte
B: word
C: dword
D: qword
答案: 【 dword

2、判断题:
‎Windows的ExitProcess函数实现程序执行结束后退出功能。‍
选项:
A: 正确
B: 错误
答案: 【 正确

3、判断题:
‍使用PROTO伪指令对API函数进行原型声明,形参的类型不能省略、且必须一致。​
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‌使用PROTO伪指令对API函数进行原型声明,形参的名称不能省略、且必须一样。‎
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
‍使用PROTO伪指令对API函数进行的原型声明,不能作为宏定义体。​
选项:
A: 正确
B: 错误
答案: 【 错误

MASM过程声明和调用自测

1、单选题:
‏汇编语言使用API函数的步骤,不应该包括:‏
选项:
A: 使用INCLUDELIB伪指令包含对应函数的导入库文件
B: 使用PROTO伪指令进行原型声明,包括形参类型
C: 使用INVOKE伪指令调用函数,代入参数
D: 使用过程定义PROC伪指令定义API函数
答案: 【 使用过程定义PROC伪指令定义API函数

2、单选题:
‏在32位Windows系统中,高级语言的32位int类型对应MASM的类型是:‎
选项:
A: byte
B: word
C: dword
D: qword
答案: 【 dword

3、判断题:
‎伪指令PROTO用于事先声明过程(proc)或高级语言函数等的结构。‏
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
​MASM中,经伪指令PROTO声明的过程或高级语言函数,最好使用CALL指令调用。‎
选项:
A: 正确
B: 错误
答案: 【 错误

5、判断题:
​汇编语言调用Windows的API函数,无需关注通用寄存器的使用规则。‏
选项:
A: 正确
B: 错误
答案: 【 错误

MessageBox函数自测

1、单选题:
‎Windows操作系统的MessageBox函数代码保存于USER32.DLL文件中,MASM汇编语言程序要调用时,应在程序开始使用下面的语句:‌
选项:
A: includelib user32.dll
B: include user32.dll
C: include user32.lib
D: includelib user32.lib
答案: 【 includelib user32.lib

2、单选题:
‎语句“MessageBoxA  proto, :dword, :dword, :dword, :dword”说明MessageBoxA函数有几个形式参数(不含返回值):‏
选项:
A: 3
B: 4
C: 5
D: 6
答案: 【 4

3、判断题:
‍Windows操作系统使用MessageBox函数创建消息窗口。‍
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‍语句“MessageBox equ <MessageBoxeA>”说明MessageBoxA可以用MessageBox替代。‌
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‎MessageBox函数的参数4是按钮类型,赋值“1”是在消息窗口中含有“确认”和“取消”两个按钮。‍
选项:
A: 正确
B: 错误
答案: 【 正确

WriteConsole函数自测

1、单选题:
‍在Windows控制台窗口的当前光标位置,显示信息应该使用__________函数(功能)。​
选项:
A: ReadConsole
B: WriteConsole
C: MessageBox
D: GetStdHandle
答案: 【 WriteConsole

2、单选题:
​对API函数,MASM中应该使用如下哪个伪指令进行过程声明。‍
选项:
A: proc
B: macro
C: proto
D: invoke
答案: 【 proto

3、判断题:
‏用于文本操作的Win32 API函数有两种版本,8位ASCII字符集版本只能输入输出英文字符。‌
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
‏用于文本操作的Win32 API函数有两种版本,16位Unicode字符集版本可以支持汉字输入输出。​
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
‏用于文本操作的Win32 API函数的两种版本用结尾字母区别,函数名以字母A结尾8位版本,函数名以字母W结尾16位版本。‎
选项:
A: 正确
B: 错误
答案: 【 正确

动态链接库自测

1、单选题:
​有3个最重要、最基本的Windows动态连接库,但不包括:​
选项:
A: KERNEL32.DLL
B: USER32.DLL
C: GDI32.DLL
D: VMMREG32.DLL
答案: 【 VMMREG32.DLL

2、判断题:
‍这里的Windows编程是指直接利用Windows系统函数编写应用程序、即直接调用应用程序接口(API)函数进行编程。‌
选项:
A: 正确
B: 错误
答案: 【 正确

3、判断题:
​Windows的动态连接库是保存程序运行时需要重复使用的代码的文件。‎
选项:
A: 正确
B: 错误
答案: 【 正确

4、判断题:
​动态连接库只在程序运行时需要,但在程序开发的连接阶段,却需要对应的导入库。‍
选项:
A: 正确
B: 错误
答案: 【 正确

5、判断题:
​开发Windows应用程序时需要的导入库就是静态代码库。‏
选项:
A: 正确
B: 错误
答案: 【 错误

单元测试14

1、单选题:
‍调用API函数,需要在源程序文件中使用__________伪指令包含导入库文件。‏
选项:
A: include
B: includelib
C: #include
D: define
答案: 【 includelib

2、单选题:
‎在Windows平台,结束程序执行、将控制权返回操作系统的API函数是__________。‍
选项:
A: ExitProcess
B: WriteConsole
C: ReadConsole
D: End
答案: 【 ExitProcess

3、单选题:
‎MASM使用“ExitProcess proto,:dword”语句声明函数,则正确的调用语句是_________。​
选项:
A: ExitProcess,0
B: invoke ExitProcess,0
C: call ExitProcess,0
D: ExitProcess(0)
答案: 【 invoke ExitProcess,0

4、单选题:
‌退出函数ExitProcess的代码存在于KERNEL32.DLL动态连接库中,MASM汇编语言程序应使用__________语句进行说明。​
选项:
A: include kernel32.dll
B: include kernel32.lib
C: includelib kernel32.dll
D: includelib kernel32.lib
答案: 【

剩余75%内容付费后可查看

发表评论

电子邮件地址不会被公开。 必填项已用*标注