汇编语言程序设计实践教程课件.pptx

上传人:牧羊曲112 文档编号:3962895 上传时间:2023-03-29 格式:PPTX 页数:301 大小:876.30KB
返回 下载 相关 举报
汇编语言程序设计实践教程课件.pptx_第1页
第1页 / 共301页
汇编语言程序设计实践教程课件.pptx_第2页
第2页 / 共301页
汇编语言程序设计实践教程课件.pptx_第3页
第3页 / 共301页
汇编语言程序设计实践教程课件.pptx_第4页
第4页 / 共301页
汇编语言程序设计实践教程课件.pptx_第5页
第5页 / 共301页
点击查看更多>>
资源描述

《汇编语言程序设计实践教程课件.pptx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实践教程课件.pptx(301页珍藏版)》请在三一办公上搜索。

1、1,教材:汇编语言程序设计实践教程 欢迎提意见!汇编语言程序设计 丁辉 电子工业出版社,后续课程:微机接口技术及实验,是微机原理与接口技术及实验的一部分,汇编语言程序设计实践教程,汇编语言asm2005,2,目录,第一章 汇编语言程序设计基础第二章 汇编语言程序设计入门第三章 算术运算程序第四章 代码转换程序第五章 系统调用程序第六章 表处理程序第七章 子程序及其与主程序参数传递,3,1、重要性2、特点3、学习方法4、考核要求,引言,4,1、重要性,专业基础课:电类、工科、理科有助于微机应用水平提高计算机等级考试:三级PC机技术研究生入学考试,5,2、特点,A,B,C,概念间关系:网状,理解困

2、难,内容多:汇编语言、微机原理、接口技术,6,3、学习方法,理解与记忆:尽快适应预习与复习:学习效率实验与习题:针对强教与学,教:难点、要点目的:让学生少走弯路,提高效率学是关键,敢问!会问!,7,4、考核要求,笔试:期末:50%笔试内容充分结合实验内容!实验:预习、操作、报告,30%平时:作业、考勤、态度、提问:20%作业、实验报告必须手写!,8,第一章 汇编语言程序设计基础,1.1 二进制数和十六进制数1.2 无符号数和带符号数1.3 微机基本原理1.4 8086CPU1.5 DEBUG操作(一)1.6 判断标志位实验1.7 计算机中的十进制数及其运算原理1.8 BCD码运算实验,9,1.

3、1 二进制数和十六进制数,日常生活:十进制、十二进制、六十进制计算机:二进制、十六进制,n位整数m位小数:Xn-1Xn-2Xn-3X2X1X0X-1X-2X-m+1X-m数学意义:X=Xn-1En-1Xn-2En-2Xn-3En-3 X2E2X1EX0 X-1E-1X-2E-2.X-m+1E-m+1X-mE-m(0XiE-1)E=10、16、2、,10,1.1.1 二进制数,计算中:8位、16位、32位、64位、例:1010 0101B,1001,0011,1111,0000B 书写时,每4位用空格或逗号分隔;但源程序中不能!,加:1011 1001+0111 1001 10011 0010,

4、减:1011 1001-0111 0110 0100 0011不够减问题?,11,被乘数左移法 10111001 01111001 10111001 10111001 10111001 10111001+10111001 0101011101110001,二进制数乘法运算,12,二进制数除法运算,除数右移法 0000000100110100100110101011100101011010-10011010 11111010-10011010 11000001-10011010 10011110-10011010 010010,加减乘除人工计算方法硬件方法编程方法有小数点?,13,1.1.2 十

5、六进制数,源程序中采用,实际上也是二进制4位二进制=1位十六进制,09、AF例:0ABH=1010 1011B,0=0000B 8=1000B1=0001B 9=1001B2=0010B A=1010B3=0011B B=1011B4=0100B C=1100B5=0101B D=1101B6=0110B E=1110B7=0111B F=1111B必须熟记!,加减:参照二/十进制 列竖式 乘除:转换为二进制 用二进制运算 转换为十六进制,14,1.1.3 十进制与二/十六进制转换,十进制二进制整数部分:除2取余法(已知X求Xn-1,X2X1X0)小数部分:乘2取整法(已知X求X-1X-2X1

6、-mX-m),十进制十六进制:1、先二进制,再十六进制2、整数部分:除16取余法 小数部分:乘16取整法,二进制/十六进制十进制:(已知Xn-1,X2X1X0 X-1X-2X1-mX-m求X)整数小数部分:按幂展开,15,十进制转二进制举例,整数:除2取余100 500=B0 250=B1 121=B2 60=B3 30=B4 11=B5 01=B6100=0110 0100B,小数:乘2取整 0.568B-1=1.136B-2=0.272B-3=0.544B-4=1.088B-5=0.176B-6=0.352B-7=0.704B-8=1.4080.568=0.1001 0001B可能无法完全

