收藏 分销(赏)

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

上传人:快乐****生活 文档编号:4253472 上传时间:2024-08-30 格式:PPTX 页数:301 大小:876.30KB 下载积分:20 金币
下载 相关 举报
汇编语言程序设计实践教程.pptx_第1页
第1页 / 共301页
汇编语言程序设计实践教程.pptx_第2页
第2页 / 共301页


点击查看更多>>
资源描述
1教材:汇编语言程序设计实践教程汇编语言程序设计实践教程 欢迎提意见!汇编语言程序设计 丁辉 电子工业出版社后续课程:微机接口技术及实验是是微机原理与接口技术及实验微机原理与接口技术及实验的一部分的一部分汇编语言程序设计实践教程汇编语言汇编语言asm2005asm20052目录第一章 汇编语言程序设计基础第二章 汇编语言程序设计入门第三章 算术运算程序第四章 代码转换程序第五章 系统调用程序第六章 表处理程序第七章 子程序及其与主程序参数传递31、重要性2、特点3、学习方法4、考核要求引言引言41、重要性专业基础课:电类、工科、理科有助于微机应用水平提高计算机等级考试:三级PC机技术研究生入学考试52、特点ABC概念间关系:网状,理解困难内容多:汇编语言、微机原理、接口技术63、学习方法理解与记忆:尽快适应预习与复习:学习效率实验与习题:针对强教与学教:难点、要点目的:让学生少走弯路,提高效率学是关键敢问!会问!74、考核要求笔试:期末:50%笔试内容充分结合实验内容!实验:预习、操作、报告,30%平时:作业、考勤、态度、提问:20%作业、实验报告必须手写!8第一章 汇编语言程序设计基础1.1 二进制数和十六进制数1.2 无符号数和带符号数1.3 微机基本原理1.4 8086CPU1.5 DEBUG操作(一)1.6 判断标志位实验1.7 计算机中的十进制数及其运算原理1.8 BCD码运算实验91.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、101.1.1 二进制数计算中:8位、16位、32位、64位、例:1010 0101B,1001,0011,1111,0000B 书写时,每4位用空格或逗号分隔;但源程序中不能!加:1011 1001 +0111 1001 10011 0010减: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加减乘除人工计算方法硬件方法编程方法有小数点?131.1.2 十六进制数源程序中采用,实际上也是二进制4位二进制=1位十六进制,09、AF例:0ABH=1010 1011B0=0000B 8=1000B1=0001B 9=1001B2=0010B A=1010B3=0011B B=1011B4=0100B C=1100B5=0101B D=1101B6=0110B E=1110B7=0111B F=1111B必须熟记!加减:参照二/十进制 列竖式 乘除:转换为二进制 用二进制运算 转换为十六进制141.1.3 十进制与二/十六进制转换十进制二进制整数部分:除2取余法(已知X求Xn-1,X2X1X0)小数部分:乘2取整法(已知X求X-1X-2X1-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可能无法完全精确转换161.2 无符号数和带符号数计算机中同一个数可表示不同的实际值同一个实际值在计算机中有不同形式表示机器数:计算机中的二进制,十六进制真值:机器数所表示的实际数值,十进制机器数:无符号数、带符号数带符号数:原码、反码、补码属于定点数,整数是定点数的特例计算机中数的表示和计算还有浮点数171.2.1 无符号数8位、16位、32位、,每位都是数值位8位:0000 0000B1111 1111B 0 25516位:0000H0FFFFH 0 65535181.2.2 带符号数、原码8位、16位、32位、,最高位是符号位,0=正,1=负其余每位都是数值位原码:低7位是表示绝对值1111 1111B 0FFH -1271000 0000B 80H -00000 0000B 00H +00111 1111B 7FH +12719 反码正数:与原码相同;负数:对应正数的原码每位取反1000 0000B 80H -1271111 1111B 0FFH -00000 0000B 00H +00111 1111B 7FH +12720 补码正数:与原码相同;负数:对应正数的原码每位取反+1,(反码+1)1000 0000B 80H -1281111 1111B 0FFH -10000 0000B 00H 00111 1111B 7FH +12721 8位机器数与真值关系图00H7FH80HFFH真值机器数-128127255-1-127无原反补无原补反0128模:28221.2.3 真值与机器数转换人工计算:真值转换为机器数;机器转换为真值。从机器数的定义分析,分三种情况讨论:1.无符号数与真值的转换2.正数真值与原码、反码、补码转换3.负数真值与原码、反码、补码转换23 1.无符号数与真值转换真值无符号机器数:除2取余法,不足的位数补0例:2001100 1000B0C8H无符号机器数真值:按幂展开,例:1101 0000B(0D0H)128+64+16=20824 2.正数真值与原反补转换与无符号差别仅最高位必须=0,转换方法与无符号数的方法相同。正数真值原、反、补码机器数:除2取余法,结果最高位必须为0!例:1200111 1000B78H原、反、补码机器数真值:按幂展开,例:0110 1010B(6AH)64+32+8+2=10625 3.负数真值与原反补转换真值机器数:先转为原码反码补码。负数真值原码:将绝对值除2取余,最高位写1负数真值反码:原码数值位取反,符号位不变负数真值补码:在反码最低位上加1例:-1201111 1000B1000 0111B1000 1000B机器数真值:机器数的最高位为1原码真值:数值位按幂展开,加负号反码真值:数值位每位取反后按幂展开,加负号补码真值:数值位取反加1,按幂展开,加负号对任意二进制数B,等式/(B-1)=/B+1成立.例:C8-72(原码)-56(反码)-57(补码)261.2.4 机器数和真值关系真值机器数12-12无符号数0000,1100带符号数原码0000,11001000,1100反码0000,11001111,0011补码0000,11001111,0100真值机器数无符号数原码反码补码0000,1111151515151111,0001241-113-14-15同一个真值有不同的机器数表示:同一个机器数可以表示不同的真值:271.2.5 为什么用补码1.减法转换为加法:A-B=A+(-B)2.更重要的原因是:带符号数和无符号数的加减运算规则相同,可简化CPU硬件。求补码:真值转换为机器数,正数:十进制转为二进制 负数:对应正数的二进制取反加1求补:取反加1;正转为负,负转为正对任意二进制数B:0-B=2n-B=/(B-1)=/B1281.3 微机基本原理微机基本组成结构指令执行过程291.3.1 微机基本结构框图CPU存储器I/O接口I/O设备 AB地址总线数据总线 DB控制总线 CB三条总线连接三大部件AB位数决定存储容量,DB位数决定一次传送数据位数控制总线主要有:M/IO、/RD(读)、/WR(写)数字电子计算机数字电子计算机301.3.2 指令执行过程冯诺依曼型计算机:存储程序计算机一条指令的执行过程分4个步骤:取指、取数、译码操作(运算)、存数指令的执行时间问题程序装入主存,运行,控制权交回系统。高级语言程序由有序排列的语句组成;汇编语言程序由有序排列的指令组成。程序的运行过程就是指令执行的重复过程31 取指、取数过程AB送出地址;CB送出M/IO、/RD;存储器从DB送 机器码或数据;CPU从DB上读入。CPU存储器I/O接口ABDBCB32 存数过程I/O接口的操作:输入、输出原理与存储器读、写相同AB送出地址;DB送出数据;CB送出M/IO、/WR;存储器从DB读入数据CPU存储器I/O接口ABDBCB331.4 8086CPUCPU是微机的核心,最关键的部件。重点掌握:与汇编语言编程密切相关的内容内部寄存器及其用法标志寄存器341.4.1 微处理器概述8位:8080、8085、8088Intel 80 x86系列:向上兼容16位:8086、(80186)、8028632位:80386、80486、Pentium、微控制器(单片机)控制应用 MCS51、PIC 8位为主DSP芯片 信号处理 TMS320 16位为主嵌入式微处理器 移动设备 ARM 32位为主通用微处理器 台式微机 Z80、80X86 32位为主CPU微处理器,应用不同有4个分支:351.4.2 8086内部结构寄存器组段寄存器指令指针总线控制逻辑指令队列总线接口单元BIU执行单元EU标志寄存器ALU外部总线内部总线地址加法器控制单元20位地址16位数据元件级、门电路级、框图级 前后联系理解!361.4.3 8086寄存器AHALBHBLCHCLDHDLSIDIBPSPAX 累加器 AccumulatorBX 基址寄存器 BaseCX 计数寄存器 CountDX 数据寄存器 DataCSDSSSESIPFLAGS源变址寄存器 Source Index目的变址寄存器 Destination Index基址指针 Base Pointer堆栈指针 Stack Pointer代码段寄存器 Code Segment数据段寄存器 Data Segment堆栈段寄存器 Stack Segment扩展段寄存器 Extra Segment指令指针 Instruction Pointer标志寄存器数数据据寄寄存存器器变变址址指指针针通通用用寄寄存存器器段段寄寄存存器器3232位:位:EAXEAXEBXEBXECXECXEDXEDXESIESIEDIEDIEBPEBPESPESPEIPEIPEFLAGSEFLAGS段寄存器段寄存器FSFSGSGS 1616位位8 8位位 8 8位位PCPC程序计数器程序计数器控控制制寄寄存存器器371.4.4 标志寄存器151211109876543210OFDFIFTFSFZFAFPFCFOV DNEING ZRACPECYNVUPDIPLNZNCPONC10条件标志:6个,在运算器中控制标志:3个,控制电路中IF:中断允许标志,CPU可屏蔽中断用DF:方向标志,串操作指令用TF:跟踪(单步、陷井)标志,调试程序用在调试软件DEBUG中用2个字母表示38 条件标志(1)PF:奇偶标志,用于传送数据时的校验 计算结果的低8位1的个数为偶数,则PF=1 否则,PF=0ZF:零标志,用于减运算时判断相等 逻辑运算时判断全0 计算结果为0,则ZF=1;不为0,则ZF=0AF:辅助进位/借位标志,用于BCD码计算 加运算时D3位向D4位有进位 或减运算时D3位向D4位有借位,则AF=1 否则AF=039 条件标志(2)CF:进位/借位标志,用于无符号数加/减运算,多字节运算的进位/借位传递 计算时最高位有进位/借位,则CF=1 否则CF=0SF:符号标志,用于带符号数运算 计算结束为负则SF=1,为正则SF=0OF:溢出标志,用于带符号数运算 计算结果超出带符号数的表示范围,则OF=1 否则OF=08位:-128127;16位:-3276832767CFCF40 标志位判断举例(加)1111,0100+1111,0100-1,1110,1000 -12+)-12-24 244+244-488=232+256PF=1,ZF=0,AF=0CF=1,SF=1,OF=01110,1000=-241110,1000=232CPU运算:分析:带符号:无符号:带符号数的符号位也当成数值位参加计算!41 标志位判断举例(减)1111,0100-0000,1100-0,1110,1000 -12-)+12-24 244-12-232PF=1,ZF=0,AF=1CF=0,SF=1,OF=01110,1000=-241110,1000=232CPU运算:分析:带符号:无符号:特别注意区别CF和OF!42 CF、OF判断举例CF=0,SF=1,OF=11110,1000=-241110,1000=232CPU运算:0111,0100+0111,0100-0,1110,1000 +116+)+116-+232 116+116-232分析:带符号:无符号:计算机中无符号数和带符号数的运算问题43 理解机器数运算问题标志位是加减计算结果的一部分无符号数运算看CF,带符号数运算看SF、OF编程者知道是带符号数还是无符号数CPU不知道是带符号数还是无符号数两种情况要各算一遍,提供结果给编程者按前例的分析,带符号数若用补码表示,实际上只算一遍,硬件只有一套这是带符号数用补码表示的根本原因!441.4.5 判断OF三方法OF标志最复杂、最重要,理解带符号及其计算。(难点)三种方法,等效人工判断、计算机判断以加法为例,减法同理可推45 1.按OF定义判断被加数、加数转为真值后相加,再用真值的和判断。-128127;-3276832767这是人工的方法,计算机中不可能用!前面3个例子都是用了这种方法缺点:计算过程麻烦,容易出错46 2.按符号位判断被加数、加数的符号、和的符号:正+正=正:OF=0;正+正=负:OF=1负+负=负:OF=0;负+负=正:OF=1 正+负=正,负:OF=0前面的例子用这种方法判断结果一样这是人工的方法,看似繁琐,实际最简单计算机中也可用,但硬件不够简化!47 OF的数学意义 000H40H 6480H-128-64 C0H7FH127-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.按最高次高位进位判断491.4.6 标志位小结人工判断标志位是为了掌握其原理,程序运行时标志位是由硬件自动判断的,编程的任务是根据这些标志位做不同的处理。充分利用标志位编出高水平算法是汇编语言程序设计的重要技巧。不同CPU标志位不同,但原理完全相同!标志位是一切逻辑推理的基础!现代CPU增加了很多控制标志位,但条件标志位数量没增加,没有新的概念和原理501.5 DEBUG操作(一)系统的内部命令,不必复制或安装。主要功能:显示修改寄存器值,显示修改内存单元内容单步运行程序,断点运行程序显示程序,修改部分指令命令:一个字母,后跟参数P18表1.8通过实验熟练掌握!511.6 判断标志位实验预习:人工计算和判断标志位;用ADD AL,BL,8位加,标志位;用SUB AL,BL,8位减,标志位。16位加减,判断CF、SF、OF思考题前3题必做。521.7 BCD码及计算计算机只能用二进制对十进制:十进制二进制,计算后十进制有否更简单的方法表示和计算十进制数?计算机如何表示十进制数?BCD码计算机如何计算十进制数?计算后调整531.7.1 BCD码二进制编码的十进制数 真值98压缩型 1001 1000B=98H非压缩型 0000 1001 0000 1000B =0908H比较:用无/带符号二进制表示=62H机器数98H表示的真值:无符号数152,带符号(补码)数-104压缩型BCD码980=0000B1=0001B2=0010B3=0011B4=0100B5=0101B6=0110B7=0111B8=1000B9=1001BP3表1.2541.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;必须是压缩型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=156 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=0FCH,CF=1,AF=1AAS ;AL=06H,CF=1,AF=157 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=04H581.8 BCD码运算实验预习:人工计算,DAA、AAM、AAD用ADD AL,BL,DAA,二进制加,BCD码加用MUL BL,AAM,二进制乘,BCD码乘用AAD,DIV BL,BCD码除AAA、DAS、AAS的验证思考题:带符号BCD码?59第二章 汇编语言程序设计入门2.1 寻址方式2.2 数据传送指令2.3 汇编语言源程序结构2.4 汇编语言程序上机过程2.5 指令错误分析及寻址方式实验602.1 寻址方式 指令由操作码和操作数两部分组成寻址方式:如何指定操作数 ADD AL,BX操作数组合三种情况:双操作数、单操作数、无操作数(隐含)双:目的操作数,源操作数操作数存放的三个位置:CPU中、存储器中、I/0接口中两种性质的操作数:用来运算的数据、转移的目的地址612.1.1 隐含寻址指令只有操作码,没指定操作数,根据操作码就可以确定相应的操作数.例:BCD码运算调整指令,乘法、除法指令的其中一个操作数622.1.2 立即寻址指令中直接给操作数,立即(数)寻址用data表示,8位或16位例:ADD AL,50H ADD AL,CNT ;CNT是符号常量执行过程不需取数的时间只能用在源操作数632.1.3 寄存器寻址指令中给出寄存器名称,其内容是操作数用reg表示,AX,BX,CX,DX,SI,DI,BP,SP AH,AL,BH,BL,CH,CL,DH,DL例:ADD AL,BL机器码中寄存器编号用3位编码,字或字节用1位编码。642.1.4 段寄存器寻址指令中给出段寄存器名称,其内容是操作数用segreg表示,DS、ES、SS、CS例:MOV DS,AX机器码中段寄存器编号用2位编码,只有MOV,PUSH,POP指令可用此寻址方式652.1.5 I/O端口寻址操作数在I/O接口电路中,仅IN,OUT指令直接I/O端口寻址:用port表示,8位间接I/O端口寻址:用DX表示,16位例:IN AL,50H ;50H不是立即寻址!OUT DX,AL;DX不是寄存器寻址!端口=存储单元,端口号=存储单元地址662.1.6 转移地址寻址转移类指令中用直接转移:用标号直接指定目的地址间接转移:用寄存器/内存内容指定目的地址段内:目的地址与转移指令在同一段中段间:目的地址与转移指令不在同一段中例:JMP NEXT ;NEXT是一个标号 JMP BX ;BX的内容是目的地址672.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,Xval;方括号可省略Xval是变量名,注意与立即寻址的区别!ADD AL,20H,20H会被汇编成立即数段地址固定搭配DS,偏移地址也称为有效地址EA物理地址=DS10H+EA DS:EA69 2.寄存器间接寻址用一16位寄存器指定操作数地址BX、SI、DI、BP之一BX、SI、DI搭配DS;BP搭配SSDS:BX/SI/DI,或SS:BP例:ADD AL,BP ADD SI,AX70 3.寄存器相对寻址一16位寄存器加位移量指定操作数地址BX、SI、DI、BP之一;位移量为8位或16位带符号数,D8、D16。BX、SI、DI搭配DS;BP搭配SS例:ADD AL,BP+5若用SI、DI也称为变址寻址;若用BX、BP也称为基址寻址。71 4.基址变址寻址基址寄存器加变址寄存器指定操作数地址基址:BX、BP之一;变址:SI、DI之一BX搭配DS;BP搭配SSDS:BX+SI/DI,SS:BP+SI/DI例:ADD AL,BP+SI72 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-573 6.存储器操作数使用共5种,物理地址由地址加法器自动计算段替换,例:DS:BP、ES:BX多字节:低地址低字节,高地址高字节最低字节的地址就是多字节数的地址规则字:从偶地址开始存放,一个总线周期非规则字:从奇地址开始存放,两个总线周期数组操作:首地址,前一元素、后一元素等效写法:BUF+BX+SI、BUFBXSI BUFBX+SI双操作数不能同为存储器操作数寻址方式越复杂,则执行时间越长742.2 数据传送指令每条指令都要了解六个方面的内容:掌握:1、基本功能用途2、寻址方式组合3、对标志位影响有影响无影响不确定一般了解:4、执行时间5、字节数6、机器码格式指令系统分六大类指令:1、数据传送2、算术运算3、逻辑运算和移位4、程序流程控制5、串操作6、CPU控制752.2.1 通用数据传送指令MOV dst,src;复制:目的源 合法寻址方式组合分为四种情况:reg/mem,data reg,mem mem,reg reg,reg segreg,reg/mem reg/mem,segreg其它双操作数与这4种组合比较使用最频繁指令使用最频繁指令datadata不能为目的不能为目的字节字节/字类型必须匹配字类型必须匹配MOV BYTE PTRBX,20HMOV BYTE PTRBX,20HCSCS不能为目的不能为目的IPIP源目的都不行源目的都不行762.2.2 交换指令XCHG dst,src;dstsrc,操作数组合:MOV指令4种中的两种,即:reg,memmem,regreg,reg772.2.3 堆栈操作指令堆栈:FILO(先进后出)的存储区域入栈:PUSH src;SPSP-2,SS:SPsrc出栈:POP dst;dstSS:SP,SPSP+2 src、dst=reg16、mem16、segreg,(POP CS除外)78 堆栈操作举例54300H54300H5431CH5431CH 78H5431DH5431DH 56H5431EH5431EH 34H5431FH5431FH 12H54320H54320H 设:SS=5430HSP=0020HAX=1234HBX=5678H执行:PUSH AX PUSH BX POP AX POP BX结果:AX=5678H BX=1234H顶底SP=20HSP=1EHSP=1CH792.2.4 查表指令也称为换码指令,表格最大256字节XLAT ;AL DS:BX+ALXLAT src_tablesrc_table是表格首地址的变量名,可省略缺省段寄存器是DS,可以段替换特殊的寻址方式,或隐含寻址累加器专用指令802.2.5 输入输出指令输入输出直接间接直接间接字节IN AL,port IN AL,DXOUT port,AL OUT DX,AL字IN AX,port IN AX,DX OUT port,AX OUT DX,AX累加专用指令唯一能对I/O接口中操作数操作的指令与MOV指令原理一样812.2.6 地址传送指令1、有效地址传送指令 LEA reg16,mem;reg16 mem的偏移地址例:LEA BX,Xval等效于MOV BX,offset Xval LEA SI,BX+DI;SI BX+DI2、地址指针传送指令 LDS reg16,mem32;reg16 mem32 DS mem32+2 LES reg16,mem32;reg16 mem32 ES mem32+2822.2.7 标志位传送指令隐含寻址,唯一对FLAGS操作的指令取标志:LAHF ;AH FLAGS低8位置标志:SAHF ;FLAGS低8位AH标志入栈:PUSHF;SPSP-2,SS:SPFLAGS标志出栈:POPF ;FLAGSSS:SP,SPSP+2832.2.8 数据传送指令对标志位的影响POPF、SAHF对标志位有影响其余数据传送指令均对标志位无影响理解数据传送指令与总线信号关系:M/IO、/RD、/WRMOV AL,BX;M,/RDMOV BX,AL;M,/WRIN AL,DX;IO,/RD OUT DX,AL;IO,/WR842.3 汇编语言源程序结构分段结构伪指令段名标号宏名DATA SEGMENT 定义变量DATA ENDSEXTRA SEGMENT 定义变量EXTRA ENDSSTACK SEGMENT 定义堆栈STACK ENDSMAC1 MACRO 宏定义体ENDMCODE SEGMENTASSUME CS:CODE,DS:DATA ES:EXTRA,SS:STACKSTART:;段寄存器初始化段寄存器初始化 CALL SUB1 MAC1 ;宏调用宏调用 MOV AH,4CH;返回返回DOSDOS INT 21HSUB1 PROC RETSUB1 ENDPCODE ENDSEND START852.3.1 分段结构一般分4个段,SEGMENT、ENDS数据段、扩展段、堆栈段:定义数据代码段:ASSUME确定各段的性质 起始地址定义标号,最后END START 段寄存器赋初值,CS除外 MOV AH,4CH/INT 21H返回系统宏定义MACRO/ENDM,宏调用子程序(过程),PROC/ENDP一般放在主程序后程序的层次结构用锯齿状表示862.3.2 语句格式三种语句:指令语句:汇编时能生成机器码 伪指令语句(指示性语句):提供汇编、链接信息 宏指令语句语句格式:标号:操作码 目的操作数,源操作数;注释 变量 伪操作 操作数,操作数;注释 标号:宏指令名 实际参数;注释872.3.3 变量和标号标识符:变量、标号、符号常量、段名、过程名、宏名保留字:指令操作码、伪指令操作码、寄存器名等 大小写不敏感标号只能在代码段中定义,变量可在任何段中定义变量和标号的三种属性:段地址、偏移地址、类型变量类型:BYTE、WORD、DWORD等标号类型:NEAR、FAR指令伪指令中,当变量、标号当操作数用变量汇编成直接寻址或相对寻址标号在跳转指令中用,直接寻址882.3.4 操作数、表达式和操作符操作数:寄存器、变量、标号、常量、表达式表达式:用操作符连接变量、寄存器、常量等汇编时对表达式进行计算,数值表达式:立即数、位移量、常数的位置地址表达式:存储器操作数的位置操作符:算术、逻辑、关系、分析、属性89 操作符算术:+、-、*、/、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、段操作符 高字节,低字节,短,变类型,变类型,段替换自行实验试用!以后陆续会有一些应用的例子。902.3.5 常用伪指令定义符号,也称表达值赋值伪指令:名称 EQU 表达式 ;不可重新定义名称=表达式 ;可重新定义方便程序修改,使用常数、表达式意义清晰。数据定义:按地址顺序存入各段变量 伪操作符 表达式,表达式,变量 伪操作符 重复次数 DUP(表达式,)DB(字节)、DW(字)、DD(双字)、DQ(8)、DT(10)DW可定义偏移地址,DD可定义段地址和偏移地址可用?表示一个未置初值的数据91汇编语言程序设计方法(1)分析问题,明确要求(2)建立数学模型(3)确定算法和处理方案(4)画流程图(5)编制程序:划分模块,分配寄存器、存储单元(6)上机调试(含汇编连接):模块调试、整体调试(7)试运行和分析结果(8)整理文档,交付使用强调:程序调试的重点性!上机922.4 上机过程1、编辑:EDIT 文件名.ASM2、汇编:MASM 文件名;用用.ASM(.ASM(源文件源文件)生成生成.OBJ(.OBJ(目标文件目标文件),也可生成也可生成.LST(.LST(列表列表)、.CRF(.CRF(交叉引用交叉引用)3、连接:LINK 文件名;用用.OBJ.OBJ文件生成文件生成.EXE(.EXE(可执行文件可执行文件)也可生成也可生成.MAP(.MAP(存储映象存储映象),还可使用还可使用.LIB(.LIB(库文件库文件)4、调试:DEBUG 文件名.EXE 按每个模块(子程序)的输入输出关系检查 最关键的一步,花费最多时间。932.5 指令错误分析及寻址方式实验预习:1.判断指令错误类型;2.伪指令数据分配,指令执行结果必做:1.编辑,汇编:读懂错误信息!2.完整程序,观察数据如何存储,各种寻址方式执行结果。选做: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 BTMEXTRA ENDSSTACK SEGMENT BTM DW 16 DUP(?)STACK ENDS95 寻址方式实验程序(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 BTM96 寻址方式实验程序(3)MOV AX,A1+3 ;分析:AH=_,AL=_,验证:AH=_,AL=_MOV AX,B2 ;分析:AH=_,AL=_,验证:AH=_,AL=_MOV 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 AX ;分析:SP=_,AX=_,验证:SP=_,AX=_POP BX ;分析:SP=_,BX=_,验证:SP=_,BX=_MOV BX,OFFSET B2MOV AL,6XLAT ;分析:AL=_,验证:AL=_XLAT B3 ;分析:AL=_,验证:AL=_97第三章 算术运算程序(引言)程序结构:顺序、分支、循环、子程序 用:无条件跳转指令、条件跳转指令程序功能:算术运算、代码转换、系统调用、表处理、子程序参数传递编程方法:分配寄存器、存储单元,本书有丰富的实用的实例,理解、掌握编程技巧。程序调试:检查程序的正确性的过程,必不可少的一步!最重要的一步!983.1 跳转指令3.2 算术运算指令3.3 多字节加/减运算程序3.4 多字节加/减程序实验3.5 多字节除法运算程序3.6 多字节除法程序实验3.7 多字节乘法运算程序3.8 多字节乘法程序实验第三章 算术运算程序(目录)加减乘除N!平方开平方二进制BCD码993.1 跳转指令实现分支结构和循环结构分:无条件跳转、条件跳转、循环控制对标志位均不影响基本功能:修改IP、CS100段内直接跳转:JMP near_label ;IPIP+D16段内短跳转:JMP SHORT short_label;IPIP+D8段间直接跳转:JMP far_label;IP标号的偏移地址 CS标号的段地址相当于高级语言的GOTO语句3.1.1 无条件跳转指令段内间接跳转:JMP reg16/mem16 ;IPreg16/mem16 例:JMP BXJMP BX JMP BX JMP BX段间间接跳转:JMP mem32 ;IPmem32、mem32+1 CSmem32+2、mem32+3101 直接跳转指令举例CODE SEGMENTASSUME CS:CODESTART:JMP START ;短 JMP EXIT ;内 JMP EXIT1 JMP SHORT EXIT JMP NEAR PTR E
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服