IBM-PC汇编语言程序设计第二版第2章
- 格式:ppt
- 大小:205.54 KB
- 文档页数:16


汇编语⾔程序设计
第4章 汇编语⾔程序设计§4.1 汇编语⾔的模式
⼀、汇编语⾔源程序的⼀般模式[Name 模块名]
[Title 标题]
[定义宏]
[定义数据段]
[定义附加段]
[定义堆栈段]
定义代码段
源程序结束
中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成
汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]
指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]
标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集
(1)字母
(2)数字符
(3)特殊字符2.界符
⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。3.常量
出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量
①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。④⼗六进制:以字母H结束。
(2)字符常量
指⽤单引号或双引号引起的字符或字符串。4.标识符
由程序员⾃⼰建⽴的字符序列(标号或名称)。⼀个标识符不能超过31个字符,不能以数字开头。5.保留字
汇编语⾔中具有特殊意义的字符序列。6.注释
⼀⾏中分号以后的部分。⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号
具有⼀定意义的字符序列。1.寄存器名
2.变量
段属性、偏移属性、类型属性3.标号
段属性、偏移属性、类型属性4.常数
5.其它
三、表达式
由操作数和运算符组合⽽成的序列。1.操作数
(1)⽴即数
(2)寄存器操作数
(3)存储器操作数2.运算符
(1)算术运算符+、-、*、/、MOD(求余)
(2)逻辑运算符AND、OR、NOT、XOR
(3)关系运算符EQ、NE、LT、LE、GT、GE
.
学 号
课 程 设 计
题
目 求解一元二次方程程序设计
学
院
专 业
班 级
姓 名
指导教师
2013 年 1 月 11 日
.
课程设计任务书
学生姓名: 专业班级:
指导教师: 工作单位:
题 目:求解一元二次方程程序设计
初始条件:带有编辑器、汇编程序、连接程序和调试程序的电脑一台。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
采用汇编语言设计一个程序,求解一元二次方程02xbxax。实现从键盘输入a,b,c的值,且-128≤a,b,c≤127;显示方程的解,-32768≤X1,X2≤32767; 考虑所有的情况,包含共轭复根。
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述
(4)软件设计课题需要说明:软件思想,流程图,源程序及程序注释
(5)调试记录及结果分析
(6)总结
(7)参考资料
(8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
时间安排:
12月31日~1月2日: 收集资料,方案选择
1月3日~1月8日: 整体流程,程序细节
1月9日~1月10日: 调试程序,报告撰写
1月11日: 交设计报告,程序演示,答辩
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日 .
目录
摘要 ............................................................................................................................................ 1
第1页 汇编语言程序设计练习题2 一、单项选择题(答案BDDBA BDADC CCAC CBBDA BDADA BCCB ) 1、使计算机执行某种操作的命令是( ) A.宏指令 B.指令 C.伪指令 D.语句 2、某存储单元的物理地址是12345H,可以作为它的段地址有( )。 A.2345H B.12345H C.12340H D.1234H 3、8088/8086存储器分段,每个段不超过( ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4、计算机能直接识别并执行的语言是( ) A.汇编语言 B.机器语言 C.高级语言 D.低级语言 5. 8086/8088系统执行传送指令MOV时( ) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 6、以下各个指令中正确的是( )。 A. MOV CS, DX B. MOV DS, BP C. IN 20H,AL D. MOV AH, BX 7、下列对OUT指令的叙述正确的是( )。 A. 实现从端口中读出数据 B. 能直接访问的端口范围是0~1KB C. 能访问的端口为64KBit D. 只能用DX做为间接寻址的寄存器 8、已有汇编语句“VAR EQU 1220H”,则语句“mov AX, VAR”中源操作数的寻址方式为( )。 A. 立即寻址 B. 直接寻址 C. 寄存器间接寻址 D. 基址寻址 9、与MOV BX,OFFSET DATA1指令完全等效的指令是( )。 A.MOV BX,DATA1 B.LDS BX,DATA1 C.LES BX,DATA1 D.LEA BX,DATA1 10、下列指令中段默认为堆栈段的是( ) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB BX,[BP][DI] D. MOV DX,[1000H] 11、已知DS=2000H,ES=1000H, SI = 0800H,内存10880H开始的两个单元中存放5678H,内存20880H开始的两个单元中存放8765H,则语句“LEA BX,[SI+80H]”执行后BX的值为( )。 A. 5678H B. 1000H C. 0880H D. 8765H 12、汇编结束语句有( )种格式,为( )。 第2页A.1,END B.1,END 程序的启动地址标号 C.2,END和 END 程序的启动地址标号 D.以上都不正确 13、 指令“CALL FAR PTR SUM”执行时将会向堆栈中顺次压入( )。 A. IP、 CS B. CS、IP C.标志寄存器值、IP D.标志寄存器值,CS、IP 15、在汇编语言程序的开发过程中使用宏功能的顺序是( )。 A、宏定义,宏调用 B、宏定义,宏展开 C、宏定义,宏调用,宏展开 D、宏定义,宏展开,宏调开 16、要在程序中定义缓冲区BUF,保留10个字节存储空间的语句是( ) A.BUF DW 10 B.BUF DB 10 C.BUF DB 10 DUP (?) D.BUF DW 10 DUP (?) 17、IBM PC微机中,有符号数是用( )表示的 A、原码 B、补码 C、反码 D、BCD码 18、设SP初值为3050H,执行指令PUSH BX后,SP的值是( ) A.304FH B.304EH C.3048H D.3049H 19、JMP BX指令的寻址方式是( ) A.寄存器寻址 B.寄存器间接寻址 C.段内直接转移寻址 D.段内间接转移寻址 20、DF=1,执行MOVSB指令后 ( ) A.SI减1,DI减1 B.SI加1,DI加1,CX减1 C.SI减1,DI减1,CX减1 D.SI加1,DI加1,CX加1 21.指令MOV BX,MASK[BP],若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么源操作数的物理地址为: A. 17500H B. 16500H C. 14500H D. 13500H 22.十六进制数88H,可表示下面几种形式,请找出错误的表示( )。 A. 无符号十进制数136 B. 带符号十进制数-120 C. 压缩型BCD码十进制数88 D. 8位二进制数-8的补码表示 23.指令指针寄存器是( )。 A. IP B. SP C. BP D. PSW 24. 设数据段中已有: DA1 DB 12H,34H DA2 DW 56H,78H 下面有语法错误的语句是( )。 第3页 A. ADR1 DW DA1 B. MOV DA1+1,AX C. MOV BYTE PTR DA2+1,AL D. MOV WORD PTR DA1+1,AL 25. 表示过程定义结束的伪指令是( ) A.ENDP B.ENDS C.END D.ENDM 26.指令MOV AX,[3070H]中源操作数的寻址方式为( ) A.寄存器寻址 B.直接寻址 C.立即寻址 D.间接寻址 27.要求CX=-1时转至MINUS处,下面的指令序列不能实现这一功能的是()。 A、INC CX JZ MINUS B、SUB CX,OFFFFH JZ MINUS C、AND CX,OFFFFH JZ MINUS D、XOR CX,OFFFFH JZ MINUS 28.以下跳转指令中不属于段内跳转的是( ): A.JMP NEAR PTR L1 B.JMP SHORT L2 C.JMP DWORD PTR[BX] D.JNZ L3 30. 对寄存器AX的内容乘以4的正确指令是( )。(CL=2) A.SHR AX,CL B.SHL AX,CL C.ROL AX,CL D.RCR AX,CL 二、填空 1. 8086/8088 CPU可访问2个独立的地址空间,一个为存贮器地址空间,其大小为1MB_个字节;另一个为IO地址_,其大小为__64KB__字节。 2. 计算机中的指令由操作码 字段和操作数 字段两部分组成。 3. n位补码的表数范围为:_________ 4. 在8086段的最大长度是__64KB ___。 5. 代表无符号数运算溢出的标志位是_CF____。 6. LOOP指令的结束条件是_CX=0____。 7. 在实模式下80x86 CPU能够访问的存储器空间为( 1M )byte,指令中访问的操作数的逻辑地址由偏移地址和( 段 )地址来表示。 8. 指令MOV DX, [BX + SI + 100H]的源操作数为( 相对基址变址 )寻址方式。 10. 已知(CS ) = 1500H, (IP) = 0110H, 则8086执行指令的物理地址为 15110H ,如果该指令是长度为2字节的加法指令,则在无中断产生的情况下,执行完该指令后IP = 15112H。 第4页11. 现有(DS) = 3000H, (BX) = 0100H, (SI) = 0002H, (30100H) = 12H, (30101H) = a7H,(30102H) = 35H,30103H = 98H,填写每条指令执行后AX的值 (1) MOV AX, 1200H AX = 1200H (2) MOV AX, [BX] AX = 0A712H (3) MOV AX, [BX + SI] AX = 9835H (4) MOV AX, [SI + 100H] AX =0A712H 12. 设(CS) = 1000H, BX = 1100H,则执行指令JMP BX后,IP = 1100H ,指令的物理地址为 11100H 13、调用程序、子程序传送参数的方法通常有寄存器_、_存储器(或者变量)_和_堆栈_三种方法。 四、简答 1、 宏指令和子程序的区别。 子程序:在程序执行期间被调用,只占用自身大小的一段空间。 优点:模块化,节省内存,可被多次调用,编程效率高。 缺点:额外开销(保存返回地址,计算转向地址,传递参数等)大,增加了执行时间。适于子功能代码较长、调用比较频繁的情况。 宏调用:在汇编期间被展开,每调用一次就把宏定义体展开一次。 优点:参数传送简单,执行效率高。 缺点:不节省空间,适于子功能代码较短、传参 较多的情况。 2、 子程序声明中主要有哪些属性可以指定? NEAR FAR 3、 在8086哪些寄存器可以用来指示存储器地址? BX BP SI DI 4、 如果一个文件ex1.asm中定义了一个字节变量BYTE1,而文件file2.asm中将使用该变量,请问如何实现? 第5页在ex1.asm中用PUBLIC 声明BYTE1,在file2.asm中用EXTRN引用BYTE1 ex1.asm public BYTE1 file2.asm EXTRN BYTE1:BYTE 5.8086中基本结构寄存器的通用寄存器有哪些,段寄存器又有哪些? 通用寄存器AX BX CX DX BP SI DI 段寄存器CS DS ES SS 五、按要求回答问题。 1. 以下的程序实现将内存单元20000H开始的100个字节初始化为‘a’,请将程序补充完整。 MOV DS,2000H MOV SI,_0000 MOV _CX_,100 MOV _AL_,’a’ _REP STOSB__ 2. 设num1,num2都为字变量,请指出下面语句序列的功能 MOV AX,num1 XOR DX,DX OR AX,AX JNS SKIP MOV DX,OFFFFH SKIP: IDIV num2 带符号字型数据num1除以字数据num2 3. 下面的程序通过子程序调用,将数组ARRAY的COUNT个元素求和,并将结果送SUM单元,分析这段程序后,补充完整程序中的空格部分,并请画出用堆栈传送参数地址时,堆栈最满时的状态: SUM DW ? ARRAY DW 200 DUP(?) COUNT DW 200 ……… 第6页 MOV DX, OFFSET SUM PUSH BX MOV BX, OFFSET ARRAY PUSH BX MOV BX, OFFSET COUNT PUSH BX CALL SUMPRO ……… SUMPRO PROC NEAR PUSH AX PUSH BX PUSH SI PUSH DI PUSH BP MOV BP, SP MOV SI, [BP+_0AH] ;得到ARRAY的地址 MOV DI, [BP+_8] ;得到COUNT的地址 MOV CX, [DI] MOV DI, [BP+_6_] ;得到SUM的地址 XOR AX, AX NEXT: ADD AX, [SI] INC SI INC SI LOOP NEXT MOV [SUM_], AX ;送求和结果 POP BP__ POP DI POP SI POP BX__ POP AX RET SUMPRO ENDP 第7页 4.、设(SS)= 4000H,(SP)=1200H,执行下列指令序列,画图说明SP和堆栈内容变化过程的示意图,并在有分号的地方分别标出(AX),(SP) ,((SP))的内容。 MOV AX,23AAH PUSH AX ; (SP)= 11FEH ;((SP))= 23AAH MOV AX,6735H PUSH AX MOV BP,SP ADD WORD PTR[BP], 3000H POP AX ; AX= 6735H 画堆栈变化示意图: 六、综合题。 1. 编程实现:将从键盘上接收到的一串字符(字符个数≤60)以其相反的次序显示在屏幕上。 2. 编写程序将包含100个数据的数组ARRAY分成两个数组,正数组和负数组,ARRAYP,ARRAYN,并统计它们的长度。 3. 有一个首地址为A的N字数组,编制程序使该数组中的数按照从大到小的次序排列。
《汇编语言程序设计》教案
附:习题参考答案
《汇编语言程序设计》(第4版)
钱晓捷 主编
前 言
1. 汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2. 汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3. 本教材共有十一章,其内容安排如下:
(1). 第一、二章为汇编语言所用的基础知识。
(2). 第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3). 第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4). 第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5). 第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6). 第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7). 第九章说明BIOS和DOS系统功能调用的使用方法。
(8). 第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书
1. 沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)
2. 沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年
3. 沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月
4. 沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年
5. 周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,1991
6. 郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,1995