7、精确转换,16,1.2 无符号数和带符号数,计算机中同一个数可表示不同的实际值同一个实际值在计算机中有不同形式表示机器数:计算机中的二进制,十六进制真值:机器数所表示的实际数值,十进制,机器数:无符号数、带符号数带符号数:原码、反码、补码属于定点数,整数是定点数的特例计算机中数的表示和计算还有浮点数,17,1.2.1 无符号数,8位、16位、32位、,每位都是数值位8位:0000 0000B1111 1111B 0 25516位:0000H0FFFFH 0 65535,18,1.2.2 带符号数、原码,8位、16位、32位、,最高位是符号位,0=正,1=负其余每位都是数值位原码:低7位是表示绝

8、对值1111 1111B 0FFH-1271000 0000B 80H-00000 0000B 00H+00111 1111B 7FH+127,19,反码,正数:与原码相同;负数:对应正数的原码每位取反1000 0000B 80H-1271111 1111B 0FFH-00000 0000B 00H+00111 1111B 7FH+127,20,补码,正数:与原码相同;负数:对应正数的原码每位取反+1,(反码+1)1000 0000B 80H-1281111 1111B 0FFH-10000 0000B 00H 00111 1111B 7FH+127,21,8位机器数与真值关系图,00H,7F

9、H,80H,FFH,真值,机器数,-128,127,255,-1,-127,无原反补,无,原,补,反,0,128,模:28,22,1.2.3 真值与机器数转换,人工计算:真值转换为机器数;机器转换为真值。从机器数的定义分析,分三种情况讨论:1.无符号数与真值的转换2.正数真值与原码、反码、补码转换3.负数真值与原码、反码、补码转换,23,1.无符号数与真值转换,真值无符号机器数:除2取余法,不足的位数补0例:2001100 1000B0C8H无符号机器数真值:按幂展开,例:1101 0000B(0D0H)128+64+16=208,24,2.正数真值与原反补转换,与无符号差别仅最高位必须=0,

10、转换方法与无符号数的方法相同。正数真值原、反、补码机器数:除2取余法,结果最高位必须为0!例:1200111 1000B78H原、反、补码机器数真值:按幂展开,例:0110 1010B(6AH)64+32+8+2=106,25,3.负数真值与原反补转换,真值机器数:先转为原码反码补码。负数真值原码:将绝对值除2取余,最高位写1负数真值反码:原码数值位取反,符号位不变负数真值补码:在反码最低位上加1例:-1201111 1000B1000 0111B1000 1000B机器数真值:机器数的最高位为1原码真值:数值位按幂展开,加负号反码真值:数值位每位取反后按幂展开,加负号补码真值:数值位取反加1

11、,按幂展开,加负号对任意二进制数B,等式/(B-1)=/B+1成立.例:C8-72(原码)-56(反码)-57(补码),26,1.2.4 机器数和真值关系,同一个真值有不同的机器数表示:,同一个机器数可以表示不同的真值:,27,1.2.5 为什么用补码,1.减法转换为加法:A-B=A+(-B)2.更重要的原因是:带符号数和无符号数的加减运算规则相同,可简化CPU硬件。,求补码:真值转换为机器数,正数:十进制转为二进制 负数:对应正数的二进制取反加1求补:取反加1;正转为负,负转为正对任意二进制数B:0-B=2n-B=/(B-1)=/B1,28,1.3 微机基本原理,微机基本组成结构指令执行过程

12、,29,1.3.1 微机基本结构框图,CPU,存储器,I/O接口,I/O设备,AB地址总线,数据总线 DB,控制总线 CB,三条总线连接三大部件,AB位数决定存储容量,DB位数决定一次传送数据位数控制总线主要有:M/IO、/RD(读)、/WR(写),数字电子计算机,30,1.3.2 指令执行过程,冯诺依曼型计算机:存储程序计算机,一条指令的执行过程分4个步骤:取指、取数、译码操作(运算)、存数指令的执行时间问题,程序装入主存,运行,控制权交回系统。,高级语言程序由有序排列的语句组成;汇编语言程序由有序排列的指令组成。程序的运行过程就是指令执行的重复过程,31,取指、取数过程,AB送出地址;CB

