《汇编语言程序设计》复习提纲_11xzpeng
《汇编语言程序设计》复习提纲
一、概述
汇编语言课程是一种面向机器的低级语言,它依赖于硬件,能通过巧妙的程序设计充分发挥硬件的潜力。通过学习该课程能比较深入的了解计算机的全过程。设置本课程的目的:通过初步掌握计算机的指令系统、运算方法及各硬件的作用和实现过程,为以后学习操作系统、各种高级语言、数据库和各种系统软件的学习打下良好的基础。并且,熟练掌握用汇编语言设计、编写、调试和运行程序的方法;掌握程序设计的基本方法和技能。为了帮助大家复习,根据教学大纲要求,现逐一说明各章学习知识点、考核内容及要求。在最后给出示范考题供参考。
考核要求:要求考生比较系统地理解80x86系列
第1章汇编语言入门;
第2章寻址方式和指令
第3章汇编语言的要素
第4章程序逻辑与控制
第5章子程序和宏
其他
CPU的寻址方式、指令系统;掌握汇编语言基本程序设计方法,包括顺序程序设计、分支程序、循环程序和子程序设计方法;掌握汇编语言上机环境、上机过程和程序调试技术;了解汇编语言高级程序设计技术和模块化程序设计技术。
考试内容:汇编语言入门、指令系统和寻址方式、汇编语言程序格式、循环与分支程序设计、子程序设计、输入/输出程序设计。
二、知识点、考核内容及要求
1.第一章汇编语言入门
考核知识点:进位计数制,补码的表示方法,以及不同进位制之间的转换,基本的逻辑运算和移位操作。
考核要求:
◆掌握进位计数制与不同基数之间的转换;
◆熟练掌握二进制数和十六进制数运算;
◆理解计算机中数和字符的表示;
◆准确掌握几种基本的逻辑运算和移位操作。
◆理解计算机系统概述;
◆准确掌握每个寄存器的使用方法;
◆80X86CPU的工作模式;
◆掌握存储器的基本存储结构、实模式的存储器寻址方法;
◆理解标志寄存器各状态标志位的含义。
2.第二章指令系统和寻址方式
考核知识点:寻址方式、指令系统。
考核要求:
◆寄存器、存储器和堆栈
重点是:①理解标志寄存器各状态标志位的含义。②掌握堆栈压入指令PUSH 和弹出指令POP的功能,特别是对堆栈指针SP的操作。
◆指令的基本格式
◆寻址方式
理解并掌握实模式下的8种数据寻址方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址和比例变址寻址方式。
理解并熟悉掌握4种程序寻址方式:段内直接寻址、段内间接寻址、段间直接寻址和段间间接寻址的基本格式。
主要是通过阅读程序和编写程序来掌握这些寻址方式的应用,对存储器中的操作数可使用不同的寻址方式进行存取,编程时应根据需要选取合适的寻址方式。例如连续访问一维数组中的各元素,可用寄存器间址或变址(基址)寻址方式。
◆8086/8088的几类基本指令
由于指令条数较多,不易记忆,造成复习困难。为了使同学们掌握最常用的指令,为读懂程序和编写简单程序段打下基础,本文列出了一些需熟练掌握的指令(注意,并不是其它指令就不重要了,它们在实际的程序中也要用到)。
(1)传送类:数据传送指令MOV,交换指令XCHG、装入有效地址指令LEA、堆栈操作指令PUSH/POP等,注意这三条指令对状态标志位无影响。
(2)算术运算类:加法指令ADD、带进位加法指令ADC、加1指令INC;减法指令SUB、带借位减指令SBB、减1指令DEC、求负数指令NEG、比较指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV和符号扩展指令CBW、CWD等。
注意,要掌握加减运算指令对状态标志位的影响。
(3)位操作类:逻辑与指令AND、逻辑或指令OR、逻辑异或指令XOR、逻辑非指令NOT、测试指令TEST;算术左移SAL、算术右移SAR、逻辑左移SHL、逻辑右移SHR、循环左移ROL、循环右移ROR、带进位循环左移RCL、带进位循环右移RCR。
注意,要掌握逻辑运算指令和测试指令对状态标志位的影响。
(4)标志位操作指令: CLC、STC、CLD、STD等。
(5)控制转移和中断指令:JMP、JXX、LOOP/LOOPE/LOOPNE、CALL、RET、INT等。
(6)串指令:MOVS、STOS、LODS、CMPS、SCAS等。
(7)重复前缀:REP、REPE、REPNE等。
对上面这些最常用的指令,要掌握它们的格式、功能、以及在程序中的使用。
3.第三章汇编语言程序格式
考核知识点:基本程序格式、伪指令的使用方法。
考核要求:
◆掌握汇编语言的常用运算符
(1)算术运算符/逻辑运算符/关系运算符
(2)数值返回运算符:SEG、OFFSET、TYPE、SIZE、LENGTH。
(3)属性运算符:PTR
◆常用伪指令
(1)符号定义伪指令:等值伪指令EQU、等值伪指令“=”。
(2)数据定义伪指令:DB、DW、DD
注意掌握如何使用数据定义伪指令来定义变量,以及为变量赋初值的表达式的几种形式:数值表达式。?表达式、字符串表达式、带DUP表达式。
(3)LABLE伪指令
注意LABLE伪指令与指令或数据定义伪指令来连用时的使用方法。
(4)段结构伪指令
要求掌握:段定义伪指令SEGMENT/ENDS、段寻址伪指令ASSUME、END伪指令在程序中的使用;汇编语言程序的分段结构和段寄存器的装入。
(5)过程定义伪指令PROC/ENDP
可结合子程序设计,掌握在同一代码段中使用过程定义伪指令去定义子程序。
(6)定位伪指令ORG:在数据段中的使用。
(7)准确掌握汇编语言源程序一般结构。
(8)汇编语言程序的开发过程。
4.第四章程序逻辑与控制
考核知识点:顺序程序结构、分支程序结构和循环程序结构,以及基本程序设计方法。
考核要求:
◆顺序程序设计
要求能编制顺序程序段完成四则运算多项式的计算及指定功能。
◆分支程序设计
要求能使用转移指令编制具有2~3个分支结构的程序段。
(1)无条件转移指令JMP:掌握段内直接转移。
(2)条件转移指令
掌握:简单条件转移指令JC、JNC、JE、JNE、JS、JNS、无符号数条件转移指令JA 、JAE、JB、JBE,带符号数条件转移指令JG、JGE、JL、JLE。
注意区分无符号数条件转移指令与带符号数条件转移指令的使用场合。
◆循环程序设计
要求能使用循环控制指令或转移指令编制简单的单循环程序段,重点是LOOP循环控制指令的功能和时使用。
5.第五章子程序和宏
考核知识点:子程序设计及DOS功能调用。
考核要求:
◆子程序(过程)设计
掌握子程序调用指令CALL,子程序返回指令RET的功能与使用,使用寄存器传递主、子程序参数的方法,能编制程序段实现段内的子程序的调用与返回。
◆DOS功能子程序调用
要求掌握四种功能调用:带显示的键盘输入(1号功能)、字符串输入(0AH 号功能)、单字符显示(2号功能)、字符串显示(9号功能)。
6.第六章汇编语言的扩展
考核知识点:宏指令、重复汇编/条件汇编、模块化程序设计。
考核要求:
◆宏指令的定义、宏指令的调用和宏指令的展开
注意:掌握宏指令的参数传递、与宏有关的伪指令和宏操作符,宏指令与过程的区别。
◆重复汇编:掌握REPEAT、FOR、FORC等。
◆条件汇编:掌握常用的条件汇编伪指令IFXX、IFDEF等。
◆模块间的通信:掌握PUBLIC、EXTERN伪指令。
7.第七章输入/输出与中断
考核知识点:基本概念、主机与外部设备的信息传递方式;中断、DMA传送方式。
考核要求:
◆掌握利用DOS、BIOS中断进行输入/输出程序设计;
◆了解利用查询方式和中断方式实现输入/输出程序设计。
8.其他
9.实验章节
考核知识点:掌握DEBUG 的基本命令及其功能,汇编语言程序的调试与运行,循环程序,子程序,
考核要求:
◆掌握DEBUG的主要命令
◆掌握调试与运行的过程
三、样题如下,供参考:
1.考试时间:120分钟。
2.考试方式、分制与分数解释
采用闭卷、笔试的方式,以百分制评分,满分为100分。
3.题型比例(参考)
一选择题20
二填空题15
三判断题10
四简答题15
五程序改错10
六补充程序10
七按照题目要求写程序20
4.样题与目标定位示例
A.单选题:(着重考查学生对知识的识别程度)
例:在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是( C )。
A、 CX=0且ZF=0
B、 CX=0且ZF=1
C、 CX=0或ZF=0
D、 CX=0或ZF=1
B.填空题:(着重考查学生对知识的理解程度)
例:任何变量都有段地址、偏移地址、类型三种属性。
C.简答题:(着重考查学生对知识的理解与掌握程度)
例:什么叫寻址方式?常用的寻址方式有哪些?
答:寻址方式是指寻找指令中操作数所在地址的方法。常用的寻址方式有立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,变址寻址,基址加变址、隐含寻址等。
D.改错题:(着重考查学生对知识的理解与掌握程度)
例:MOV AX, 30H[SI][DI]
源操作数寻址方式中[SI][DI]的搭配是不正确的
E.写出完成指定操作的指令(着重考查学生对知识的理解与掌握程度)例:将字节量数据11H送入用BX和DI的基址变址寻址的主存单元。
MOV BYTE PTR [BX][DI], 11H
F.程序阅读分析题:(着重考查学生对知识的理解与掌握程度)
例1:分析下面程序段,
MOV AL,200
SAR AL,1
MOV BL,AL
MOV CL,2
SAR AL,CL
ADD AL,BL
试问程序段执行后(BL)=100 ;(AL)=125 。
例2: MOV AL , 0FH ;(AL)=0FH
MOV BL , 10H ;(AL)=10H
CALL SUB1
INC AL ;(AL)=11H
DEC BL ;(BL)=1EH
……
……
SUB1 PROC
ADD AL , BL ;(AL)=1FH,(BL)=10H
XCHG AL , BL ;(AL)=10H,(BL)=1FH
RET
SUB1 ENDP
执行结果:(AL)= 11H ,(BL)= 1EH
G.编程题:(着重考查学生对知识的掌握与学会程度)
例1:编写一程序,计算 x2 + 3y - 5 多项式的值.
说明:·多项式结果存于Z单元中,x,y 是无符号数。
·数据说明:x DB 0CH
y DB 06H
Z DW ?
参考答案:
DATA SEGMENT
X DB 0CH
Y DB 06H
Z DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
XOR AX,AX
MOV AL , x
MOV BL , x
MUL BL
XOR CL , CL
XOR BH,BH
MOV BL , Y
MOV CL,BL
SHL BL,1
ADD BL,CL
ADD AX , BX
SUB AX , 5
MOV Z,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
例2、设在DAT单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,请用直接查表法编写一个子程序,在SQRTAB中查找出DAT单元中数据对应的平方值送SQR单元。并写出主程序的调用方式。
数据段如下:
DATA SEGMENT
DAT DB XXH
SQRTAB DB 0,1,4,9, (81)
SQR DB ?
DATA ENDS
参考程序:
DATA SEGMENT
DAT DB XXH
SQRTAB DB 0,1,4,9,…,81
SQR DB ?
DATA EMDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
┇
CALL SUBROT
┇
MOV AH,4CH
INT 21H
SUBROT PROC
PUSH AX
PUSH BX
LEA BX,SQRTAB
MOV AL,DAT
TEST AL,80H
JNS NEXT
NEG AL
NEXT: XLAT SQRTAB
MOV SQR,AL
POP BX
POP AX
RET
SUBROT ENDP
CODE ENDS
END START
1.下面的程序段有错吗?若有,请指出错误。 CRAY PROC
PUSH AX
ADD AX,BX
RET
ENDP CRAY
程序最后一行有错,应写成:
CRAY ENDP
2. 已知(DS)=3000H,(SS)=2500H,(BX)=0100H,(BP)=0040H,
指令MOV AX,DS:[BP] 源操作数的物理地址是()。B
A.25040H B. 30040H C.25100H D. 55040H
3.下列传送指令中,有语法错误的指令是()。A
A.MOV CS,AX B. MOV DS,AX
C. MOV ES,AX
D. MOV SS,AX
4. 下述程序段完成计算2~20之间的偶数的和,并存于AX中。试把空白处填上适当的指令。
CXTK
XOR AX,AX
MOV BX,0
___________________
CONT: ADD AX,BX
__________________
LOOP CONT
MOV CX,10或MOV CX,0AH
ADD BX,2
5. 下面程序段是判断寄存器AH和AL中第3位是相同,如相同,AH置0,否则AH置全1。试把空白处填上适当指令。
_____________________
AND AH,08H
_____________________
MOV AH,OFFH
JMP NEXT
ZERO:MOV AH,0
NEXT:…
(1)XOR AH,AL
(2)JE ZERO
6. 以BUF为首址的字节单元中,存放了COUNT个无符号数,下面程序段是找出其中最大数并送入MAX单元中。
BUF DB 5,6,7,58H,62,45H,127,……
COUNT EQU $-BUF
MAX DB?
┇
MOV BX,OFFSET BUF
MOV CX,COUNT-1
MOV AL,[BX]
LOP1:INC BX
_____________________
JAE NEXT
MOV AL,[BX]
NEXT:DEC CX
_____________________
MOV MAX,AL
(1)CMP AL,[BX]
(2)JNZ LOP1
1. 当程序顺序执行时,每取一条指令语句,IP指针增加的值是()。 D
A.1 B.2
C.3 D.由指令长度决定的
2. 若AX=349DH,CX=000FH。则执行指令AND AX,CX后,AX的值是()
000DH
3.下面指令执行后,改变AL寄存器内容的指令是( )。 D
A、TEST AL,02H
B、OR AL,AL
C、CMP AL,BL
D、AND AL,BL
4. MOV SP,3210H PUSH AX 执行上述指令序列后,SP寄存器的值是
( )。320EH
5. 已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在()中。
寻址方式是()。
6. 下面指令序列执行后完成的运算,正确的算术表达式应是()。2X-1
MOV AL,BYTE PTR X
SHL AL,1
DEC AL
MOV BYTE PTR Y,AL
7.数据段定义如下:
X1 DB 10H,50,1
X2 DW 10H,20,3
X3 DD ?
COUNT EQU X3-X1
变量COUNT的值是()。9
8.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是() C A.指令XOR AX,AX执行后,AX内容不变,但设置了标志位
B.指令OR DX,1000H执行后,将DX最高位置1,其余各位置0
C.指令AND AX,OFH执行后,分离出AL低四位
D.NOT AX,执行后,将AX清
9. STRING DB ‘ABCDEFGHIJ'
:
MOV AH,01 ;从键盘输入字符1~9
INT 21H
AND AL,0FH
DEC AL
XOR AH,AH
MOV BX,OFFSET STRING
ADD BX,AX
MOV BL,[BX]
MOV AH,02H ;显示输出
INT 21H
上述程序段的功能是什么?
如从键盘输入字符‘4',程序段有什么结果?D
10.下面的数据传送指令中,错误的操作是()。D
(A)MOV SS:[BX+DI],1000H (B) MOV DX,1000H
(C)MOV WORD PTR[BX],1000H (D) MOV DS,2000H