《汇编语言》上课笔记.docx
- 文档编号:27133498
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:92
- 大小:87.47KB
《汇编语言》上课笔记.docx
《《汇编语言》上课笔记.docx》由会员分享,可在线阅读,更多相关《《汇编语言》上课笔记.docx(92页珍藏版)》请在冰豆网上搜索。
《汇编语言》上课笔记
《汇编语言》
曹永忠
信息工程学院
2007/7/17
第一章预备知识
一、教学基本内容
1、了解机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,正确认识学习汇编语言的重要性。
2、掌握8086处理器中各寄存器的符号表示形式、大小及主要用途。
3、理解主存的编址方式以及存储器物理地址形成的方式。
4、理解8086处理器关于使用堆栈的有关规定,掌握堆栈操作指令的功能以及使用格式。
5、掌握数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式。
6、掌握标志寄存器中各标志位的置位方式。
重点:
主存的编址方式以及存储器物理地址形成的方式
难点:
堆栈的概念及使用。
二、知识点:
1、机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,要求达到“识记”层次。
2、8086处理器中各寄存器的符号表示形式、大小及主要用途,要求达到“识记”层次。
3、主存的编址方式以及存储器物理地址形成的方式,要求达到“理解”层次。
4、堆栈的概念及堆栈操作指令执行后内存及相关寄存器值的变化,要求达到“理解”层次。
5、数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式,要求达到“理解”层次。
6、标志寄存器中各标志位的置位方式,要求达到“识记”层次;运算对各标志位的影响,要求达到“掌握”层次。
1.1机器语言和汇编语言
1、机器语言
●三种语言的层次关系
机器语言
汇编语言
高级语言
●机器指令:
指挥计算机完成某一基本操作的命令。
格式:
操作码地址码1地址码2
例:
将偏移地址为100的字存储单元中的内容加2,在回送到原存储单元中去的机器指令如下:
8306640002
其中8306H为操作码
6400H为目的操作数
02H为源操作数
●指令系统:
机器指令面向机器,每台计算机都规定了自己所特有的一定数量的基本指令,这批指令的全体即为该计算机的指令系统
●机器语言:
这种机器指令的集合。
●机器语言程序:
用机器语言编写的程序。
2、汇编语言
ADDWORDPTRDS:
[100],2
●汇编语言:
用助记符表示机器指令的操作码;
用变量代替操作数的存放地址;
在指令前冠以标号,用来代表指令的存放地址
●汇编语言与机器语言
汇编程序
目标程序(机器语言)
汇编源程序
注:
汇编程序:
能够将汇编源程序翻译成目标程序(机器语言)
●汇编语言的特点:
①所占空间、执行速度与机器语言相仿
② 直接、简捷,能充分控制计算机的硬件功能
1.2Intel8086微处理器简介
通用寄存器:
AX(累加器)
BX(基址寄存器)
CX(计数器)
DX(数据寄存器) ;可以分8位使用。
指针及变址寄存器:
SP(堆栈指针寄存器)
BP(基址指针寄存器)
SI(源变址寄存器)
DI(目的变址寄存器)
IP(指令指针寄存器):
用来存放下一条要执行指令在内存中代码段中的偏移地址。
1.3主存储器和堆栈
1、主存储器
●主存的基本存储单位是位(bit),它能容纳一个二进制数的0或1
●字节编址:
以字节为最小寻址单位。
●8086的最大寻址空间1M
●字的存放形式“低位在前,高位在后”
00000H
00200H
00201H
00202H
FFFFFH
56H
34H
12H
00200H起 取一个字得 3412H
00201H起 取一个字得 5634H
●“对准字”和“不对准字”
2、堆栈
在内存中开辟出一片存储区,采用一端固定,另一端活动的方式存取数据。
堆栈的图示:
栈顶 SP:
指向最后存入的数据的单元
栈底
●进栈指令 PUSH
格式:
PUSHOPS
SP
12H
34H
SP
功能:
将寄存器、段寄存器或存储器中的一个字数据压入堆栈。
(SP)-2SP
例:
假设(SP)=1000H(AX)=1234H
PUSHAX
(SP)=0FFEH
注:
PUSHAL;错误
PUSH0003H;错误
●出栈指令 POP
格式:
POPOPD
功能:
将栈顶元素(字)弹出送至寄存器、段寄存器(CS除外)或存储器中。
(SP)+2SP
例:
设 (BX)=2004H
POPBX
执行后:
(BX)=1234H(SP)=1000H
注:
PUSHCS;正确
POPCS;错误
3、存储器的分段管理
●地址表示的一对矛盾:
直接寻址能力为1M(字节);
而寄存器是16位结构的。
●解决方法:
引入了存储器“分段”的概念,即把1M字节内存空间分成若干段。
每段最大可达64K字节--可由16位寄存器进行寻址。
段的起始地址成为“段基址”,要访问的单元距段基址的距离(字节数)为“偏移量”(Offset)。
段
程序设计时,使用的是逻辑地址。
逻辑地址由“段基址”和“偏移量”构成(均为16位)。
“段基址”由段寄存器CS、DS、SS和ES提供;“偏移量”由BX、BP、IP、SP、SI、DI或根据寻址方式计算出的有效地址EA(EffectiveAddress)提供。
●注意:
①每个存储单元有唯一的物理地址,但它却可由不同的“段基址”和“偏移量”组成。
例如:
1200H:
0345H12345H1100H:
1345H12345H
②除非专门指定,一般情况下,段在存储器中的分配是由操作系统负责的。
例1:
设(CS)=8000H(IP)=0100H
问下一条要执行的指令的物理地址PA?
(CS)内容左移4位+(IP)
PA=80000H+0100H=80100H
例2:
设(DS)=1000H该数据段中偏移量为0200H处的物理地址PA?
(DS)内容左移4位+偏移量
PA=10000H+0200H=10200H
例3:
设(SS)=1000H(SP)=2000H问该堆栈段栈顶的的物理地址PA?
(SS)内容左移4位+(SP)
PA=10000H+2000H=12000H
1.4数值数据在机器内的表示形式
8086的两个规定:
1数值数据均指无符号定点数
2有符号数则一律采用n位二进制补码表示。
例1:
设M=14=0EH
[M]补=0EH
0
1
1
1
0
0
0
0
机器内:
扩展成16位后:
[M]补=000EH
机器内:
1
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
例2:
设M=-14=-0EH
[M]补=0F2H
0
机器内:
扩展成16位后:
[M]补=0FFF2H
机器内:
0
注:
最高位(符号位)向左扩展若干位后,仍是该数的补码。
●8086中,16位补码的表示范围:
7FFFH~~8000H
注:
机器在进行算术运算时,总是把参加运算的用补码表示的操作数作为无符号数处理。
1.5字符数据在机器内的表示形式
1、ASCII码(美国信息标准交换码)
●字符数据是以ASCII码形式存放在内存中的。
例如“1”就是31H
“A”就是41H
2、BCD码
定义:
利用二进制形式来表示十进制数。
利用4位二进制数(0000B~1001B)来表示十进制数(0~9)
例如:
19=00011001BCD
=000010011B
●压缩BCD(组合BCD)一个字节存放两个十进制数位
例如19
1
非压缩BCD(非组合BCD)一个字节存放一个十进制数位
例如19
1
注:
这种情况下,高四位全零;
低位在前,高位在后。
15
1.6标志寄存器
1、状态标志:
表示前面的操作执行后,算术逻辑部件处于怎样一种状态。
例如,是否产生了进位,是否发生了溢出等等。
程序中,可以通过对某个状态标志的测决
定后面的走向及操作。
例如:
STATE:
INAL,0DAH;
TESTAL,02H;
JZSTATE
●零标志ZF(ZeroFlag):
若运算结果为0,则ZF=1;否则ZF=0。
例1:
MOVAL,4
SUBAL,4
例2:
XORAX,AX
执行后,ZF也一定为1。
●进位标志CF(CarryFlag):
它反映:
加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。
减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。
例如:
MOVAL,3;
SUBAL,4;
执行后,CF=1。
●奇偶标志PF(ParityFlag):
若运算结果低8位中“1”的个数为偶数,则PF=1;否则PF=0。
例:
MOVAL,2
ADDAL,1
执行后,PF位为1。
●辅助进位标志AF(AuxiliarycarrryFlag):
也称“半进位标志”,它反映:
加法时,第3位向第4位有进位;
减法时,第3位向第4位有借位。
●溢出标志OF(OverflowFlag):
若运算过程中发生了“溢出”,则OF=1。
定义:
运算结果超出计算装置所能表示的范围,称为溢出。
判断方法之一【逻辑】:
溢出=最高位进位⊕次高位进位
例:
分析执行下述两条指令后,以上六个标志位的变化。
MOVBL,58H
ADDBL,4AH
解:
01011000B
+01001010B
10100010B
CF=0SF=1OF=1PF=1ZF=0AF=1
2、控制标志(3位):
每一位控制标志都对一种特定的功能起控制作用。
可以通过专门的指令对其进行“置位”(Set)或“复位”(Reset)。
●中断标志IF(InterruptEnableFlag):
如果IF置“1”,则CPU可以接受可屏蔽中断请求;反之,则CPU不能接受可屏蔽中断请求。
指令系统中有两条专门的指令可以置“1”或置“0”IF标志位:
STI使IF置“1”,即开放中断。
CLI使IF清“0”,即关闭中断
●方向标志DF(DirectionFlag):
用于串操作指令中的地址增量修改(DF=0)还是减量修改(DF=1)。
STD
CLD
●跟踪标志TF(TrapFlag):
若TF=1,则CPU按跟踪方式(单步方式)执行程序。
4、标志位寄存器的操作
●传送
LAHF
功能:
将标志位寄存器的低8位送入AH中,即:
(FLAGS)7~0AH
例:
执行前(FLAGS)=0485H(AX)=0FFFFH
执行后(FLAGS)=0485H(AX)=85FFH
SAHF
功能:
将AH的内容送入标志位寄存器的低8位中,即:
AH(FLAGS)7~0
●栈操作
PUSHF
POPF
例:
MOVAX,0FFFFH
PUSHAX
POPF
结果:
(FLAGS)=0FFFFH
1.7常用指令简介
源操作数
目的操作数
操作码
MOVAX,BX
功能:
将BX中的内容放到AX中
其他指令:
ADDAX,100
SUBAX,100
INCAX
DECBX
第二章、寻址方式
教学目的与要求
熟练掌握六种寻址方式(立即方式、直接方式、寄存器方式、寄存器间接方式、变址万式基址加变址方式〕的汇编格式、功能及使用方法。
教学内容
1、寻址方式的基本概念。
2、六种寻址方式的汇编格式、功能及使用方法。
3、寻址方式的应用。
考核知识点与考核要求
六种寻址方式的汇编格式、功能及使用方法,比较各种寻址方式的应用场合,要求达到“掌握”层次。
所谓寻址方式:
就是寻找操作数存放地址的方式。
2.1立即寻址(Immediateaddressing)
指令中直接给出操作数,操作数紧跟在操作码之后,作为指令的一部分存放在代码段里,在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。
例:
MOVAL,80H
MOVAX,306AH
●立即数可以为8位,也可以为16位。
如果是16位数,则“高位字节存放在高地址中,
低位字节存放在低地址中。
”
●立即寻址方式常用于给寄存器赋值,并且只能用于源操作数,而不能用于目的操作数
2.2寄存器寻址(Registeraddressing)
操作数在寄存器中,指令中指明寄存器号,这种寻址方式叫寄存器寻址。
●对于8位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL
●对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP和BP
例:
MOVAL,BL
INCBX
(1)操作数就在寄存器中,不需要访问存储器来取得操作数(指令执行时,操
作就在CPU的内部进行),因而执行速度快。
(2)寄存器号比内存地址短
*在编程中,如有可能,尽量使用这种寻址方式的指令。
*寄存器寻址方式既可用于源操作数,也可用于目的操作数,还可以两者都用于寄存器寻址方式(如MOVBX,AX)
2.3直接寻址(DirectAddressing)
●在讨论寻址方式时,通常把操作数的偏移地址称为有效地址EA(EffectiveAddress),EA可通过不同的寻址方式来得到。
●在直接寻址方式中,指令中直接给出操作数的有效地址,或者说,有效地址EA就在指令中。
它(操作数的有效地址,而不是操作数本身)存放在代码段中指令的操作码之后,但操作数一般存放在数据段中。
例1MOVAX,ds:
[2000H];ds:
跨段前缀
如(DS)=3000H,则PA=3000H*16d+2000H
例2MOVAX,BUFA;BUFA为一变量名,这时可以不加跨段前缀,默认为DS
例3下面是运用跨段前缀的一些语句:
MOVAX,ES:
[1000H]
MOVBX,SS:
[0100H]
2.3寄存器间接寻址(RegisterindirectAddressing)
●采用寄存器间接寻址方式时,指令中给出寄存器号(寄存器为BX,BP,SI和DI之一),
被指定的寄存器中存放着操作数的有效地址,操作数在存储器中
●以寄存器的内容为操作数的有效地址
●格式:
[R]
●只有下面四个寄存器:
[BX]……..对应段寄存器为DS
[BP]……..…………………SS
[SI]…………………………..DS
[DI]………………………….DS
例:
MOVAX,[BX];
设(DS)=2000H,(BX)=1000H
物理地址PA=20000H+1000H=21000H
21000H
BX
数据段
5AH
30H
指令的执行结果为:
(AX)=5A30H
指令中也可以通过“段跨越前缀”取得其他段中的数据.
例:
MOVAX,ES:
[BX]
2.4变址寻址(IndexedAddressing)
●操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和。
●格式:
[R+X]或X[R][X+R]
●若没有段跨越前缀,则对于寄存器BX,SI,DI的情况,段寄存器为DS;
而对于寄存器为BP的情况,则段寄存器为SS.
例:
MOVAX,[SI+3000H]
设(DS)=4000H,(SI)=2000H
则物理地址PA=40000H+2000H+3000H
45000H
AX
30
数据段
代码段
12H
34H
00
OP
OP
=45000H
2.5基址变址寻址(Basedindexedaddressing)
●操作数的有效地址是一个基址寄存器和一个变址寄存器内容以及位移量X三者之和,两个寄存器均由指令指定。
●格式:
[BR+IR+X]或X[BR+IR]X[BR][IR]
X为8位或16位二进制补码表示的有符号数
BR基址寄存器可以选用BX,BP,它们“决定”段
IR变址寄存器可以选用SI,DI
例如:
MOVAX,8[BX+SI]
MOVBX,-6[BP+DI]
综合举例:
例1:
指出下列指令中源操作数的寻址方式:
MOVAX,02FH
MOVBX,[SI]
MOVCX,[BX+SI+2]
MOVDX,DS:
[1000H]
MOVSI,BX
例2:
指出下列指令的错误:
MOVBX,[AX]//AX不能寄存器间接寻址
MOVBX,DS[SI]//不能使用DS
MOV[CX],2//两个操作数类型都不明确
MOV[SI+DI],AX//不能同时用两个变址寄存器
MOVAX,[2000H]
第三章、宏汇编语言
教学目的与要求
1、了解常量、变量与标号在汇编语言中的属性和定义形式,应使学生熟练使用数值表达式和地址表达式。
2、掌握数据传送指令、算术逻辑运算指令的语句格式及功能。
3、了解伪指令和机器指令的区别,掌握数据定义伪指令和符号定义伪指令的格式及功能。
4、理解假定伪指令ASSUME的功能和使用方法,以及汇编地址计数器$的作用。
5、熟练掌握1号、2号、9号、10号系统功能调用的格式要求及功能。
教学内容
1、数值表达式和地址表达式。
2、数据传送指令、算术逻辑运算指令。
3、伪指令。
4、DOS系统功能调用。
考核知识点与考核要求
1、常量、变量与标号在汇编语言中的属性和定义形式,数值表达式和地址表达式的使用,要求达到“掌握”层次。
2、数据传送指令、算术逻辑运算指令的语句格式及功能。
要求达到“掌握”层次。
3、伪指令的语句格式及功能,要求达到“掌握”层次。
4、DOS系统功能调用的机理,要求达到“掌握”层次。
3.0一个简单的汇编语言源程序
两数求和程序如下:
DSEGSEGMENT‘DATA’
DATA1DB15H
SUMDB00H
DSEGENDS
CSEGSEGMENT‘CODE’
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAL,DATA1
ADDAL,12H
MOVSUM,AL
HLT
CSEGENDS
ENDSTART
观察程序的结构,猜测各语句的作用。
3.1汇编语言中的表达式
一、常量与数值表达式
1、常量:
在将汇编源程序翻译成目标程序期间已经有确定的数值的量。
●分类:
数值常量,符号常量
●数值常量的表示方法
二进制常量:
010101110B010101110b
八进制常量:
12537O45Q
十进制常量:
42981289D
十六进制常量:
0ABC2H
字符常量‘123ABC’“STUDY”
●标识符的格式
1标识符的第一个字符必须是字母、问号?
、@或下划线__四者之一;
2从第二个字符开始可以是字母、问号?
、@、下划线__或数字;
3一个标识符的长度可以有131个字符
例:
下列标识符定义正确的是()
A)3DATAB)DATA_3C)DATA3D)DATA.3
●符号常量定义的方法
1EQU
AAEQU50
②=
BB=100
例:
MOVAX,BB
则等价于MOVAX,100
2、数值表达式:
对常量的运算
●算术运算+-*/MODSHRSHL
例:
CCEQU11111111B
表达式CCSHR3;等价于00011111B
●逻辑运算ANDORXOR(按位加)NOT
例:
789AHXOR000FH;等价于7895H
●关系运算EQNELTGTLEGE
注意:
关系运算表达式的结果:
真0FFFFH
假0
例:
NUM=50
NUMNE100;等价于0FFFFH
MOVAX,NUMEQ100;(AX)=0
二、变量、标号与地址表达式
1、变量:
数据存储单元的名字
●变量的段属性
●变量的偏移量属性
●变量的类型属性:
字节,字,双字,4字,10个字节
2、变量的定义
在数据段或附加段中用数据定义伪指令DB、DW、DD、DQ、DT
格式:
[变量名]数据定义伪指令表达式[,……]
例如:
x1DB08H
BUFDW01H,02H,03H,04H
●表达式的几种形式:
1数值表达式
2ASCII码字符串(只有用DB定义变量时,才允许字符串长度超过2个字符)
例:
BUF1DB‘HELLO’;等价于BUFDB‘H’,’E’,’L’,’L’,’O’
BUF2DB‘AB’
BUF3DW‘AB’
3地址表达式(只适用DW、DD两条伪指令)
例:
BUF1DB‘HELLO’
SA_BUFDWBUF1
LA_BUFDDBUF1
④?
例:
SUMDW?
⑤重复子句
格式为:
NDUP(表达式)
例:
NDB3DUP(01H,02H)
MDB2DUP(2,2DUP(2,’2’))
综合举例1:
书P41图3。
1
综合举例2:
设有BUF1DB01H,02H,03H,04H
问执行MOVAL,BUF1后,AL中的内容?
要想将以上定义的03H取入AL,如何改上面指令?
3、在指令中如何使用变量
●直接寻址方式从变量中存取操作数时,定义该变量的段必须是当前段
●类型要匹配
例:
MOVAX,BUF1这条指令就是错误的。
类型匹配的原则:
1单操作数指令,操作数类型必须明确;
2双操作数指令,两明确类型的操作数必须匹配;
3双操作数指令,一个类型明确,一个类型模糊时,以明确的那个操作数为准。
例:
MOVAX,BL;错误
MOV[SI],200;错误
INC[SI];错误
MOVAX,[SI];正确
MOVAL,[SI];正确
4、标号(出现在代码段中)
标号:
机器指令语句存放地址的符号表示,也可以是过程名。
例:
XMOV:
MOVAL,[SI]
MOV[DI],AL
●标号的段属性
●标号的偏移量属性
●标号的类型属性:
NEAR(只能在标号定义的段内使用)
FAR
5、地址表达式
结果:
段内偏移地址
例:
BUF1DB‘HELLO’
MOVAL,BUF1;(AL)=’H’
MOVAL,BUF1+4;(AL)=’O’
●在地址表达式中的几个特殊的算符
1类型运算符PTR
格式:
类型PTR地址表达式
注:
这里的类型可以是BYT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 上课 笔记