13、送出M/IO、/RD;存储器从DB送 机器码或数据;CPU从DB上读入。,CPU,存储器,I/O接口,AB,DB,CB,32,存数过程,I/O接口的操作:输入、输出原理与存储器读、写相同,AB送出地址;DB送出数据;CB送出M/IO、/WR;存储器从DB读入数据,CPU,存储器,I/O接口,AB,DB,CB,33,1.4 8086CPU,CPU是微机的核心,最关键的部件。重点掌握:与汇编语言编程密切相关的内容内部寄存器及其用法标志寄存器,34,1.4.1 微处理器概述,8位:8080、8085、8088Intel 80 x86系列:向上兼容16位:8086、(80186)、8028632位:8

14、0386、80486、Pentium、,微控制器(单片机)控制应用 MCS51、PIC 8位为主DSP芯片 信号处理 TMS320 16位为主嵌入式微处理器 移动设备 ARM 32位为主通用微处理器 台式微机 Z80、80X86 32位为主,CPU微处理器,应用不同有4个分支:,35,1.4.2 8086内部结构,寄存器组,段寄存器指令指针,总线控制逻辑,指令队列,总线接口单元BIU,执行单元EU,标志寄存器,ALU,外部总线,内部总线,地址加法器,控制单元,20位地址,16位数据,元件级、门电路级、框图级,前后联系理解!,36,1.4.3 8086寄存器,AX 累加器 Accumulator

15、,BX 基址寄存器 Base,CX 计数寄存器 Count,DX 数据寄存器 Data,源变址寄存器 Source Index,目的变址寄存器 Destination Index,基址指针 Base Pointer,堆栈指针 Stack Pointer,代码段寄存器 Code Segment,数据段寄存器 Data Segment,堆栈段寄存器 Stack Segment,扩展段寄存器 Extra Segment,指令指针 Instruction Pointer,标志寄存器,数据寄存器,变址,指针,通用寄存器,段寄存器,32位:EAXEBXECXEDXESIEDIEBPESPEIPEFLAGS

16、段寄存器FSGS,16位8位 8位,PC程序计数器,控制寄存器,37,1.4.4 标志寄存器,1,0,条件标志:6个,在运算器中控制标志:3个,控制电路中,IF:中断允许标志,CPU可屏蔽中断用DF:方向标志,串操作指令用TF:跟踪(单步、陷井)标志,调试程序用,在调试软件DEBUG中用2个字母表示,38,条件标志(1),PF:奇偶标志,用于传送数据时的校验 计算结果的低8位1的个数为偶数,则PF=1 否则,PF=0,ZF:零标志,用于减运算时判断相等 逻辑运算时判断全0 计算结果为0,则ZF=1;不为0,则ZF=0,AF:辅助进位/借位标志,用于BCD码计算 加运算时D3位向D4位有进位 或

17、减运算时D3位向D4位有借位,则AF=1 否则AF=0,39,条件标志(2),CF:进位/借位标志,用于无符号数加/减运算,多字节运算的进位/借位传递 计算时最高位有进位/借位,则CF=1 否则CF=0,SF:符号标志,用于带符号数运算 计算结束为负则SF=1,为正则SF=0,OF:溢出标志,用于带符号数运算 计算结果超出带符号数的表示范围,则OF=1 否则OF=08位:-128127;16位:-3276832767,CF,CF,40,标志位判断举例(加),1111,0100+1111,0100-1,1110,1000,-12+)-12-24,244+244-488=232+256,PF=1,

18、ZF=0,AF=0,CF=1,SF=1,OF=0,1110,1000=-24,1110,1000=232,CPU运算:,分析:带符号:无符号:,带符号数的符号位也当成数值位参加计算!,41,标志位判断举例(减),1111,0100-0000,1100-0,1110,1000,-12-)+12-24,244-12-232,PF=1,ZF=0,AF=1,CF=0,SF=1,OF=0,1110,1000=-24,1110,1000=232,CPU运算:,分析:带符号:无符号:,特别注意区别CF和OF!,42,CF、OF判断举例,CF=0,SF=1,OF=1,1110,1000=-24,1110,10

19、00=232,CPU运算:,0111,0100+0111,0100-0,1110,1000,+116+)+116-+232,116+116-232,分析:带符号:无符号:,计算机中无符号数和带符号数的运算问题,43,理解机器数运算问题,标志位是加减计算结果的一部分无符号数运算看CF,带符号数运算看SF、OF编程者知道是带符号数还是无符号数CPU不知道是带符号数还是无符号数两种情况要各算一遍,提供结果给编程者按前例的分析,带符号数若用补码表示,实际上只算一遍,硬件只有一套这是带符号数用补码表示的根本原因!,44,1.4.5 判断OF三方法,OF标志最复杂、最重要,理解带符号及其计算。(难点)三种

