哈工大2012汇编考试.doc_第1页
哈工大2012汇编考试.doc_第2页
哈工大2012汇编考试.doc_第3页
哈工大2012汇编考试.doc_第4页
哈工大2012汇编考试.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

试 题:汇编语言程序设计 班号: 姓名:一、 单项选择题(每小题1分,共20分)1外部硬件中断处理子程序在( C )处被执行(A)主程序INT n处 (B)任务调度时 (C)随机的 (D)RET前2程序中的2进制、10进制、16进制数,在( A )时变成2进制 ( A)汇编时 (B)连接时 (C)执行时 (D)调试时3汇编语言语句与C语言语句对应关系不正确的是( B )(A)1条C语言对应1-N条ASM (B)1条ASM语句对应1-N条C语言语句。(C)1个C调用至少对应多条ASM (D)ASM与C可以互相调用4关于端口访问错误的是( C )(A)只能用IN/OUT (B)用IMM8或DX访问(C)端口与内存一样都是即可以读又可以写的。(D)一个端口可以对应接口电路内的多个物理寄存器5. 立即数寻址方式中正确的是( A )(A)此数在代码段 (B)此数在数据段(C)此数在堆栈段 (D)可以在此数前加DS:或CS:或SS:6.关于微型机的时钟中断不正确的是( B )(A)每秒钟都会发生 (B)是CPU自动产生的(C)发生时需要执行一个中断子程序 (D)BIOS会在内存40:6C的DWORD变量存储其从0点起中断的次数7微型机中的接口指( A )(A)除了CPU、RAM、外设之外的部分 (B)主板后面的各接口插头(C)主板上所有的电路 (D)主板以及主板上的插卡8.下列传送指令中正确的的是( A )(A)PUSH ESP (B)MOV CS,1000H(C)INC 1122H (D)XCHG 1000,20009. Visual Studio下汇编语言编程,CPU的工作模式错误的是( D )(A)FLAT模式 (B)32位模式 (C)保护模式 (D)虚拟86模式10. Windows下汇编语言程序设计的头文件中,不包含了大量的(D ) (A) 名字或类型定义 (B)结构 (C)子程序声明 (D) 子程序11. 关于invoke指令,错误的是( A )(A)是硬指令,CPU可直接执行 (B)是一个宏 (C)可以用可变参数 (D 可以传变量,也可以是寄存器12中断发生时,断点内容不包括( B ) (A) CS (B) SP (C) IP (D) 标志寄存器13Visual Studio中,查看数组buf的所有元素,在memory窗口的地址栏中输入( B ) (A)buf (B)&buf (C)offset buf (D) *buf14. 短转移指令,请完善其机器指令( A )13FD:0100 EB _ JMP 9E (A) 9C (B) 9E (C) 9A (D)10015. 设AL=1,求其相反数,则执行指令( C )(A)OR AL,80H (B)NOT AL (C)NEG AL (D)MUL -116键盘的中断向量为9,中断发生时,执行的程序偏移地址在( C ) (A)0:9H (B)0:12H (C)0:24H (D)0:26H17关于宏和子程序错误的是( B )(A)宏和子程序都能有入口参数和出口参数 (B)宏方法执行较慢 (C)子程序调用方法较慢 (D)子程序通常节约空间18关于中断屏蔽不正确的是( A )(A)和CPU无关 (B)与标志寄存器中IF有关 (C)与中断控制器中中断屏蔽寄存器IMR有关 (D)CPU只能设置所有中断都不允许或都允许,不能单个设定19. 虚拟机层次中,正确的是( C )(A)只有V0是硬件层 (B)高级语言层在汇编语言层之下(C)各层间可以是解释的也可以是翻译的 (D)OS在ASM下2032位CPU内存管理模式不可以是( D )(A)实模式 (B)保护模式 (C)虚拟86模式 (D)flat模式二、填空题 ( 每空1 分,共 10 分 ) 21. SWORD变量的范围为 -3276832767 ,保护模式可寻址内存地址范围 04G-1 。22CPU与接口之间的数据传输方式为直接、查询、 中断 、 DMA IO处理机5种。23. 写出与PUSH EAX等价的两条指令 sub esp,4 、 mov esp,eax 。24. LEAVE指令等价于 mov esp,ebp 、 pop ebp 。25. EBX是一个指向Employee 结构的指针,把其BYTE类型的域成员 years赋值给CL的汇编语言指令为 mov cl,(Emplyee ptr ebx).years 。26. 汇编语言子程序 max返回dword类型的X、Y参数最大值,C语言调用此汇编子程序前的声明语句为 extern “C” int max(int x,int y ) ; 三、判断对错(每小题1分,共10分,在题前打 X 符号)27.( )代码标号后跟冒号,但是数据标号后没有冒号28.( X )汇编语言伪指令是在运行时执行的29.( )END main表示程序到此结束,第一条指令为从main处开始执行30.( X)MOV 1234H,5AFEH31.( X)MOV DS,1000H32.( )NEG指令不能设置溢出标志位33.( )宏比子程序方式参数使用起来简单多了34.( )C语言子程序中不自己平衡堆栈35.( X)C嵌入汇编时,可以使用 MACRO宏36.( )汇编语言的乘法指令不会有溢出,但除法很容易溢出。四、简答题(每小题2分,共20分)37为什么发明unicode,Windows2000/XP使用哪一种unicode? Unicode是为了处理多于256个字符代码的国际字符集 UTF-1638比较宏与子程序中参数、局部变量的物理实现及访问方式。 宏:参数可以为寄存器、全局变量,声明时不指明类型。直接使用原形。局部变量用数据段的内存区来存储,可以赋初值。可以在程序中用变量原形访问。 子程序:参数可以为寄存器、全局变量、堆栈。寄存器、全局变量用原形访问,堆栈方式用EBP+n方式访问,须指明类型。 局部变量用堆栈实现,不能赋初值。用EBP-n 方式访问。39. 什么是堆栈,汇编中如何访问?程序设计中有什么用? 堆栈是内存的一段存储区域,在SS段,ESP为当前栈顶,采用先进后出FILO的形式进行访问。 汇编中用PUSH/POP指令访问堆栈。也可以用EBP+/-n方式 堆栈可用以保存恢复临时数据,子程序调用的返回地址,中断的断点,函数的参数传递,局部变量,子程序中的现场保护或回复。40补码是什么,计算机的软硬件是怎么处理它的? 补码是有符号数x在计算机中的表示方式,正数/0的补码是其原码,负数的补码为2n-x或反码+1。减去x,可用加上-x补码来实现。 编译或汇编程序把有符号数转换成补码,然后生成目标代码。CPU并不知道此数的类型,只是按位加减,并同时设置CF、OF等标志。程序员知道数据的类型,根据运算结果选择JC/JNC或JO/JNO等。41RISC和CISC是什么?各有什么特点?优缺点? RISC是精简指令集,包含较少的简短(原子)指令,可以组合起来完成更复杂的操作。优点是执行速度快,利于并行化。但编译后指令多。CISC是复杂指令集,包含比较多的指令,指令功能强。优点是编译后程序指令少。缺点是CPU解码指令时间长,不利于并行化。 42. 程序调用时子程序中对参数做了调整,为什么返回主程序后传值的参数不改变,传地址的参数改变了呢? 子程序被调用前,参数是压入堆栈的。在子程序中对参数做了调整,传值的参数只是修改了堆栈中的数,而实际的参数并没改动,而传地址的参数修改了此地址所指向的变量,所以实际上变量变化了。43.在整个硬件中断的过程中CPU做了什么? CPU在下一条指令执行前,检查INT是否为高电平,若是,则检查CPU中的标志寄存器的IF是否为1,若是则向中断控制器发出中断响应。并读取其中断向量号n。然后PUSHF/PUSH CS/PUSH IP/CLI /0:n*4+2-CS 0:n*4-ip 转向中断处理子程序44用串指令比较两个20个元素的字符串数组S1,S2的大小MOVECX,20MOVESI,offset S1 ;LEA ESI,S1MOVEDI,offset S2 ;LEA EDI,S2CLDREPZ CMPSB45编写汇编语句把AL中的值送入BYTE类型的数组ARRAY ia ,其中ia是数组第i号元素中i的地址。 MOVEBX,ia MOVAL,ARRAYEBX或 lea ebx,arraymov esi,iamov al,ebx+esi或 MOVEBX,ia Mov al,ia xlat46C语言中的指针变量,在汇编语言中对应为什么,是怎么样使用的? 在汇编语言中对应一个内存变量的地址,都是dword类型(ptr TYPE)。 可以本变量名使用,也可以变量名,且效果是一样的。五、程序分析题(每小题4分,共20分)47. MOVEAX,0MOVECX,10 L1:MOVEAX,3MOVECX,5L2:ADDEAX,5LOOPL2LOOPL1上述最后一条指令跟踪执行2次后,EAX=_28_,ECX=_0FFFFFFFFH_。48. MOVAX, 7896HADD AL, AHADD AL,0F2HADC AX,1234H上述程序段执行后AX =_8A35H_,六个运算标志位_of=1 cf=0 zf=0_sf=1。 pf=1 af=049.一个32位汇编子程序内容如下:PUSH EBPMOV EBP, ESPMOV EAX,EBP+8CMP EAX,EBP+12JG LMOV EAX,BP+12 L:POP EBP RET请写出此子程序f的PROTO声明语句_f PROTO :DWORD,:DWORD本子程序完成的功能为_返回两个参数的最大值_。50.& 51. 一个C程序的汇编实现,请标注1-8部分汇编语句的作用。 4: void CopyString(char *s) 5: 00051270 55 push ebp (1) EBP保护00051271 8B EC mov ebp,esp (1) 将EBP指向当前栈顶00051273 83 EC 4C sub esp,4Ch (2) 为局部变量留出空间00051276 53 push ebx (3)现场保护00051277 56 push esi (3) 现场保护00051278 57 push edi (3) 现场保护 6: char buf10; 7: 8: strcpy(buf,s);00051279 8B 45 08 mov eax,dword ptr s (4)s地址=EAX0005127C 50 push eax (4)把s地址参数压栈0005127D 8D 4D F4 lea ecx,buf (5)buf地址=ecx00051280 51 push ecx (5)把buf地址参数压栈00051281 E8 E3 FD FF FF call ILT+100(_strcpy) (51069h) 00051286 83 C4 08 add esp,8 (6)平衡堆栈 9: 00051289 5F pop edi (7)现场恢复0005128A 5E pop esi (7) 现场恢复0005128B 5B pop ebx (7) 现场恢复0005128C 8B E5 mov esp,ebp (8)用EBP恢复栈顶0005128E 5D pop ebp (8)恢复ebp0005128F C3 ret 六、编程(共15分)52编写宏abs,返回参数 X 的绝对值( 5分) abs macro x .if x0 neg x .endif exitm endm注:允许其他答案。如cmp/jmp等53请采用INVOKE/PROTO模式,编写子程序lshift实现BYTE类型数组buf整体循环左移一个二进制位。子程序 lshift的参数为buf,count,其中count为DWORD类型,是数组元素的个数。( 10 分)Lshift proto buf:ptr BYTE,count:DWORDLshift PROC uses EAX EBX ECX, buf:ptr BYTE,count:DWORD (2分 buf:DWORD也对)MOVECX,COUNT ;(1分)MOVEBX,OFFSET bufADDEBX,ECXDECEBX;(2分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论