汇编语言及其程序设计课件

上传人:txadgkn****dgknqu... 文档编号:240992367 上传时间:2024-05-23 格式:PPT 页数:133 大小:665KB
返回 下载 相关 举报
汇编语言及其程序设计课件_第1页
第1页 / 共133页
汇编语言及其程序设计课件_第2页
第2页 / 共133页
汇编语言及其程序设计课件_第3页
第3页 / 共133页
点击查看更多>>
资源描述
第六章 汇编语言及其程序设计1谢谢观赏2019-8-23第六章 汇编语言及其程序设计1谢谢观赏2019-8-23主要内容n汇编程序及其开发过程n指令格式及寻址方式n8086汇编语言的基本语法n顺序、分支、循环结构程序设计n子程序设计2谢谢观赏2019-8-23主要内容汇编程序及其开发过程2谢谢观赏2019-8-23汇编语言程序及开发过程n基本概念n汇编语言:是一种面向机器的程序设计语言,它是机器语言的符号化描述。n特点:代码短、空间省、效率高n汇编语言源程序:用汇编语言编写的程序n目标程序:汇编语言经翻译程序翻译成的代码程序(即机器语言的程序)。n汇编程序:把源程序转变为相应目标程序的翻译程序3谢谢观赏2019-8-23汇编语言程序及开发过程基本概念3谢谢观赏2019-8-23n宏汇编:不仅包含一般汇编语言的功能,而且采用了高级语言使用的数据结构,是一种接近高级语言的汇编语言。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-23源程序目标程序可执行程序设计编辑用MASM用LINK执行使用n基本汇编语言程序实例(1)DATA SEGMENT(2)String DB 程序设计,”$”(3)DATA ENDS(4)CODE SEGMENT(5)ASSUME 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-23基本汇编语言程序实例(1)DATA SEGn汇编语言程序 的开发过程开 始结 束用编辑工具编辑源程序源程序 XXXX.asm用MASM进行汇编有语法错误?YN目标文件 XXXX.obj用LINK连接有错误?YN执行可执行文件XXXX.exe正确?NY用DEBUG调试7谢谢观赏2019-8-23汇编语言程序开 始结 束用编辑工具编辑源程序源程序 XXXXn结构化程序设计n程序设计的基本步骤n分析问题n确定处理方案n确定具体操作步骤,绘制流程图n编写程序n调试并运行程序,得到预期结果n整理输出结果,写出有关文档资料8谢谢观赏2019-8-23结构化程序设计8谢谢观赏2019-8-23n流程图的画法起止框执行框流程线条件满足?条件满足?YYNN判断框AA连接点9谢谢观赏2019-8-23流程图的画法起止框执行框流程线条件满足?条件满足?YYNN判指令格式及寻址方式n指令格式操 作 码操 作 数OP CODEDW0127形式1OP CODEDW0127形式2OP CODEDW0127形式3DATA/DISPDATA/DISP12个字节12个字节MODREGR/MDATA/DISPDATA/DISP12个字节12个字节方向位,0:REG字段指出的寄存器为源操作数寄存器 1:REG字段指出的寄存器为目的操作数寄存器字位,0:参加运算的操作数为字节操作数 1:参加运算的操作数为字操作数10谢谢观赏2019-8-23指令格式及寻址方式指令格式操 作 码操 作 数OP CODEMOD字段编码表REG字段编码表11谢谢观赏2019-8-23MOD字段编码表REG字段编码表11谢谢观赏2019-8-2MODR/M12谢谢观赏2019-8-23MODR/M12谢谢观赏2019-8-23n8086/8088常用指令集n数据传送指令(14条)13谢谢观赏2019-8-238086/8088常用指令集13谢谢观赏2019-8-23n算术运算指令(20条)14谢谢观赏2019-8-23算术运算指令(20条)14谢谢观赏2019-8-23n逻辑运算指令(13条)15谢谢观赏2019-8-23逻辑运算指令(13条)15谢谢观赏2019-8-23n字符串指令(10条)16谢谢观赏2019-8-23字符串指令(10条)16谢谢观赏2019-8-23n控制转移指令(28条)17谢谢观赏2019-8-23控制转移指令(28条)17谢谢观赏2019-8-23n处理机控制指令(12条)18谢谢观赏2019-8-23处理机控制指令(12条)18谢谢观赏2019-8-23n寻址方式(重点)n概述n目的n大多数情况下,指令不直接给出操作数本身,而是给出存放操作数的寄存器或者是内存单元的地址。n大多数情况下,操作数地址也不是直接给出,而是给出计算操作数地址的方法,称之为寻址方式n寻址方式的种类n与数据有关的寻址方式(7种)n与转移地址有关的寻址方式(4种)19谢谢观赏2019-8-23寻址方式(重点)19谢谢观赏2019-8-23nMOV指令(简介)n指令格式 mov 目的,源n功能:该指令将源内容送至目的地址内n例:mov ax,bx 将寄存器bx中的内容送到寄存器ax中20谢谢观赏2019-8-23MOV指令(简介)20谢谢观赏2019-8-23n与数据有关的寻址方式n立即寻址方式n操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。n立即数可以是8位的或者16位的。(386之后的机器也可以是32位的)n立即数方式用来表示常数,它经常用来给寄存器赋初值。只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。21谢谢观赏2019-8-23与数据有关的寻址方式21谢谢观赏2019-8-23n立即数寻址方式举例 MOV AL,5 -指令执行后(AL)=05H MOV AX,3064H-指令执行后(AX)=3064H6430OP指令AX22谢谢观赏2019-8-23立即数寻址方式举例6430OP 指令An寄存器寻址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寄存器寻址例:MOV AX,BX 指令执行前立即数寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址不需要计算操作数的地址需要计算操作数的有效地址24谢谢观赏2019-8-23立即数寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址操作数的地址段地址偏移地址+我们把这个偏移地址称为我们把这个偏移地址称为有效地址(有效地址(EA)有效地址(有效地址(EA)=基址基址+变址变址+位移量位移量存放在指令中的一个8位、16位的数,但它不是立即数,而是一个地址。存放在变址寄存器(SI,DI)中的内容,它通常用来访问数组中的某个元素或字符串中的某个字符存放在基址寄存器(BX,BP)中的内容,它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址25谢谢观赏2019-8-23操作数的地址段地址偏移地址+我们把这个偏移地址称为有效地址(8086/80888086/8088段寄存器和相应存放偏移地址的寄存器之间的默认组合段寄存器和相应存放偏移地址的寄存器之间的默认组合1616位寻址是有效地址的三种成分的组成位寻址是有效地址的三种成分的组成26谢谢观赏2019-8-238086/8088段寄存器和相应存放偏移地址的寄存器之间的默n直接寻址方式n操作数的有效地制只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值就是操作数的有效地址。例:MOV AX,2000H 假设(DS)=3000H物理地址=3000H*16+2000H =32000H30000H32000H6430OP代码段5030数据段AX 假设(32000H)=3050H 则指令执行后,AX=3050H27谢谢观赏2019-8-23直接寻址方式例:MOV AX,2000H 假n可以用符号来代替数值地址 MOV AX,VALUE MOV AX,VALUE 如果在附加段,则应指定段前缀 MOV AX,ES:VALUE MOV AX,ES:VALUE直接寻址方式只适用于处理单个变量。例如某个存放在存储器中的变量,可以用直接寻址方式先把变量取出送到一个寄存器中,然后再做进一步的处理28谢谢观赏2019-8-23可以用符号来代替数值地址直接寻址方式只适用于处理单个变量。例n寄存器间接寻址方式n操作数的有效地址只包含基址寄存器或变址寄存器的内容。因此有效地址就在某个寄存器中,而操作数在存储器中。n16位寻址,可用的寄存器是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-23寄存器间接寻址方式例:MOV AX,BX如果(DSn寄存器相对寻址方式n操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和。例:MOV AX,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-23寄存器相对寻址方式例:MOV AX,COUNTSIn基址变址寻址方式n操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和例: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-23基址变址寻址方式例:MOV AX,BXDI(也n相对基址变址寻址方式n操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。例: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代码段3412数据段AX32000HBXSI32250HMASK32谢谢观赏2019-8-23相对基址变址寻址方式例:MOV AX,MASKBXn与转移地址有关的寻址方式n目的n确定转移指令(条件转移指令、无条件转移指令)及转子指令(CALL)的转向地址n当转移发生在段内的时候,给出即将转移去执行的那条指令的偏移地址,并用该偏移地址取代IP寄存器中的内容n当转去执行的指令与原来执行的指令不在同一段时,则还需要用新的代码段基址取代CS寄存器中原有的内容33谢谢观赏2019-8-23与转移地址有关的寻址方式33谢谢观赏2019-8-23n种类n段内直接寻址n段内间接寻址n段间直接寻址n段间间接寻址34谢谢观赏2019-8-23种类34谢谢观赏2019-8-23n段内直接寻址n转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和n无条件转移指令在位移量为8位的时候称为短跳转 JMP SHORT QUEST IP IP+8位位移量n无条件转移指令在位移量为16位的时候称为近跳转 JMP NEAR PTR PROGIA IP IP+16位位移量n特点 指令中的位移量是转向的有效地址与当前IP值之差,所以这一程序段在内存的不同区域运行时,转移指令本身不会发生变化,符合程序再定位的要求位移量IP+EA35谢谢观赏2019-8-23段内直接寻址位移量IP+EA35谢谢观赏2019-8-23n段内间接转移n转向的有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或者存储单元中的内容可以用除立即数以外的任何一种寻址方式获得 (IP)(EA)数据寻址方式根据数据寻址方式计算出有效地址的值转向的有效地址这种寻址方式和以下的两种寻址方式都不能用于条件转移指令。即,条件转移指令只能使用段内直接寻址,而无条件转移指令JMP和CALL可以使用四种寻址方式中的任何一种。36谢谢观赏2019-8-23段内间接转移数据寻址方式根据数据寻址转向的有效地址这种寻址方n假设:(DS)=2000H,(BX)=1256H,(SI)=528FH,位移量=20A1H (232F7)=3280H,(264E5H)=2450H JMP BX 执行该指令后,(IP)=1256H JMP TABLEBX 执行该指令后,(IP)=(DS)*16+(BX)+位移量)=(20000H+1256H+20A1H)=(232F7H)=3280H JMP BXSI (IP)=(DS)*16+(BX)+(SI)=(20000H+1256H+528H)=(264E5H)=2450H寄存器相对寻址方式基址变址寻址方式37谢谢观赏2019-8-23假设:(DS)=2000H,(BX)=1256H,寄存n段间直接寻址n指令中直接提供了转向的段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器中的内容n完成的操作 JMP FAR PTR OPR (IP)OPR的段内偏移地址 (CS)OPR所在的段地址38谢谢观赏2019-8-23段间直接寻址38谢谢观赏2019-8-23n段间间接寻址n用存储器中的两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式获得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-23段间间接寻址B2H67H05H33H1378086宏汇编语言的基本语法n汇编语句n指令性语句n经汇编之后,有目标程序与之对应,是有实际操作的语句。n一般指令性语句 一条指令性语句对应一条8086/8088机器指令n宏语句 该语句由伪操作符定义,通过宏定义、宏调用、宏扩展的过程来实现宏语句。一个宏语句对应一组目标代码程序40谢谢观赏2019-8-238086宏汇编语言的基本语法汇编语句40谢谢观赏2019-8macro name MACRO dummy parameter list 宏定义体 ENDMmacro name actual parameter list41谢谢观赏2019-8-23macro name MACRO dummy paran指令性语句格式 标号:前缀指令助记符操作数,操作数;注释n标号:代表“:”后面语句的存储地址,供转移指令(JMP)、转子指令(CALL)、循环指令(LOOP)使用。由字母、数字组成串(第一个字符非数字)n前缀:是与串操作运算(MOVS、CMPS、SCAS、LODS、STOS)以及总线封锁指令(LOCK)配合使用的部分。它们是REP、REPZ、REPE、REPNZ、REPNE等等。LOOP1:REP MOVS DEST,SOURCEn操作数的数目可以为0,1或2,用“,”隔开42谢谢观赏2019-8-23指令性语句格式42谢谢观赏2019-8-23n指示性语句n功能:对程序的起止信息、分段情况、变量说明、内存结构等进行说明。n格式:名字伪操作指令参数,参数;注释nPC宏汇编的伪指令n段定义伪指令:SEGMENT,ENDS,ASSUME,GROUP,ORGn符号定义伪指令:EQU,=,LABELn数据定义伪指令:DB,DW,DD,DQ,DT,RECORD,STRUC43谢谢观赏2019-8-23指示性语句43谢谢观赏2019-8-23n过程定义伪指令:PROC,ENDPn宏处理伪指令:MACRO,REPT,IRPCn条件汇编伪指令:IF,ENDIF,IFDIF,IFDEFn基本元素n汇编语言字符集n大写字母:AZn小写字母:azn数字:09n符号:+,-,*,/,(,),;,,,.,:,_,“,$,&,#,?,!注:汇编语言源程序中,大小写字母作用相同44谢谢观赏2019-8-23过程定义伪指令:PROC,ENDP44谢谢观赏2019-8-n常量与数值表达式n常量n在汇编时已经确定的值。在指令中作为直接操作数,或者给变量赋初值n类型n数值常量:以数值的形式直接写在语句中n符号常量:预先为它定义一个名字,然后在语句中用名字来表示该常量(提高程序的可读性)用 EQU 或=来定义 例:PORT EQU 83H ALPHT=35*2145谢谢观赏2019-8-23常量与数值表达式45谢谢观赏2019-8-23各种形式常量的格式返 回46谢谢观赏2019-8-23各种形式常量的格式返 回46谢谢观赏2019-8-23n标号n标号是为一组机器指令所起的名字,用于程序转移指令、调用指令和循环指令的操作数(转向地址),一般在CS段内定义和使用。n标号的属性:段地址、段内偏移地址和类型 标号所处的代码段的段基址,称为该标号的段地址 标号所处的位指向对于段首地址的相对地址,称为该标号的段内偏移地址n形式一:标号n形式二:OFFSET 标号LC1:MOV AL,20H JMP LC1MOV BX,OFFSET LB1MOV BX,OFFSET LB1 与 MOV BX,LB1 有什么不同?47谢谢观赏2019-8-23标号LC1:MOV AL,20HMOV BX,OFF 标号有FAR(远标号)和NEAR(近标号)种类型n近标号:该标号的定义在本段 在机器指令助记符之前,加一标号名字,后面紧跟一个冒号“:”LC1:MOV AL,20H JMP LC1n远标号:该标号的定义不在本段 过程定义时,为过程起的名字也是标号,可作为转子指令的操作数,这类标号的类型在定义子过程时确定 PROP PROC FAR PROP ENDP48谢谢观赏2019-8-23 标号有FAR(远标号)和NEAR(近标号)种类型48谢n注:标号在使用时 (1)循环指令、条件转移指令只能引用NEAR型,并且定义标号语句和使用标号语句的相对 距离只能在 128 +127 字节范围内 (2)无条件转移指令、调用(转子)指令可引 用 NEAR 和 FAR 两种类型的标号 (3)如果同一段内,无条件转移指令语句到定 义该标号语句的距离在 128 +127 字节 范围内,则可在使用的标号前指定为短标 号:记为 SHORT 标号49谢谢观赏2019-8-23注:标号在使用时49谢谢观赏2019-8-23n变量n变量的定义及格式n变量是内存中一个数据区的名字,可以作为指令的存储器操作数来引用n变量定义的格式:变量名 变量类型定义符 表达式,变量名:由用户定义(符合标识符定义的规范)变量类型:DB:1个字节 DW:2个字节,即1个字DD:4个字节,即2个字DQ:8个字节,即4个字DT:10个字节,即5个字50谢谢观赏2019-8-23变量变量名:由用户定义(符合标识符定义的规范)变量类型:50n表达式n算术运算符:+,-,*,/,n逻辑运算符:NOT,AND,OR,XORn关系运算符:nEQ-相等nNE-不相等nLT-小于nGT-大于nLE-小于或等于nGE-大于或等于51谢谢观赏2019-8-23表达式51谢谢观赏2019-8-23n分析操作符nTYPE 格式:TYPE 变量或标号 说明:变量:则汇编程序将回送该变量类型包含的 字节数 标号:则汇编程序将回送代表该标号类型的 数值。NEAR(-1)、FAR(-2)例:ARRAY DW 1,2,3 ADD SI,TYPE ARRAY 汇编的结果为 ADD SI,252谢谢观赏2019-8-23分析操作符例:ARRAY DW 1,2,3 nLENGTH 格式:LENGTH 变量 说明:回送分配给该变量的单元数,表达式中带 DUP 时有效,非 DUP 时,回送1例:FEES DW 100DUP(0)MOV CX,LENGTH FEES则汇编结果为:MOV CX,100例:ARRAY DW 1,2 MOV CX,LENGTH ARRAY则汇编结果为:MOV CX,153谢谢观赏2019-8-23LENGTH例:FEES DW 100DUP(0)则汇nSIZE 格式:SIZE 变量 说明:回送分配给该变量的字节数,此值是 LENGTH 值和 TYPE 值的乘积例:ARRAY DW 1,2,3 MOV CX,SIZE ARRAY则汇编结果为:MOV CX,2nOFFSET 格式:OFFSET 变量或标号 说明:回送该变量或标号的偏移地址值例:MOV BX,OFFSET OPR 则汇编程序将OPR的偏移地址回送给指令,在 执行时,将该偏移地址装入BX寄存器中54谢谢观赏2019-8-23SIZE例:ARRAY DW 1,2,3则汇编结果nSEG 格式:SEG 变量或标号 说明:回送该变量或标号的段地址例:MOV BX,SEG OPR则汇编程序将OPR所在的段基址送入BX寄存器n属性操作符 I.PTR 格式:类型 PTR 表达式 类型:BYTE,WORD,DWORD,FAR,NEAR 表达式:是存储器操作数 说明:用来给已分配的存储地址赋予另一种属性,使 该地址具有另一种类型例:MOV BX,5 非法指令MOV BYTE PTR BX,5MOV WORD PTR BX,555谢谢观赏2019-8-23SEG例:MOV BX,SEG OPR则汇编程序将OP II.段超越前缀 说明:用来表示一个标号、变量或地址表达式的段属 性 例:用段前缀来指定某段的地址操作数 MOV AX,ES:BX+SI III.SHORT 说明:表明JMP指令中转移地址的属性 128+12756谢谢观赏2019-8-23 II.段超越前缀56谢谢观赏2019-8-23n指示性语句(说明性语句)n存储分配语句n数值表达式如 3*20n?保留存储空间但不存入数据例:ABC DB 0,?,?,0 DEF DW?,52 存储空间分配如图所示 nASCII字符串例:MESSAGE DB HELLO 存储空间分配如图所示00-00-3400ABCDEF48454C4C4FMESSAGE57谢谢观赏2019-8-23指示性语句(说明性语句)00-00-3400nnDUP(?)重复因子n为正整数,表示数据项重复n次例:ARRAY1 DB 2 DUP(0,1,2,?)ARRAY2 DB 100 DUP(?)内存分配如图所示nnDUP(表达式 表达式,)例:ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3)000102-000102-ARRAY1ARRAY2-100个字节返 回58谢谢观赏2019-8-23nDUP(?)重复因子n为正整数,表示数据项重复n次0n段定义n段定义语句段名 SEGMENT 边界类型连接类型类别段名 ENDS边界类型:用来指明段的起始边界连接类型:段的连接方式类别:表示段的类别,连接程序只使同类别的段发生关联n段值设定伪指令语句ASSUMEn格式 ASSUME 段寄存器:段名,段寄存器:段名,59谢谢观赏2019-8-23段定义59谢谢观赏2019-8-23SEGA SEGMENTSEGA ENDSSEGB SEGMENTSEGB ENDSCODE SEGMENT ASSUME DS:SEGA,ES:SEGB,CS:CODE,SS:NOTHING MOV AX,SEGA MOV DS,AX MOV AX,SEGB MOV ES,AX CODE ENDS60谢谢观赏2019-8-23SEGA SEGMENT60谢谢观赏2019-8-23nORG 置汇编单元计数器语句n功能:用来指出其后的程序段或数据块存放的起 始地址的偏移量n格式:ORG 表达式 汇编程序用语句中表达式之值作为起始地址连续存放程序n例:VECTORS SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 0C596H VECTORS ENDSVECT1偏移地址为0AHVECT2偏移地址为14H61谢谢观赏2019-8-23ORG 置汇编单元计数器语句VECT1偏移地址为0AHVn地址计数器$n汇编程序对源程序进行汇编时,使用$保存当前正在汇编的指令的偏移地址。n开始汇编或在每一段开始时,地址计数器初始化为0,以后在汇编过程中,每处理一条指令,地址计数器增加一个值,此值为该指令所需要的字节数n例 JNE$+6 当上一条指令执行的结果不为零时,转向地址是JNE指令的首地址加上6 注:$+6必须为另一条指令的首地址,否则,汇编 程序将指示出错信息62谢谢观赏2019-8-23地址计数器$62谢谢观赏2019-8-23n例:计算字符串的长度 STRING DB“THIS IS A BOOK”能否用分析操作符SIZE来计算?COUNT EQU$-STRINGn例:计算数的个数 ARRAY DW 1,2,3,4,5,6COUNT EQU ($-ARRAY)/2010002000300040005000600$ARRAY0000H0001H0002H0003H0004H0005H0006H0007H0008H0009H000AH000BH63谢谢观赏2019-8-23例:计算字符串的长度能否用分析操作符SIZE来计算?COUNn过程定义n过程也称为“子程序”nCALL指令调用过程,RET指令结束过程n过程具有“NEAR”属性和“FAR”属性,如果不指定属性,汇编程序认为它是“NEAR”属性n具有NEAR属性的过程,只能由属于该过程的段中的其它程序调用n具有FAR属性的过程,可以由任意段调用n格式过程名 PROC NEAR 或 FAR RET过程名 ENDP64谢谢观赏2019-8-23过程定义64谢谢观赏2019-8-23SEGX SEGMENT SUBT PROC FAR RETSUBT ENDP CALL FAR PTR SUBT SEGX ENDSSEGY SENGMENT CALL FAR PTR SUBT SEGY ENDS65谢谢观赏2019-8-23SEGX SEGMENT65谢谢观赏2019-8-23nDOS下程序正常结束的方式nMOV AH,4CH INT 21Hn主程序名 PROC FAR PUSH DS MOV AX,0 PUSH AX RET 主程序名 ENDP66谢谢观赏2019-8-23DOS下程序正常结束的方式66谢谢观赏2019-8-23顺序结构程序设计n数据传送指令n一般传送指令n格式:MOV 目的,源n功能:将源内容送至目的地址内n说明:该指令有7种格式nMOV MEM/REG1,MEM/REG2 MOV AX,BX MOV AX,2000H MOV 2000H,DSnMOV REG,DATAMOV AL,5不可两个内存位置直接传送数据67谢谢观赏2019-8-23顺序结构程序设计数据传送指令不可两个内存位置直接传送数据67nMOV AC,MEMnMOV MEM,ACnMOV SEGREG,MEM/REGMOV DS,AXnMOV MEM/REG,SEGREGMOV AX,DSnMOV MEM/REG,DATAMOV AX,3168H段寄存器之间不能传送数据MOV指令不能改变CS当前的内容68谢谢观赏2019-8-23MOV AC,MEM段寄存器之间不能MOV指令不能改变立即数通用寄存器段寄存器内存MOV指令传送方向图69谢谢观赏2019-8-23立即数通用寄存器段寄存器内存MOV指令传送方向图69谢谢观赏n交换指令n格式:XCHG OPR1,OPR2n功能:将源操作数OPR2内容和目的操作数OPR1 内容互换 (OPR1)(OPR2)n说明n段寄存器不能作为操作数n无法将两个内存内容互换n例:XCHG BX,BP+SI (BX)=6F30H(BP)=0200H(SI)=0046H (SS)=2F00H(2F246H)=4154H OPR2的物理地址=2F00H*16d+0200H+0046H =2F246H指令执行后:(BX)=4154H(BP+SI)=6F30H70谢谢观赏2019-8-23交换指令指令执行后:70谢谢观赏2019-8-23n堆栈操作命令n格式nPUSH SRC 执行的操作(16位指令)(SP)(SP)-2 (SP)+1,(SP)(SRC)nPOP DST 执行的操作(16位指令)(DST)(SP)+1,(SP)(SP)(SP)+2注意:8086/8088中,不允许立即数进栈 标志寄存器的内容入栈和出栈:PUSHF和POPF71谢谢观赏2019-8-23堆栈操作命令注意:8086/8088中,不允许立即数进栈71n例:PUSH AX 将寄存器AX的内容压入堆栈 PUSH DS 将寄存器DS的内容压入堆栈 PUSH WORD PTR BX 将内存单元中的字压入堆栈 POP CX 将堆栈栈顶16位的字送入寄存器CX中 PUSHF MOV BP,SP AND BP,0FEFFH POPF 修改标志寄存器中TF的值72谢谢观赏2019-8-23例:72谢谢观赏2019-8-23n地址传送指令n取偏移地址指令n格式:LEA REG,SRCn执行的操作 (REG)SRCn功能:将内存变量的偏移地址送入16位的通用寄存器中n例 LEA BX,BX+SI+0F62H (BX)=0400H (SI)=003CH 执行后 BX=0400H+003CH+0F62H=139EHn说明:LEA指令与分析操作符OFFSET功能类似,LEA的 功能更强,指令中的操作数可带下标73谢谢观赏2019-8-23地址传送指令73谢谢观赏2019-8-23n取32位地址指令 LDS,LESn格式:LDS REG,SRC LES REG,SRCn执行的操作 (REG)(SRC)(SREG)(SRC+2)n功能:内存的一个双字存储地址,内容的高十六位为 段地址,低十六位是偏移量地址。将偏移量地 址送入指定的寄存器中,段地址送入DS或ES中n例 ADDR DD 11223344H LDS SI,ADDR 执行后,(DS)=1122H (SI)=3344H74谢谢观赏2019-8-23取32位地址指令 LDS,LES74谢谢观赏2019-8DATA SEGMENTADDR DD 56781234HBUF DW 5DUP(20)AD-BUF DD BUFSTRING DB abcdAD-STRING DD STRINGOFF-STRING DW STRINGDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLES DI,ADDRLEA BX,ADDRMOV AX,SEG ADDREND STARTMOV CX,BUFLDS SI,AD-BUFMOV AL,STRINGMOV AX,OFF-STRINGLES BX,AD-STRINGMOV AX,4C00HINT 21HCODE ENS34H12H78H56H14H00H14H00H14H00H14H00H14H00H04H00H8FH1FH61H62H63H64H12H00H8FH1FH12H00H1F8FH:0000HADDRBUFAD-BUFSTRINGAD-STRINGOFF-STRING0004H000EH0012H0016H001AH数据段存放段地址和偏移地址存放偏移地址ES:DI=5678H:1234HBX=0000HAX=1F8FHCX=0014HDS:SI=1F8FH:0004HAX=0012HAL=61HES:BX=1F8FH:0012H75谢谢观赏2019-8-23DATA SEGMENTADDR Dn算术运算指令n二进制加法运算指令ADD,ADC,INCnADD指令n格式:ADD DST,SRCn执行的操作 (DST)(SRC)+(DST)n影响标志位:CF,OF,ZF,SF(只考虑主要的标志位)n例 ADD DX,0F0F0H 指令执行前(DX)=4652H 1111 0000 1111 0000 +0100 0110 0101 0010 1 0011 0111 0100 0010 指令执行后:(DX)=3742H ZF=0,SF=0,CF=1,OF=076谢谢观赏2019-8-23算术运算指令76谢谢观赏2019-8-23n带进位的加法指令ADCn格式:ADC DST,SRCn执行的操作:(DST)(SRC)+(DST)+CFn例:设目的操作数存放在DX和AX,其中DX存放高位 字。源操作数存放在BX,CX中,其中BX存放高位 字。指令执行前:(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H 指令序列为:ADD AX,CX (1)ADC DX,BX (2)指令1执行后:(AX)=0D389H,SF=1,ZF=0,CF=1,OF=0 指令2执行后:(DX)=0008H,SF=0,ZF=0,CF=0,OF=00002H0F365HDXAX0005H0E024HBXCX77谢谢观赏2019-8-23带进位的加法指令ADC0002H0F365HDXAX0005nINC指令n格式:INC OPRn执行的操作:(OPR)(OPR)+178谢谢观赏2019-8-23INC指令78谢谢观赏2019-8-23n例:X=124,Y=5,将X+Y的结果存于RESULT 单元中。DATA SEGMENT X DB 124 Y DB 5 RESULT DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,X ADD AL,Y MOV RESULT,AL MOV AH,4CH INT 21HCODE ENDS END START79谢谢观赏2019-8-23例:X=124,Y=5,将X+Y的结果存于RESn二进制减法指令SUB,SBB,DEC,NEG,CMPnSUB 减法指令n格式:SUB DST,SRCn执行的操作:(DST)(DST)-(SRC)nSBB 带借位减法指令n格式:SBB DST,SRCn执行的操作:(DST)(DST)-(SRC)-CFnDEC 减1指令n格式:DEC OPRn执行的操作:(OPR)(OPR)-180谢谢观赏2019-8-23二进制减法指令SUB,SBB,DEC,NEG,CMPnNEG 求补指令n格式:NEG OPRn执行的操作:(OPR)-(OPR)n说明:把操作数按位求反后末位加1,因而执行的操作也可以表示为:(OPR)0FFFFH-(OPR)+1nCMP 比较指令n格式:CMP OPR1,OPR2n执行的操作:(OPR1)-(OPR2)n说明:该指令执行的操作与SUB指令执行的操作一样,但不保存结果。根据该指令执行的结果设置标志位81谢谢观赏2019-8-23NEG 求补指令81谢谢观赏2019-8-23n例:设X,Y,Z均位双精度数,他们分别存放在地 址为X,X+2,Y,Y+2,Z,Z+2的存储单元中 中,存放时高位字在高地址中,低位字在低 地址中,在8086中如何实现WX+Y+24-ZDATA SEGMENT X DD 11223344H Y DD 55667788H Z DD 22336699H W DD?DATA ENDS443322118877665599663322-XX+2YY+2ZZ+2WW+2CODE SEGMENT ASSUME CS:CODE,DS:DATACODE ENDS END STARTSTART:MOV AX,DATA MOV DS,AX MOV AX,X MOV DX,X+2 ADD AX,Y ADC DX,Y+2 ADD AX,24 ADC DX,0 SUB AX,Z SBB DX,Z+2 MOV W,AX MOV W+2,DX MOV AX,4C00H INT 21H 82谢谢观赏2019-8-23例:设X,Y,Z均位双精度数,他们分别存放在地DATA n二进制乘法指令:MUL,IMULnMUL 无符号数乘法n格式:MUL SRCn执行的操作:字节操作数:(AX)(AL)*(SRC)字操作数:(DX,AX)(AX)*(SRC)nIMUL 带符号数乘法n格式:IMUL SRCn执行的操作与MUL相同注:乘法指令只对CF和OF有定义 对于MUL指令:如果乘积的高一半为0,则CF和OF均为0,否则为1。这样 的条件妈设置可以用来检查字节乘积的结果是字节还是字 对于IMUL指令:如果乘积的高一半是低一半的符号扩展,则CF和OF均为 0,否则为183谢谢观赏2019-8-23二进制乘法指令:MUL,IMUL注:乘法指令只对CF和OF有n例:如(AL)=0B4H,(BL)=11H,求指令 IMUL BL 和 MUL BL 的结果 解:(AL)=0B4H 无符号数为180D,带符号数为-76D (BL)=11H 无符号数为17D,带符号数为17D 执行 IMUL BL 的结果为 (AX)=0FAF4H=-1292D,CF=OF=1 执行 MUL BL 的结果为 (AX)=0BF4H=3060D,CF=OF=184谢谢观赏2019-8-23例:如(AL)=0B4H,(BL)=11H,求指令84谢谢n二进制除法指令:DIV,IDIVn无符号数除法 DIVn格式:DIV SRCn执行的操作:n字节操作:16位的被除数在AX中,8位的除数为源操作数,结果的8位商在AL中,8位余数在AH中 (AL)(AX)/(SRC)的商 (AH)(AX)/(SRC)的余数n字操作:32位的被除数在DX,AX中,DX为高位字;16位的除数为源操作数,结果的16位商在AX中,16位的余数在DX中 (AX)(DX,AX)/(SRC)的商 (DX)(DX,AX)/(SRC)的余数85谢谢观赏2019-8-23二进制除法指令:DIV,IDIV85谢谢观赏2019-8-2n带符号数除法 IDIVn格式:IDIV SRCn执行的操作:与DIV执行的操作相同。但操作数必须是带符号数,商和余数也都是带符号数86谢谢观赏2019-8-23带符号数除法 IDIV86谢谢观赏2019-8-23n例:如(AX)=0400H,(BL)=0B4H,求指 令 IDIV BL 和 DIV BL 的结果 解:(AX)=0400H 无符号数为1024D,带符号数为+1024D (BL)=0B4H 无符号数为180D,带符号数为-76D 执行 DIV BL 的结果为 (AH)=7CH=124D 余数 (AL)=05H=5D 商 执行 IDIV BL 的结果为 (AH)=24H=36D 余数 (AL)=0F3H=-13D 商87谢谢观赏2019-8-23例:如(AX)=0400H,(BL)=0B4H,求指87谢n符号位扩充:CBW,CWDnCBW 字节转换为字n格式:CBWn执行的操作:AL的内容符号为扩展到AH,形成AX中的字。即如果(AL)的最高有效位为0,则(AH)=0;如果(AL)的最高有效位为1,则(AH)=0FFHnCWD 字转换为双字n格式:CWDn执行的操作:AX的内容符号扩展到DX,形成DX:AX中的双字。即如果(AX)的最高有效位为0,则(DX)=0;如果(AX)的最高有效位为1,则(DX)=0FFFFH88谢谢观赏2019-8-23符号位扩充:CBW,CWD88谢谢观赏2019-8-23例:算术综合运算举例,计算(V-(X*Y+W-540)/X 其中,X,Y,W,V均为16位带符号数,已分别装入X,Y,W,V单元 中,要求上式计算的结果的商存入AX寄存器,余数存入DX寄存器DATA SEGMENT X DW 1234H Y DW 2345H W DW 3456H V DW 4567HDATA ENDS MOV AX,X IMUL Y MOV CX,AX MOV BX,DX MOV AX,W CWD ADD CX,AX ADC BX,DX SUB CX,540 SBB BX,0 MOV AX,V CWD SUB AX,CX SBB DX,BX IDIV XCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START89谢谢观赏2019-8-23例:算术综合运算举例,计算(V-(X*Y+W-n8086/8088位处理运算指令n逻辑运算指令nNOT 指令n格式:NOT OPRn执行的操作:(OPR)(OPR)nAND 指令n格式:AND DST,SRCn执行的操作:(DST)(DST)(SRC)nOR 指令n格式:OR DST,SRCn执行的操作:(DST)(DST)(SRC)90谢谢观赏2019-8-238086/8088位处理运算指令90谢谢观赏2019-8-2nXOR 指令n格式:XOR DST,SRCn执行的操作:(DST)(DST)(SRC)nTEST 指令n格式:TEST DST,SRCn执行的操作:(DST)(SRC)n注:该指令执行完毕,设置相应的标志位,不保存结 果91谢谢观赏2019-8-23XOR 指令91谢谢观赏2019-8-23n例1 要求将AL的第5位置1 MOV AL,43H OR AL,20H 0100 0011 0010 0000 OR 0110 0011n例2 要测试AL寄存器中第2位是否为1,若为1则 转移到EXIT去执行 TEST AL,00000100B JNE EXIT92谢谢观赏2019-8-23例1 要求将AL的第5位置192谢谢观赏2019-8-23n移位指令n算术移位指令n格式:SAL DST,计数值 SAR DST,计数值n算术移位指令适用于带符号数的运算,用SAL来乘以2,用SAR来除以2n计数值可以为1,多于1时,为CL中的内容nCF的内容被改变,SF,PF,ZF也根据目的操作数的新值而改变。当符号位改变时,OF置1CF0SAL移位示意图CFSAR移位示意图93谢谢观赏2019-8-23移位指令CF0SAL移位示意图CFSAR移位示意图93谢谢观n例 MOV CL,5 SAR DI,CL 如果指令执行前:(DS)=0F800H (DI)=180AH (0F980A)=0064H 则实际的物理地址为 =0F800H*16d+180AH=0F980A 指令执行后,(0F980A)=0003H CF=0,PF=1,ZF=0,SF=0,OF=094谢谢观赏2019-8-23例 MOV CL,594谢谢观赏2019-8-23n逻辑移位指令n格式:SHL DST,计数值 SHR DST,计数值n逻辑移位指令用于实现无符号数的运算。SHL用来乘以2,SHR用来除以2CF0SHL移位示意图CF0SHR移位示意图95谢谢观赏2019-8-23逻辑移位指令CF0SHL移位示意图CF0SHR移位示意图95n例:MOV CL,2 SHL SI,CL 执行前:(SI)=1450H 5200D 执行后:(SI)=5140H 20800D96谢谢观赏2019-8-23例:96谢谢观赏2019-8-23n循环移位指令n格式:ROL DST,计数值 ROR DST,计数值 RCL DST,计数值 RCR DST,计数值CFROL移位示意图CFROR移位示意图CFRCL移位示意图CFRCR移位示意图97谢谢观赏2019-8-23循环移位指令CFROL移位示意图CFROR移位示意图CFRCn例:(AX)=0012H,(BX)=0034H,要求把他们 装配在一起,形成(AX)=1234H MOV CL,8 ROL AX,CL ADD AX,BX98谢谢观赏2019-8-23例:(AX)=0012H,(BX)=0034H,要求把他们分支结构程序设计nCMP 比较指令n格式:CMP OPR1,OPR2n执行的操作:(OPR1)-(OPR2)n说明:该指令执行的操作与SUB指令执行的操作一样,但不保存结果。根据该指令执行的结果设置标志位99谢谢观赏2019-8-23分支结构程序设计CMP 比较指令99谢谢观赏2019-8-2n转移指令n无条件转移指令n格式:JMP 目的地址(标号)n功能:无条件跳转到目的地址处执行指令n转移的情形n段内短转移 0000H B4H 01H NEXT:MOV AH,01 0018H EBH E6H JMP NEXT 001AH B4H 4CH EXIT:MOV AH,4CH100谢谢观赏2019-8-23转移指令100谢谢观赏2019-8-23n段内近转移 0018H E9H 0FH 01H JMP NEXT 001BH 8AH D0H MOV DL,AL 012AH B4H 4CH NEXT:MOV AH,4CH101谢谢观赏2019-8-23段内近转移101谢谢观赏2019-8-23n段间转移 C1 SEGMENT 0018H FFH 0010H 34C0H JMP NEXTPROG C1 ENDS C2 SEGMENT .0010H B4H 4CH NEXTPROG:MOV AH,4CH C2 ENDS102谢谢观赏2019-8-23段间转移102谢谢观赏2019-8-23n条件转移指令n格式:JX 目的地址(短标号)n功能:满足条件则转移到指定地址处执行n说明:nX 为13个字母n目的地址与JX指令所在的地址相对距离不超过-127 +128个字节范围n发生跳转时,CPU需要较长的时钟周期进行处理,所以,程序设计中尽可能使处理机不发生跳转103谢谢观赏2019-8-
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!