20、方法,等效人工判断、计算机判断以加法为例,减法同理可推,45,1.按OF定义判断,被加数、加数转为真值后相加,再用真值的和判断。-128127;-3276832767这是人工的方法,计算机中不可能用!前面3个例子都是用了这种方法缺点:计算过程麻烦,容易出错,46,2.按符号位判断,被加数、加数的符号、和的符号:正+正=正:OF=0;正+正=负:OF=1负+负=负:OF=0;负+负=正:OF=1 正+负=正,负:OF=0前面的例子用这种方法判断结果一样这是人工的方法,看似繁琐,实际最简单计算机中也可用,但硬件不够简化!,47,OF的数学意义,000H,40H 64,80H-128,-64 C0H

21、,7FH127,-1FFH,机器数:00H40H7FH80HC0HFFH00H 0 64 127-128-64-1 0,左半圆正数,右半圆负数。因为ALU位数有限,计算机8位+8位=8位两个数相加实际上:从一个点顺时针走到另一个点。,48,最高位、次高位的进位:都有或都没有进位,则OF=0一个有一个没有,OF=1前面的例子用这种方法判断结果一样关键是理解符号位的特殊性是CPU中硬件采用的方法,人工也可采用。也可转化为双符号位法。,1,1111,0100+1,1111,0100 1,1110,1000,3.按最高次高位进位判断,49,1.4.6 标志位小结,人工判断标志位是为了掌握其原理,程序运

22、行时标志位是由硬件自动判断的,编程的任务是根据这些标志位做不同的处理。充分利用标志位编出高水平算法是汇编语言程序设计的重要技巧。不同CPU标志位不同,但原理完全相同!标志位是一切逻辑推理的基础!现代CPU增加了很多控制标志位,但条件标志位数量没增加,没有新的概念和原理,50,1.5 DEBUG操作(一),系统的内部命令,不必复制或安装。主要功能:显示修改寄存器值,显示修改内存单元内容单步运行程序,断点运行程序显示程序,修改部分指令命令:一个字母,后跟参数P18表1.8通过实验熟练掌握!,51,1.6 判断标志位实验,预习:人工计算和判断标志位;用ADD AL,BL,8位加,标志位;用SUB A

23、L,BL,8位减,标志位。16位加减,判断CF、SF、OF思考题前3题必做。,52,1.7 BCD码及计算,计算机只能用二进制对十进制:十进制二进制,计算后十进制有否更简单的方法表示和计算十进制数?计算机如何表示十进制数?BCD码计算机如何计算十进制数?计算后调整,53,1.7.1 BCD码,二进制编码的十进制数 真值98压缩型 1001 1000B=98H非压缩型 0000 1001 0000 1000B=0908H比较:用无/带符号二进制表示=62H机器数98H表示的真值:无符号数152,带符号(补码)数-104压缩型BCD码98,0=0000B1=0001B2=0010B3=0011B4

24、=0100B5=0101B6=0110B7=0111B8=1000B9=1001BP3表1.2,54,1.7.2 BCD码的运算,加:先按二进制加(ADD),再调整(DAA、AAA)减:先按二进制减(SUB),再调整(DAS、AAS)乘:先按二进制乘(MUL),再调整(AAM)除:先调整(AAD),再按二进制除(DIV)调整指令共有6条,见P23表1.12分别与相应的二进制运算指令配合,两条指令执行的总效果是:对BCD码运算,得的结果也是BCD码.,55,BCD码加举例,DAA 压缩型BCD码加调整AAA 非压缩型BCD码加调整跟在以AL为目的的ADD/ADC指令之后AL=45H,BL=67H

25、;必须是压缩型BCD码ADD AL,BL;AL=0ACH,CF=0,AF=0DAA;AL=12H,CF=1,AF=1AL=05H,BL=05H;必须是非压缩型BCD码ADD AL,BL;AL=0AH,CF=0,AF=0AAA;AL=00H,CF=1,AF=1,56,BCD码减举例,DAS 压缩型BCD码减调整AAS 非压缩型BCD码减调整跟在以AL为目的的SUB/SBB指令之后AL=47H,BL=65H;必须是压缩型BCD码SUB AL,BL;AL=0E2H,CF=1,AF=0DAS;AL=82H,CF=1,AF=0AL=05H,BL=09H;必须是非压缩型BCD码SUB AL,BL;AL=0

