东南大学笔试-A卷-09-10-3-程序设计及算法语言(电类)Ⅱ
东 南 大 学 考 试 卷( A 卷)
课程名称 程序设计及算法语言(电类)Ⅱ 考试学期 09-10-3 得分 适用专业 电类 考试形式 闭卷 考试时间长度 120分钟 ( ) (每题1分,共10分) .在数组int array[4][4]={{45,1,8},{9,28},{11,39,12,76},{64}}中,的值。 是 。 A. 0 B. 39 C. 8 D. 11 .设有变量定义:int num=20; int *ip; double *dp; 下面赋值不正确的是__ __。 A. ip=# B. *ip= # C. dp=ip; D. *dp=*ip; 设有变量定义如下: int k=10; int a=20, m=&k, *p1=&k, *p2=&m; 执行a= p1==&m;后a 的值是 。 A. 10 B. 20 C. 0 D. 1 关于通过new 运算符动态创建的对象数组,下列判断中 是错误的。 A. 动态创建的对象数组只能调用默认构造函数 B. 动态创建的对象数组必须调用delete []动态撤销 C. 动态创建的对象数组的大小必须是常数或常变量 D. 动态创建的对象数组没有数组名 顺序表不具有的特点是 。 A. 元素的存储地址连续 B. 存储空间根据需要动态开辟,不会溢出 C. 可以直接随机访问元素 D. 插入和删除元素的时间开销与位置有关
假设一个对象Ob1的数据成员是指向动态对象的指针,如果采用浅复制的方式复Ob2,那么在析构对象Ob1和对象Ob2时会 的问题。
A. 有重复释放
B. 没有
C. 内存泄漏
D. 动态分配失败
7. 假设对5个元素A 、B 、C 、D 、E 进行压栈或出栈的操作,压栈的先后顺序是ABCDE ,则出栈的先后顺序不可能是 。
自 觉 遵 守 考 场 纪
律
如 考 试 作 弊
此
答
卷
无
效
A. ABCDE
B. EDCBA
C. EDBCA
D. BCADE
8. 下列关于虚函数的判断中,是错误的。
A. 类成员函数前用virtual修饰的称为虚函数。
B. 只有通过指向派生类对象的基类类型的指针变量或引用来调用基类的虚函
数,才能实现动态的多态性。
C. 构造函数一般不定义为虚函数。
D. 派生类中定义的函数名与基类的虚函数名相同就可以实现覆盖。
9. cin、cout、cerr和clog四个流对象中有个是全局标准流对象。
A. 1
B. 2
C. 3
D. 4
10. 打开一个二进制文件时必须采用模式。
A. ios::in
B. ios::out
C. ios::binary
D. ios::app
二、填空题 (每空1分,共20分)
1. 面向对象程序设计具有的特点:、和。
2. C++中的多维数组用的是一个的定义,即多维数组的基本定义是以
作为元素构成的数组。
3. 通过new运算符动态创建的对象的存放在中。
4. 默认复制构造函数是按成员复制,称为。
5. 为实现代码的,通常采用模板,它把数据类型改为一个,称为
程序设计。
6. 类的继承方式有:、和。如果不显示给出访问控制关键字,则默认继承方式为。
7. 以下程序中Sort()函数是顺序表的成员函数。
template
T temp;
for(i=0;i k=i; temp=slist[i]; for(j=i;j<=last;j++) if(slist[j] k=j; temp=slist[j]; } if(k!=i){ temp=slist[i]; slist[i]=slist[k]; slist[k]=temp; } } } 该成员函数用到的是排序。 若未排序前的数据为:55 34 98 21 76 43 外层for循环执行了第一次后的数据顺序为: 8. void a(node *p,Datatype x){ node *q=new node; q->info=x; q->link=p->link; p->link=q; } 以上a函数实现的功能是。 9. 通过表达式可以判断文件流fd的读写指针是否到达文件的尾部。 10. 在文件中存取的最小信息单位为字符,而文件中存取的最小信息单位为字节。 三、阅读程序,根据要求填空: ( 共40分) 1.写出下面程序的输出结果(每空2分,共4分) #include using namespace std; int max_value(int *arr, int n) { int i, max=arr[0]; for(i=0; i if (arr[i]>max) max=arr[i]; return (max); } int main() { int a[3][4] = {{1,3,6,7},{2,4,6,8},{15,17,34,12}}; int *b=(int*)a; cout< cout< return 0; } 输出结果: 2. 指出以下程序的错误:(每空2分,本题10分) #include using namespace std; class Printer { int PrintValue; int PrintPages(); public: void Printer(int value); int PrintDocuments(); ~Printer(); ~Printer(int value); }; ……//成员函数在类外的定义在此处未具体写出。(略)int main() { Printer HP, Canon(4); Canon.PrintPages(); return 0; } 错误之处: 3. 写出下面程序的输出结果(每空2分,本题4分)#include using namespace std; void swap1(double d1,double d2){ double temp; temp=d1;d1=d2;d2=temp; } void swap2(double *d1,double *d2){ double temp; temp=*d1;*d1=*d2;*d2=temp; } int main(void){ double x=1.0, y=2.0 ; swap1(x,y); cout<<"x="< swap2(&x,&y); cout<<"x="< return 0; } 输出结果: 4.写出下面程序的输出结果(每空1~3分,本题9分) #include using namespace std; class stack{ int *rep; int size,top; public: stack(int n=10):size(n)//构造函数 { cout<<"Initial Constructor"< rep=new int[size]; top=-1; } stack(stack &s):size(s.size)//复制构造函数,需深复制。 { cout<<"Copy Constructor"< rep=new int[size]; for (int i=0;i rep[i]= s.rep[i]; top=s.top; } ~stack() { cout<<"Destructor"< delete [] rep; } void push(int a) {rep[++top]=a; } int pop() { return rep[top--]; } bool isEmpty() {return top == -1;} }; int main() { stack *ptr=new stack[2]; for(int i=1;i<5;i++) { ptr[0].push(i); ptr[1].push(i+6); } stack s2(ptr[0]); for(i=0;i<2;i++) cout< s2.push(ptr[1].pop()); ptr[0].push(ptr[1].pop()); s2.push(ptr[1].pop()); while(!s2.isEmpty()) cout< cout< delete[] ptr; return 0; } 输出结果:(1分) (1分) (1分) (3分) (1分) (1分) (1分)5. 写出下面程序的输出结果(每空2分,本题8分) #include #include using namespace std; class person { char name[10]; int age; public: void init1(char *str, int k) { strcpy(name,str); age=k; } virtual void disp() { cout<<"name: "< cout<<"age: "< } }; class student: public person { int num; double avg; public: void init2(int i,double f) {num=i; avg=f;} void disp() { cout<<"num: "< cout<<"avg: "< } }; int main() { person A,*p; student B; A.init1("王明",19); p=&A; p->disp(); B.init2(20090332,97.5); p=&B; p->disp(); return 0; } 输出结果: 6.写出下面程序的输出结果(每空1~2分,共5分)#include using namespace std; template { return a+b; } void main() { cout< cout< cout< } 输出结果:(2分) (2分) (1分) 四、完善程序(13、14空每空1分,其余每空2分,共30分) 1. 建立线性表模板,能够按照用户要求的元素个数(缺省为10个元素)创建数组、实现元素的有序插入(即将元素插入在有序数组适当位置,保持数组有序)、降序排列数组的二分查找以及数组打印。主函数中将模板实例化,创建一个整型数组,通过调用有序插入函数建立一个降序排列的数组,并测试二分查找功能。程序如下:#include using namespace std; template class seqlist{ T *slist; int last; int maxsize; public: seqlist(int n=10){ maxsize=n; slist=new T[n]; last=-1; } ~seqlist(){ if(slist) (1) } void print(){ for(int i=0;i<=last;i++) cout< cout< } void insertOrder(T); int bisearch(T key); }; template (2) { for(int i=last; i>=0 && slist[i] (3) =key; last++; } template int seqlist int low=0,high=last,mid; while(low<=high){ mid=(low+high)/2; if(key else if(key>slist[mid]) high=mid-1; else break; } if(low>high) (4) ; return mid; } int main(){ seqlist int k,p; cout<<"input 8 integers:"< for(int i=0;i<8;i++){ //建立降序排列数组 cin>>k; (5) ; } a.print(); cout<<"input an integer to be searched:"< cin>>k; p=a.bisearch(k); if(p==-1) cout< else cout<<"a["< return 0; } 2、建立单链表模板类,并实例化为字符串链表,测试建立链表、查找结点并删除结点等功能。 #include #include using namespace std; template template T data; Node* next; public: Node(){next=NULL;} Node(T d){data=d; next=NULL;} friend class List }; template class List{ Node public: List(){head=tail=new Node ~List(){makeEmpty(); delete head;} //析构函数 void makeEmpty(); //清空链表,只留下一个表头的空结点 Node Node void insertRear(Node void deleteNode(Node }; template void List Node while(t){ cout< t=t->next; } cout< } template void List Node while(head->next){ t=head->next; (7) ; delete t; } tail=head; } template Node Node while((8) ) t=t->next; return t; } template void List Node while(q&&q!=p){t=t->next; q=t->next;} t->next=q->next; delete q; } int main(){ List Node string s; cout<<"input 6 strings:"< for(int i=0;i<6;i++){ cin>>s; pNode=list1.createNode(s); //建立数据结点 list1.insertRear(pNode); } list1.printList(); cout<<"input a string:"< cin>>s; pNode=list1.find(s); if(pNode) (10) ; //删除pNode结点 else cout<<"no such string."< list1.printList(); return 0; } 3、在抽象类object基础上派生圆类和矩形类,它们各自重构抽象类中的calculate 函数,以实现面积的计算;同时重载”<<”运算符实现对象数据的输出。主函数用基类指针指向不同派生类对象,以实现与所指对象相一致的操作。 #include #include using namespace std; class object{ //抽象类 public: (11) ;//定义calculate函数 }; class circle:public object{ double x,y,r; double area; public: circle(double x0=0, double y0=0, double r0=1){x=x0;y=y0;r=r0;} (12) {area=3.14*r*r; return area;} (13) { os<<'('< 考核方式与要求 期末总成绩构成:期末开卷考试60% + 平时作业10% + 实验和实验报告30%。 1、试卷考核方式与要求 “汇编语言程序设计”的课程要求是使学生具有一定的程序设计能力。虽然课程是通过80x86微处理机来开展教学的,但学习的重点不仅仅是学会80x86指令的语法和规范,更重要的是通过多读程序、多练习编写程序来掌握程序设计的基本方法和技术,要求学生在工作中遇到其他机型,都应该能利用所掌握的方法和技术顺利解决实际问题。因此,我们在教学过程的各个环节,特别是具有指挥棒作用的考核环节中,着重体现了“能力培养是首位”的指导思想。 为此,汇编课一直实行多元化考核方式,在考核评分上,平时练习和上机实验占40%,期末考试占60%。期末考试实行开卷考试,这样学生平时学习的关注点就会放在分析问题和编程实现的方法上,有利于学生开阔思路,发挥自身创造力。每年设计开卷考试的考题是有一定难度的,教师必须非常熟悉课程的知识点、重点和难点,以及体现这些知识和能力水平的多种题目类型。 2、实验方式与要求 实验的目标为:加强课堂上相关理论和技术学习的有效性;提高学生上机编程和调试的能力;培养学生科学实践的理念和独立分析问题、解决问题的能力。其设计思想是:实验内容兼顾基础性和综合性,实验题目由简单→复杂,程序功能由单一→综合,实验安排有基本要求题+自选题,实验题类型有验证型和自主创新设计型。 √实验课组织形式: 1.系教学实验室按课程要求负责上机环境配置及实验设备管理; 2.以班为单位组织上机实验,并将上机时间安排表发至每位同学; 3.每单元实验课安排一位助教(助博)负责实验指导和答疑; 4.学生每做完一个实验即可提交老师验收,老师将实验运行结果记录下来作为实验成 绩的依据。验收时教师要注意发现比较突出的好的实验例题(完成时间短、程序运行效率高); 5.要求提交实验报告,根据实验报告及实验运行结果的记录,评出实验成绩,实验成 绩一般占总成绩的30%。 √教师指导方法: 1.大课集体指导。每学期实验前教师安排一次实验指导课,讲解实验方法和实验要求; 2.每次实验课都安排助教(助博)进行个别或集体的实验指导和答疑; 3.对具有共性的、问题比较多的实验,主讲教师在课堂上再进行集体指导; 4.每学期对实验中出现的问题,对照实验题目进行分析、总结,以利于以后的教学。 5.对于实验中有创新点的学生,还可以请他上讲台为同学们介绍他的设计思路,引发大家展开讨论。 完成下列训练题的基本步骤是: 1、问题分析及解决方案框架确定 充分地分析和理解问题本身,明确问题到底要做什么。(what to do?) 在确定解决问题框架过程中(how to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。 2、详细设计和编码 确定算法的主要流程,在此基础上进行代码设计(coding),一般来讲,每个 明确的功能模块程序不超过60行代码,否则,功能要继续分解。 3、上机前编写程序与检查 上机前检查程序可有效提高调试效率,减少上机调试程序时的无谓错误。 程序检查主要有两种途径:用一组测试数据手工执行程序;或者通过阅读或 给别人讲解自己的程序而深入、全面地理解程序逻辑,把程序中的明显错误 事前排除。 4、上机调试程序 提供的结果应当包括: 算法、数据结构的设计、程序清单 1、猜数游戏 游戏的开始由机器产生一个随机数(1~100之间,用库函数random()取值),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示“your answer is HIGH,try again!”否则,程序提示“your answer is LOW,try again!”直到猜对为止。程序可以实现连续猜数,直到游戏者退出。 程序输出要求:累计游戏者猜对这个数所需的次数n,当n<=7时,给出“congratulation!”,当7 IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社) (沈美明,温冬蝉著) 第二章 1.解答:有256个 2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元 E5 1E 3C 2A 3.解答: 30022H字节单元内容: ABH 30024H字节单元内容: EFH 30021H字单元内容: AB34H 30022H字单元内容: CDABH 4.解答: 这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址 5.解答: CS+IP 第一个字的物理地址为: 0AAA40H 6.解答: 条件标志OF,SF,ZF,CF,的值依次为:0,0,0,0 7.下列操作可使用那些寄存器? (1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH ,AL等(2)循环计数 CX (3)乘法和除法DX,AX,AH,AL (4)保存段地址CS ,DS,ES,SS (5)表示运算结果为O FLAGS (6)将要执行的指令地址IP (7) 将要从堆栈取出数据的地址BP,SP,SS 8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP 9.一一对应; 5--A 4--B 2--C 3--D 12--E 9--F 11--G 10--H 13--I 8--J 7--K 6---L 1--M 15--N 14--O 第三章 1.(1)立即寻址没有 (2)直接寻址7237H (3)使用BX的寄存器寻址没有 (4)使用BX的间接寻址 637DH (5)使用BX的寄存器相对寻址0D5B4H (6)基址变址寻址8E18H (7)相对基址变址004FH 2.根据下列要求,写出相应的汇编指令。 (1)ADD DX,BX (2) ADD AL,[BX][SI] (3) ADD [BX][0B2H], CX (4) MOV AX,2A59H ADD [0524H] ,AX (5) ADD AL ,0B5H 汇编语言程序设计实验 网络*** *** 实验一 顺序与分支程序设计 一 、实验目的 1) 掌握顺序程序设计方法。 2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在pc 机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容 1.实验六 从键盘上接收一位十进制数x ,计算y 值,并以十六进制形式显示出来,y 按下列公式计算。 ???????===-=+=) 6(2/) 5()4(2) 3(22 2 2X X X X X X X X X X Y 2..实验七 实验内容:从键盘上接收两个一位十六进制数x 和y ,然后再输入一个a-d 之间的一个字符,按下列要求计算。 a) 当输入字符为a ,则计算x+y ,并以十六进 制形式显示出来 b) 当输入字符为b ,则计算|x-y|,并以十六进制形式显示出来 c) 当输入字符为c ,则计算x*y ,并以十六进制形式显示出来 d) 当输入字符为d ,则计算x/y ,并以十六进制形式显示出来 三、实验代码 实验六 DATE SEGMENT X DB ? DATE ENDS ;数据段 CODE SEGMENT ASSUME CS:CODE,DS:DATE START:MOV AX,DATE ;代码段 MOV DS,AX ;初始化ds寄存器 MOV AH,1 INT 21H ;读文件到缓冲区 CMP AL,33H ;比较指令 JB L0 ;A 新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。 汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于 调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试 汇编语言实验教程 一、常用DOS命令 1. 进入虚拟DOS 选中开始菜单中的“运行”命令,输入cmd 后按确定,可以进入虚拟DOS环境。如图所示: 打开窗口后,可以在属性中修改字体大小、颜色和窗口大小。并且可以用组合键ALT+ENTER进行窗口最大化。 2. 常用DOS命令 (1)查看目录命令DIR C:\>dir C:\>dir/w (2)显示文件内容命令TYPE C:\>type test.asm (3)文件拷贝命令COPY C:\>copy sa.asm sd.asm 将文件sa.asm拷贝为sd.asm (4)改变盘符命令 C:\>e: 结果为:E:\> (5)进入下一级目录 C:\>cd 子目录名 例如:C:\>cd masm5 得:C:\masm5> (6)改变目录 例如:C:\>cd windows\temp 得:C:\>windows\temp> (7)退到上级目录 例如:C:\>masm5>abc>cd.. 得:C:\>masm5 (8)退到根目录 例如:C:\>masm5>cd\ 得:C:\> (9)清屏 例如:C:\>cls 3. DOS下常用快捷健 (1)清除当前命令行:ESC (2)输入上次输入的命令:F5 (3)显示曾经输入的所有命令供选择并执行:F7 (4)搜索命令的历史记录,循环显示所有曾经输入的命令,直到按下回车键为止:F8 【技巧1】虚拟DOS下复制粘贴方法 在窗口上点击鼠标右键,选择“标记”后可以用鼠标选择需要复制的字符,点一下右键,然后在光标处点右键选“粘贴”即可。 【技巧2】虚拟DOS窗口增加滚动条 在虚拟DOS窗口中选属性->布局-> 屏幕缓冲区大小->将“高度”改为80以上。 二、程序的编辑、编译和链接 下面我们完整的完成一个实验,实验要求为在计算机屏幕上显示一个字符串“HELLO!”,具体步骤如下。 1. 调用文本编辑软件建立源程序.ASM文件。 利用Windows2000操作系统附件中的“记事本”编辑以下源程序。命名为:Test1.ASM,该程序的功能是在计算机屏幕上显示一个字符串“HELLO!”。 DATA SEGMENT S1 DB ‘HELLO!’,‘$’ DATA ENDS STACK SEGMENT PARA STACK DB 64 DUP(?) STACK ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AH,09H MOV DX,OFFSET S1 INT 21H RET MAIN ENDP CODE ENDS END S TART 2. 调用汇编程序MASM对源程序汇编产生.OBJ文件。 在C:〉提示符下键入MASM Test1.ASM(回车) 执行上述操作命令之后将在屏幕上显示如下信息: Microsoft(R) Macro Assembler Version 5.00 Copyright(C) Mirosoft Corp 1981-1985,1987.All rights reserved Object filename[Test1.OBJ]:(回车)《汇编语言程序设计》考核方式
《C语言》程序算法练习题
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)解析
河北工业大学汇编语言知识程序设计实验
新版汇编语言程序设计习题答案(钱晓捷主编)
汇编语言的编程步骤与调试方法
工程学院汇编语言程序设计实验教程