汇编语言及其程序设计.ppt课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《汇编语言及其程序设计.ppt课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 及其 程序设计 ppt 课件
- 资源描述:
-
1、第六章 汇编语言及其程序设计1谢谢观赏2019-8-23主要内容n汇编程序及其开发过程n指令格式及寻址方式n8086汇编语言的基本语法n顺序、分支、循环结构程序设计n子程序设计2谢谢观赏2019-8-23汇编语言程序及开发过程n基本概念n汇编语言:是一种面向机器的程序设计语言,它是机器语言的符号化描述。n特点:代码短、空间省、效率高n汇编语言源程序:用汇编语言编写的程序n目标程序:汇编语言经翻译程序翻译成的代码程序(即机器语言的程序)。n汇编程序:把源程序转变为相应目标程序的翻译程序3谢谢观赏2019-8-23n宏汇编:不仅包含一般汇编语言的功能,而且采用了高级语言使用的数据结构,是一种接近高
2、级语言的汇编语言。n汇编语言程序的开发过程n编写源程序:EDIT(DOS),TextPad(Windows)n将源程序保存为 XXXX.asm 文件n使用MASM生成目标程序 XXXX.OBJn使用LINK生成可执行程序 XXXX.EXE4谢谢观赏2019-8-23源程序XXXX.asm目标程序XXXX.obj可执行程序XXXX.exe设计编辑用MASM汇编用LINK连接执行使用汇编语言的过程5谢谢观赏2019-8-23n基本汇编语言程序实例(1) DATA SEGMENT(2) String DB 程序设计,”$”(3) DATA ENDS(4) CODE SEGMENT(5) ASSUME
3、 CS:CODE,DS:DATA,SS:STACK(6) START: MOV AX,DATA(7) MOV DS,AX(8) MOV DX,OFFSET String(9) MOV AH,9(10) INT 21H(11) MOV AX,4C00H (12) INT 21H(13) CODE ENDS(14) STACK SEGMENT STACK(15) DB 256 DUP(?)(16) STACK ENDS(17) END STARTAH = 9功能:显示字符串DS:DX = 串地址字符串以“$”结尾AH = 4C功能:带返回码终止AL = 返回码6谢谢观赏2019-8-23n汇编语言
4、程序 的开发过程开 始结 束用编辑工具编辑源程序源程序 XXXX.asm用MASM进行汇编有语法错误?YN目标文件 XXXX.obj用LINK连接有错误?YN执行可执行文件XXXX.exe正确?NY用DEBUG调试7谢谢观赏2019-8-23n结构化程序设计n程序设计的基本步骤n分析问题n确定处理方案n确定具体操作步骤,绘制流程图n编写程序n调试并运行程序,得到预期结果n整理输出结果,写出有关文档资料8谢谢观赏2019-8-23n流程图的画法起止框执行框流程线条件满足?条件满足?YYNN判断框AA连接点9谢谢观赏2019-8-23指令格式及寻址方式n指令格式操 作 码操 作 数OP CODED
5、W0127形式1OP CODEDW0127形式2OP CODEDW0127形式3DATA/DISPDATA/DISP12个字节12个字节MODREGR / MDATA/DISPDATA/DISP12个字节12个字节方向位,0:REG字段指出的寄存器为源操作数寄存器 1:REG字段指出的寄存器为目的操作数寄存器字位,0:参加运算的操作数为字节操作数 1:参加运算的操作数为字操作数10谢谢观赏2019-8-23MOD含 义MOD含 义00存储器方式,无位移量01存储器方式,有8位位移量10存储器方式,有16位位移量11寄存器方式,无位移量MOD字段编码表REGW=1W=0REGW=1W=0000A
6、XAL100SPAH001CXCL101BPCH010DXDL110SIDH011BXBL111DIBHREG字段编码表11谢谢观赏2019-8-23存储器方式寄存器方式有效地址的计算公式W=0W=100011011000(BX)+(SI)(BX)+(SI)+D8(BX)+(SI)+D16ALAX001(BX)+(DI) (BX)+(DI) +D8(BX)+(DI) +D16CLCX010(BP)+(SI)(BP)+(SI) +D8(BP)+(SI) +D16DLDX011(BP)+(DI)(BP)+(DI) +D8(BP)+(DI) +D16BLBX100(SI)(SI) +D8(SI) +
7、D16AHSP101(DI)(DI) +D8(DI) +D16CHBP110D16(BP) +D8(BP) +D16DHSI111(BX)(BX) +D8(BX) +D16BHDIMODR/M12谢谢观赏2019-8-23n8086/8088常用指令集n数据传送指令(14条)传送MOV堆栈操作PUSH , POP交换XCHG输入、输出IN , OUT转换XLAT地址传送LEA , LDS , LES标志传送PUSHF , POPF , LAHF , SAHF13谢谢观赏2019-8-23n算术运算指令(20条)加法ADD , ADC , AAA , DAA加“1”INC减法SUB , SBB
8、, AAS , DAS减“1”DEC比较CMP求补NEG乘法MUL , IMUL , AAM除法DIV , IDIV, AAD符号扩展CBW , CWD14谢谢观赏2019-8-23n逻辑运算指令(13条)求反NOT逻辑乘AND逻辑加OR异或XOR测试位TEST左/右移位SHL , SHR , SAL , SAR左/右循环移位ROL , ROR , RCL , RCR15谢谢观赏2019-8-23n字符串指令(10条)传送串MOVS , MOVSB/MOVSW串比较CMPS , CMPSB/CMPSW串扫描SCAS , SCASB/SCASW取字符串LODS , LODSB/LODSW存字符串
9、STOS , STOSB/STOSW重复前缀REP , REPZ , REPNZ16谢谢观赏2019-8-23n控制转移指令(28条)子程序调用CALL子程序返回RET无条件转移JMP条件转移JZ,JNZ,JC,JNC,JO,JNO,JS,JNS,JP,JNP,JA,JAE,JB,JBE,JG,JGE,JL,JLE循环LOOP条件循环LOOPNE , LOOPE寄存器CX=0转移JCXZ中断INT , INTO中断返回IRET17谢谢观赏2019-8-23n处理机控制指令(12条)清除CF标志CLC进位有效位CF求反CMC置CF标志STC置DF标志STD清除DF标志CLD置IF标志STI清除I
10、F标志CLI处理机暂停HLT等待状态WAIT将数据传送给协处理器(提供到数据/地址线上)ESC保证总线的控制LOCK无操作NOP18谢谢观赏2019-8-23n寻址方式(重点)n概述n目的n大多数情况下,指令不直接给出操作数本身,而是给出存放操作数的寄存器或者是内存单元的地址。n大多数情况下,操作数地址也不是直接给出,而是给出计算操作数地址的方法,称之为寻址方式n寻址方式的种类n与数据有关的寻址方式(7种)n与转移地址有关的寻址方式(4种)19谢谢观赏2019-8-23nMOV指令(简介)n指令格式 mov 目的,源n功能:该指令将源内容送至目的地址内n例: mov ax, bx 将寄存器bx
11、中的内容送到寄存器ax中20谢谢观赏2019-8-23n与数据有关的寻址方式n立即寻址方式n操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。n立即数可以是8位的或者16位的。(386之后的机器也可以是32位的)n立即数方式用来表示常数,它经常用来给寄存器赋初值。只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。21谢谢观赏2019-8-23n立即数寻址方式举例 MOV AL, 5 - 指令执行后(AL)= 05H MOV AX, 3064H - 指令执行后(AX)= 3064H6430OP指令AX22谢谢观赏2
12、019-8-23n寄存器寻址n操作数在寄存器中,指令中指定寄存器号。n16位的操作数,寄存器可以是 AX,BX,CX,DX,SI,DI,SP,BP。n8位的操作数,寄存器可以是 AH,AL,BH,BL,CH,CL,DH,DL。例: MOV AX , BX 指令执行前: (AX)= 3064H (BX)= 1234H 指令执行后: (AX)= 1234H (BX)= 1234H这种方式中,不需要访问存储器来取得操作数,所以这种方式可以得到较高的运算速度23谢谢观赏2019-8-23立即数寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址不需要计算操作数的地址需要计算操
13、作数的有效地址24谢谢观赏2019-8-23操作数的地址段地址偏移地址+我们把这个偏移地址称为我们把这个偏移地址称为有效地址(有效地址(EA)有效地址(有效地址(EA)= 基址基址 + 变址变址 + 位移量位移量存放在指令中的一个8位、16位的数,但它不是立即数,而是一个地址。存放在变址寄存器(SI,DI)中的内容,它通常用来访问数组中的某个元素或字符串中的某个字符存放在基址寄存器(BX,BP)中的内容,它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址25谢谢观赏2019-8-23段偏移CSIPSSSP或BPDSBX、DI、SI或一个16位数ESDI(用于串指令)8086/8
14、0888086/8088段寄存器和相应存放偏移地址的寄存器之间的默认组合段寄存器和相应存放偏移地址的寄存器之间的默认组合成分16位寻址位移量0,8,16位基址寄存器BX,BP变址寄存器SI,DI1616位寻址是有效地址的三种成分的组成位寻址是有效地址的三种成分的组成26谢谢观赏2019-8-23n直接寻址方式n操作数的有效地制只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值就是操作数的有效地址。例: MOV AX , 2000H 假设(DS)= 3000H物理地址 = 3000H * 16 +2000H = 32000H30000H32000H6430OP代码段5030数
15、据段AX 假设(32000H)= 3050H 则指令执行后,AX = 3050H27谢谢观赏2019-8-23n可以用符号来代替数值地址 MOV AX , VALUE MOV AX , VALUE 如果在附加段,则应指定段前缀 MOV AX , ES:VALUE MOV AX , ES:VALUE直接寻址方式只适用于处理单个变量。例如某个存放在存储器中的变量,可以用直接寻址方式先把变量取出送到一个寄存器中,然后再做进一步的处理28谢谢观赏2019-8-23n寄存器间接寻址方式n操作数的有效地址只包含基址寄存器或变址寄存器的内容。因此有效地址就在某个寄存器中,而操作数在存储器中。n16位寻址,可
16、用的寄存器是BX,BP,SI,DI。 使用BX、SI、DI,其默认段是数据段DS 使用BP,其默认段是堆栈段SS例:MOV AX , BX如果(DS)= 2000H (BX)= 1000H物理地址 = 2000H * 16 + 1000H = 21000H如果(21000H)= 50A0H指令执行后 AX = 50A0H20000H21000HA050数据段AX寄存器间接寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可以取出表格的下一项。29谢谢观赏2019-8-23n寄存器相对寻址方式n操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和。例:MOV AX
17、 , COUNTSI(也可以表示为 MOV AX , COUNT+SI)如果(DS)= 3000H (SI)= 2000H COUNT = 3000H物理地址 = 3000H * 16 + 2000H + 3000H = 35000H如果(35000H)= 1234H指令执行后 AX = 1234H30000H35000H0030OP代码段3412数据段AX33000HCOUNTSI寄存器相对寻址方式同样可以用于表格的处理,表格的首地址可设置为偏移量的地址,利用修改基址或变址寄存器中的内容来取得表格中的值30谢谢观赏2019-8-23n基址变址寻址方式n操作数的有效地址是一个基址寄存器和一个变
18、址寄存器的内容之和例:MOV AX , BXDI(也可以表示为 MOV AX , BX+DI)如果(DS)= 2100H (BX)= 0158H (DI)= 10A5H物理地址 = 2100H * 16 + 0158H + 10A5H = 221FDH如果(221FDH)= 1234H指令执行后 AX = 1234H21000H221FDH3412数据段AX21158HBXDI基址变址寻址方式同样可以用于数组或表格的处理,表格的首地址可存放在基址寄存器中,利用变址寄存器来访问数组或表格中的元素31谢谢观赏2019-8-23n相对基址变址寻址方式n操作数的有效地址是一个基址寄存器与一个变址寄存器
19、的内容和指令中指定的位移量之和。例:MOV AX , MASKBXSI(也可以表示 为MOV AX , MASK+BX+SI)如果(DS)= 3000H (BX)= 2000H (SI)= 1000H MASK = 0250H物理地址 = 3000H * 16 + 2000H + 1000H + 0250H = 33250H如果(33250H)= 1234H指令执行后 AX = 1234H相对基址变址寻址方式常用于二维数组的寻址,如存储器中存放着由多个记录组成的文件,则位移量可以指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素33250H30000H5002OP代码段3
20、412数据段AX32000HBXSI32250HMASK32谢谢观赏2019-8-23n与转移地址有关的寻址方式n目的n确定转移指令(条件转移指令、无条件转移指令)及转子指令(CALL)的转向地址n当转移发生在段内的时候,给出即将转移去执行的那条指令的偏移地址,并用该偏移地址取代IP寄存器中的内容n当转去执行的指令与原来执行的指令不在同一段时,则还需要用新的代码段基址取代CS寄存器中原有的内容33谢谢观赏2019-8-23n种类n段内直接寻址n段内间接寻址n段间直接寻址n段间间接寻址34谢谢观赏2019-8-23n段内直接寻址n转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移
21、量之和n无条件转移指令在位移量为8位的时候称为短跳转 JMP SHORT QUEST IP IP+8位位移量n无条件转移指令在位移量为16位的时候称为近跳转 JMP NEAR PTR PROGIA IP IP+16位位移量n特点 指令中的位移量是转向的有效地址与当前IP值之差,所以这一程序段在内存的不同区域运行时,转移指令本身不会发生变化,符合程序再定位的要求位移量IP+EA35谢谢观赏2019-8-23n段内间接转移n转向的有效地址是一个寄存器或是一个存储单元的内容。 这个寄存器或者存储单元中的内容可以用除立即数以外的任何一种寻址方式获得 (IP)(EA)数据寻址方式根据数据寻址方式计算出有
22、效地址的值转向的有效地址这种寻址方式和以下的两种寻址方式都不能用于条件转移指令。即,条件转移指令只能使用段内直接寻址,而无条件转移指令JMP和CALL可以使用四种寻址方式中的任何一种。36谢谢观赏2019-8-23n假设: (DS)= 2000H,(BX)= 1256H, (SI)= 528FH , 位移量 = 20A1H (232F7)= 3280H,(264E5H)= 2450H JMP BX 执行该指令后,(IP)= 1256H JMP TABLEBX 执行该指令后, (IP)= (DS)* 16 + (BX)+ 位移量) = (20000H + 1256H + 20A1H) = (23
23、2F7H)= 3280H JMP BXSI (IP)= (DS)* 16 + (BX)+ (SI) = (20000H + 1256H + 528H) = (264E5H)= 2450H寄存器相对寻址方式基址变址寻址方式37谢谢观赏2019-8-23n段间直接寻址n指令中直接提供了转向的段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器中的内容n完成的操作 JMP FAR PTR OPR (IP) OPR的段内偏移地址 (CS) OPR所在的段地址38谢谢观赏2019-8-23n段间间接寻址n用存储器中的两个相继字的内容来取代IP和CS寄存
24、器中的原始内容,以达到段间转移的目的。 存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式获得n完成的操作 JMP DWORD PTR OPR (IP) (EA) (CS) (EA+2)n例 JMP DWORD PTRBX+8 (BX)= 3706H,(DS)= 1000H 物理地址 = (DS)* 16 + (BX)+ 8 = 10000H + 3706H + 8 = 1370EH B2H67H05H33H1370EHCSIP指令执行后,(IP)= 67B2H,(CS)= 3305H39谢谢观赏2019-8-238086宏汇编语言的基本语法n汇编语句n指令性语句n经
25、汇编之后,有目标程序与之对应,是有实际操作的语句。n一般指令性语句 一条指令性语句对应一条8086/8088机器指令n宏语句 该语句由伪操作符定义,通过宏定义、宏调用、宏扩展的过程来实现宏语句。一个宏语句对应一组目标代码程序40谢谢观赏2019-8-23macro name MACRO dummy parameter list 宏定义体 ENDMmacro name actual parameter list41谢谢观赏2019-8-23n指令性语句格式 标号:前缀指令助记符操作数,操作数;注释n标号:代表“:”后面语句的存储地址,供转移指令(JMP)、转子指令(CALL)、循环指令(LOOP
展开阅读全文