26、FCH,CF=1,AF=1AAS;AL=06H,CF=1,AF=1,57,BCD码乘除举例,AAM 非压缩型BCD码乘调整,跟在8位MUL之后AAD 非压缩型BCD码除调整,放在16位除8位的DIV指令之前AL=05H,BL=09H;必须是非压缩型BCD码MUL BL;AH=00H,AL=2DHAAM;AH=04H,AL=05HAH=05H,AL=02H,BL=06H;必须是非压缩型BCD码AAD;AH=00H,AL=34HDIV BL;AL=08H,AH=04H,58,1.8 BCD码运算实验,预习:人工计算,DAA、AAM、AAD用ADD AL,BL,DAA,二进制加,BCD码加用MUL

27、BL,AAM,二进制乘,BCD码乘用AAD,DIV BL,BCD码除AAA、DAS、AAS的验证思考题:带符号BCD码?,59,第二章 汇编语言程序设计入门,2.1 寻址方式2.2 数据传送指令2.3 汇编语言源程序结构2.4 汇编语言程序上机过程2.5 指令错误分析及寻址方式实验,60,2.1 寻址方式,指令由操作码和操作数两部分组成,寻址方式:如何指定操作数 ADD AL,BX,操作数组合三种情况:双操作数、单操作数、无操作数(隐含)双:目的操作数,源操作数,操作数存放的三个位置:CPU中、存储器中、I/0接口中,两种性质的操作数:用来运算的数据、转移的目的地址,61,2.1.1 隐含寻址

28、,指令只有操作码,没指定操作数,根据操作码就可以确定相应的操作数.例:BCD码运算调整指令,乘法、除法指令的其中一个操作数,62,2.1.2 立即寻址,指令中直接给操作数,立即(数)寻址用data表示,8位或16位例:ADD AL,50H ADD AL,CNT;CNT是符号常量执行过程不需取数的时间只能用在源操作数,63,2.1.3 寄存器寻址,指令中给出寄存器名称,其内容是操作数用reg表示,AX,BX,CX,DX,SI,DI,BP,SP AH,AL,BH,BL,CH,CL,DH,DL例:ADD AL,BL机器码中寄存器编号用3位编码,字或字节用1位编码。,64,2.1.4 段寄存器寻址,指

29、令中给出段寄存器名称,其内容是操作数用segreg表示,DS、ES、SS、CS例:MOV DS,AX机器码中段寄存器编号用2位编码,只有MOV,PUSH,POP指令可用此寻址方式,65,2.1.5 I/O端口寻址,操作数在I/O接口电路中,仅IN,OUT指令直接I/O端口寻址:用port表示,8位间接I/O端口寻址:用DX表示,16位例:IN AL,50H;50H不是立即寻址!OUT DX,AL;DX不是寄存器寻址!端口=存储单元,端口号=存储单元地址,66,2.1.6 转移地址寻址,转移类指令中用直接转移:用标号直接指定目的地址间接转移:用寄存器/内存内容指定目的地址段内:目的地址与转移指令

30、在同一段中段间:目的地址与转移指令不在同一段中例:JMP NEXT;NEXT是一个标号 JMP BX;BX的内容是目的地址,67,2.1.7 存储器操作数寻址,操作数在存储器中,指令中指定其地址是用得最多,最灵活的一种寻址方式物理地址20位,逻辑地址16位物理地址=段地址10H+偏移地址例:16661H=1234H10H+4321H用mem表示偏移地址,BX,BP,SI,DI,方括号段地址固定搭配,DS,SS(,ES,CS)段首址=段地址10H,能被16整除,12340H+4321H 16661H,实地址模式保护模式虚拟86模式,68,1.直接寻址,用变量名指定操作数的地址例:ADD AL,X

31、val;方括号可省略Xval是变量名,注意与立即寻址的区别!ADD AL,20H,20H会被汇编成立即数段地址固定搭配DS,偏移地址也称为有效地址EA物理地址=DS10H+EA DS:EA,69,2.寄存器间接寻址,用一16位寄存器指定操作数地址BX、SI、DI、BP之一BX、SI、DI搭配DS;BP搭配SSDS:BX/SI/DI,或SS:BP例:ADD AL,BP ADD SI,AX,70,3.寄存器相对寻址,一16位寄存器加位移量指定操作数地址BX、SI、DI、BP之一;位移量为8位或16位带符号数,D8、D16。BX、SI、DI搭配DS;BP搭配SS例:ADD AL,BP+5若用SI、D

32、I也称为变址寻址;若用BX、BP也称为基址寻址。,71,4.基址变址寻址,基址寄存器加变址寄存器指定操作数地址基址:BX、BP之一;变址:SI、DI之一BX搭配DS;BP搭配SSDS:BX+SI/DI,SS:BP+SI/DI例:ADD AL,BP+SI,72,5.相对基址变址寻址,基址加变址加位移量指定操作数地址基址:BX、BP之一;变址:SI、DI之一位移量为8位或16位带符号数,D8、D16。BX搭配DS;BP搭配SSDS:BX+SI/DI+D8/D16SS:BP+SI/DI+D8/D16例:ADD AL,BP+SI-5,73,6.存储器操作数使用,共5种,物理地址由地址加法器自动计算段替

33、换,例:DS:BP、ES:BX多字节:低地址低字节,高地址高字节最低字节的地址就是多字节数的地址规则字:从偶地址开始存放,一个总线周期非规则字:从奇地址开始存放,两个总线周期数组操作:首地址,前一元素、后一元素等效写法:BUF+BX+SI、BUFBXSI BUFBX+SI双操作数不能同为存储器操作数寻址方式越复杂,则执行时间越长,74,2.2 数据传送指令,每条指令都要了解六个方面的内容:,掌握:1、基本功能用途2、寻址方式组合3、对标志位影响,有影响无影响不确定,一般了解:4、执行时间5、字节数6、机器码格式,指令系统分六大类指令:,1、数据传送2、算术运算3、逻辑运算和移位,4、程序流程控

34、制5、串操作6、CPU控制,75,2.2.1 通用数据传送指令,MOV dst,src;复制:目的源 合法寻址方式组合分为四种情况:reg/mem,data reg,mem mem,reg reg,reg segreg,reg/mem reg/mem,segreg其它双操作数与这4种组合比较,使用最频繁指令data不能为目的字节/字类型必须匹配MOV BYTE PTRBX,20HCS不能为目的IP源目的都不行,76,2.2.2 交换指令,XCHG dst,src;dstsrc,操作数组合:MOV指令4种中的两种,即:reg,memmem,regreg,reg,77,2.2.3 堆栈操作指令,堆

35、栈:FILO(先进后出)的存储区域入栈:PUSH src;SPSP-2,SS:SPsrc出栈:POP dst;dstSS:SP,SPSP+2 src、dst=reg16、mem16、segreg,(POP CS除外),78,堆栈操作举例,设:SS=5430HSP=0020HAX=1234HBX=5678H执行:PUSH AX PUSH BX POP AX POP BX结果:AX=5678H BX=1234H,顶,底,SP=20H,SP=1EH,SP=1CH,79,2.2.4 查表指令,也称为换码指令,表格最大256字节XLAT;AL DS:BX+ALXLAT src_tablesrc_tabl

36、e是表格首地址的变量名,可省略缺省段寄存器是DS,可以段替换特殊的寻址方式,或隐含寻址累加器专用指令,80,2.2.5 输入输出指令,累加专用指令唯一能对I/O接口中操作数操作的指令与MOV指令原理一样,81,2.2.6 地址传送指令,1、有效地址传送指令 LEA reg16,mem;reg16 mem的偏移地址例:LEA BX,Xval等效于MOV BX,offset Xval LEA SI,BX+DI;SI BX+DI,2、地址指针传送指令 LDS reg16,mem32;reg16 mem32 DS mem32+2 LES reg16,mem32;reg16 mem32 ES mem32

37、+2,82,2.2.7 标志位传送指令,隐含寻址,唯一对FLAGS操作的指令取标志:LAHF;AH FLAGS低8位置标志:SAHF;FLAGS低8位AH标志入栈:PUSHF;SPSP-2,SS:SPFLAGS标志出栈:POPF;FLAGSSS:SP,SPSP+2,83,2.2.8 数据传送指令对标志位的影响,POPF、SAHF对标志位有影响其余数据传送指令均对标志位无影响,理解数据传送指令与总线信号关系:M/IO、/RD、/WRMOV AL,BX;M,/RDMOV BX,AL;M,/WRIN AL,DX;IO,/RD OUT DX,AL;IO,/WR,84,2.3 汇编语言源程序结构,分段结

38、构伪指令段名标号宏名,DATA SEGMENT 定义变量DATA ENDSEXTRA SEGMENT 定义变量EXTRA ENDSSTACK SEGMENT 定义堆栈STACK ENDSMAC1 MACRO 宏定义体ENDM,CODE SEGMENTASSUME CS:CODE,DS:DATA ES:EXTRA,SS:STACKSTART:;段寄存器初始化 CALL SUB1 MAC1;宏调用 MOV AH,4CH;返回DOS INT 21HSUB1 PROC RETSUB1 ENDPCODE ENDSEND START,85,2.3.1 分段结构,一般分4个段,SEGMENT、ENDS数据段

39、、扩展段、堆栈段:定义数据代码段:ASSUME确定各段的性质 起始地址定义标号,最后END START 段寄存器赋初值,CS除外 MOV AH,4CH/INT 21H返回系统宏定义MACRO/ENDM,宏调用子程序(过程),PROC/ENDP一般放在主程序后程序的层次结构用锯齿状表示,86,2.3.2 语句格式,三种语句:指令语句:汇编时能生成机器码 伪指令语句(指示性语句):提供汇编、链接信息 宏指令语句语句格式:标号:操作码 目的操作数,源操作数;注释 变量 伪操作 操作数,操作数;注释 标号:宏指令名 实际参数;注释,87,2.3.3 变量和标号,标识符:变量、标号、符号常量、段名、过程

40、名、宏名保留字:指令操作码、伪指令操作码、寄存器名等 大小写不敏感标号只能在代码段中定义,变量可在任何段中定义变量和标号的三种属性:段地址、偏移地址、类型变量类型:BYTE、WORD、DWORD等标号类型:NEAR、FAR指令伪指令中,当变量、标号当操作数用变量汇编成直接寻址或相对寻址标号在跳转指令中用,直接寻址,88,2.3.4 操作数、表达式和操作符,操作数:寄存器、变量、标号、常量、表达式表达式:用操作符连接变量、寄存器、常量等汇编时对表达式进行计算,数值表达式:立即数、位移量、常数的位置地址表达式:存储器操作数的位置操作符:算术、逻辑、关系、分析、属性,89,操作符,算术:+、-、*、

41、/、MOD 地址常数,同一段中的地址1-地址2逻辑:NOT、AND、OR、XOR、SHR、SHL 只能对数值操作,不能对地址操作关系:EQ、NE、GT、LT、GE、LE,假=0,真=FF或FFFF 同一段中的两地址可比较,比地址不是比内容分析:SEG、OFFSET、TYPE、LENGTH、SIZE 段,偏移地址 类型*个数=总字节数 变量:1,2,4 标号:-1,-2属性:HIGH、LOW、SHORT、PTR、THIS、段操作符 高字节,低字节,短,变类型,变类型,段替换自行实验试用!以后陆续会有一些应用的例子。,90,2.3.5 常用伪指令,定义符号,也称表达值赋值伪指令:名称 EQU 表达

42、式;不可重新定义名称=表达式;可重新定义方便程序修改,使用常数、表达式意义清晰。数据定义:按地址顺序存入各段变量 伪操作符 表达式,表达式,变量 伪操作符 重复次数 DUP(表达式,)DB(字节)、DW(字)、DD(双字)、DQ(8)、DT(10)DW可定义偏移地址,DD可定义段地址和偏移地址可用?表示一个未置初值的数据,91,汇编语言程序设计方法,(1)分析问题,明确要求(2)建立数学模型(3)确定算法和处理方案(4)画流程图(5)编制程序:划分模块,分配寄存器、存储单元(6)上机调试(含汇编连接):模块调试、整体调试(7)试运行和分析结果(8)整理文档,交付使用强调:程序调试的重点性!,上

43、机,92,2.4 上机过程,1、编辑:EDIT 文件名.ASM2、汇编:MASM 文件名;用.ASM(源文件)生成.OBJ(目标文件),也可生成.LST(列表)、.CRF(交叉引用)3、连接:LINK 文件名;用.OBJ文件生成.EXE(可执行文件)也可生成.MAP(存储映象),还可使用.LIB(库文件)4、调试:DEBUG 文件名.EXE 按每个模块(子程序)的输入输出关系检查 最关键的一步,花费最多时间。,93,2.5 指令错误分析及寻址方式实验,预习:1.判断指令错误类型;2.伪指令数据分配,指令执行结果必做:1.编辑,汇编:读懂错误信息!2.完整程序,观察数据如何存储,各种寻址方式执行

44、结果。选做:1.生成并观察LST、CRF、MAP文件 2.对LEA、LDS、LES指令验证 3.验证各指令对标志位的影响情况 4.验证各种操作符思考:1.以后指令有错必须搞清,不得重犯!2.以后指令格式、功能之惑都可验证!验证也是一种学习过程!,94,寻址方式实验程序(1),DATA SEGMENT A1 DW 1234H A2 DB-1,0ABH DW-5 A3 DB 56,56H,“AB cd$”DATA ENDSEXTRA SEGMENT B1 DB 1,2,3,4 B3 EQU THIS BYTE B2 DW A2 DD A3 DB(A3-A2)/2 DB$-B1 DB LENGTH

45、BTMEXTRA ENDS,STACK SEGMENT BTM DW 16 DUP(?)STACK ENDS,95,寻址方式实验程序(2),CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,SIZE BTM,96,寻址方式实验程序(3),MOV AX,A1+3;分析:AH=_,AL=_,验证:AH=_,AL=_MOV AX,B2;分析:AH=_,AL=_,验证:AH=_,AL=_M

46、OV BP,OFFSET A1MOV AX,BP;分析:AH=_,AL=_,验证:AH=_,AL=_MOV AX,DS:BP;分析:AH=_,AL=_,验证:AH=_,AL=_MOV AX,ES:BP;分析:AH=_,AL=_,验证:AH=_,AL=_MOV BX,OFFSET A1MOV AX,BX+3;分析:AH=_,AL=_,验证:AH=_,AL=_MOV AX,ES:BX+3;分析:AH=_,AL=_,验证:AH=_,AL=_PUSH AX;分析:SP=_,SS:SP=_,验证:SP=_,SS:SP=_PUSH BX;分析:SP=_,SS:SP=_,验证:SP=_,SS:SP=_POP

47、 AX;分析:SP=_,AX=_,验证:SP=_,AX=_POP BX;分析:SP=_,BX=_,验证:SP=_,BX=_MOV BX,OFFSET B2MOV AL,6XLAT;分析:AL=_,验证:AL=_XLAT B3;分析:AL=_,验证:AL=_,97,第三章 算术运算程序(引言),程序结构:顺序、分支、循环、子程序 用:无条件跳转指令、条件跳转指令程序功能:算术运算、代码转换、系统调用、表处理、子程序参数传递编程方法:分配寄存器、存储单元,本书有丰富的实用的实例,理解、掌握编程技巧。程序调试:检查程序的正确性的过程,必不可少的一步!最重要的一步!,98,3.1 跳转指令3.2 算术

48、运算指令3.3 多字节加/减运算程序3.4 多字节加/减程序实验3.5 多字节除法运算程序3.6 多字节除法程序实验3.7 多字节乘法运算程序3.8 多字节乘法程序实验,第三章 算术运算程序(目录),加减乘除N!平方开平方二进制BCD码,99,3.1 跳转指令,实现分支结构和循环结构分:无条件跳转、条件跳转、循环控制对标志位均不影响基本功能:修改IP、CS,100,段内直接跳转:JMP near_label;IPIP+D16段内短跳转:JMP SHORT short_label;IPIP+D8段间直接跳转:JMP far_label;IP标号的偏移地址 CS标号的段地址相当于高级语言的GOTO

49、语句,3.1.1 无条件跳转指令,段内间接跳转:JMP reg16/mem16;IPreg16/mem16 例:JMP BX JMP BX段间间接跳转:JMP mem32;IPmem32、mem32+1 CSmem32+2、mem32+3,101,直接跳转指令举例,CODE SEGMENTASSUME CS:CODESTART:JMP START;短 JMP EXIT;内 JMP EXIT1 JMP SHORT EXIT JMP NEAR PTR EXIT JMP FAR PTR EXIT;间 JMP FAR PTR EXIT2EXIT:MOV AH,4CH INT 21H,ORG 200HE

50、XIT1:MOV AH,4CH INT 21HCODE ENDSCODE1 SEGMENTASSUME CS:CODE1EXIT2:MOV AH,4CH INT 21HCODE1 ENDSEND START,102,直接跳转指令机器码,如何察看偏移地址200H开始的指令及CODE1段?,103,间接跳转指令举例,段内间接跳转:设:BX=1234H,DS=1000H,(11234H)=5678H,若:执行JMP BX,则IP=1234H,即目的地址为1234H;若:执行JMP BX,则IP=5678H,即目的地址为5678H。,段间间接跳转:设:BX=1234H,DS=1000H,(11234H

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号