欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    汇编语言程序设计 第三章 ppt课件.ppt

    • 资源ID:2159223       资源大小:1.05MB        全文页数:132页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    汇编语言程序设计 第三章 ppt课件.ppt

    第三章 宏汇编语言,学习指导一、学习目标与要求正确而熟练地使用地址表达式和数值表达式熟悉常用的机器指令的指令助记符、功能及使用格式 区别机器指令语句和伪指令语句常用的伪指令功能、使用方法5.熟练掌握常用的DOS系统功能调用(1,2,9,10号调用),第三章 宏汇编语言,学习指导二、学习重点1.宏汇编语言中的表达式(1)符号常量(2)变量(数据在主存中的存储示意图)(3)地址表达式(4)属性定义算符(PTR,跨段前缀)(5)属性分离算符(SEG,OFFSET),第三章 宏汇编语言,学习指导二、学习重点2.常用的机器指令语句(1)数据传送指令(2)算术运算指令(3)位操作指令 要求掌握各指令的语法规定,功能,最常用指令对标志寄存器的影响。,第三章 宏汇编语言,学习指导二、学习重点3.常用的伪指令(1)数据定义伪指令(2)符号定义伪指令(3)段定义伪指令(4)假定伪指令(5)源程序结束伪指令(6)汇编地址计数器$,第三章 宏汇编语言,学习指导二、学习重点4.常用的DOS系统功能调用 1,2,9,10 号 特别注意特殊字符的显示效果:0AH,0DH 特别注意$(24H)的作用。,第三章 宏汇编语言,学习指导三、学习难点变量、地址表达式的使用常用的机器指令的记忆、各指令的特殊要求汇编地址计数器$和假定伪指令正确理解DOS系统功能调用、注意特殊字符的显示效果,3.1 宏汇编语言的基本语法 3.2 常用的机器指令语句 3.3 伪指令语句 3.4 常用的系统功能调用 3.5 总结,第三章 宏汇编语言,3.1 宏汇编语言的基本语法,常量与数值表达式常量数值表达式 变量、标号与地址表达式变量标号 地址表达式,(1)常量C语言中的常量定义:#define pi=3.1415926常量的基本概念:汇编时已有确定的数值的量。用途:.机器指令语句中的立即操作数;.也可作存贮器操作数的组成部分(位移量V);.在数据定义伪指令语句中给变量赋初值;分类:数值常量、符号常量,1常量与数值表达式,符号常量的定义:等价伪指令 EQU等号伪指令=使用:定义后直接引用符号名。注意:符号常量不分配存贮单元,只建立等价代换关系,可出现在任何段。用EQU语句定义的符号常量在该程序中不能再重新赋值,而用“=”定义的符号常量可多次重新赋值,使用时,以最后一次定义的值为准。,1常量与数值表达式常量,例1,例2,例1:DATA SEGMENT USE16 NUMBER EQU 4;COUNT=35 TAB DW 70,80H,-5,NUMBER MOV AX,NUMBER MOV SI,COUNT MOV DX,TAB COUNT=10 MOV BX,COUNTECX MOV CX,TABECX;注意这两条指令的区别 符号常量特点:在汇编期间被代换成相应等价的数据;提高程序的可读性;便于随时修改程序中的参数。,4,符号常量,35,TAB,70,80H,-5,NUMBER,NUMBER,COUNT,例2:.386;选择的处理器为386 DATA SEGMENT USE16;USE16定义了16 数据段 位的段 SUM DW 0;SUM为字变量,初值为0 DATA ENDS STACK SEGMENT USE16 STACK 堆栈段 DB 100 DUP(0);堆栈的大小为100个字节 STACK ENDS,符号常量,CODE SEGMENT USE16 ASSUME CS:CODE,SS:STACK,DS:DATA NUM1 EQU 1 NUM2=50 START:MOV AX,MOV DS,AX MOV CX,NUM2;循环计数器置初值 MOV AX,0;累加器置初值 MOV BX,NUM1;1BX代码段 NEXT:ADD AX,BX;(AX)+(BX)AX INC BX INC BX DEC CX;(CX)-1CX JNE NEXT;(CX)0转NEXT MOV SUM,AX;(CX)=0累加结果SUM MOV AH,4CH INT 21H CODE ENDS END START,;数据段首址 DS,DS必须由用户程序自己设置,;(BX)+2BX,;返回DOS,符号常量,NUM2,NUM1,1常量与数值表达式数值表达式,(2)数值表达式 数值表达式:常量与运算符(算术运算、逻辑运算、关系运算)组成的有确定意义的式子。算术运算+、*、/、MOD(模除,取余数)、SHR(右移)、SHL(左移)。移位的特别说明:表示将二进制常量右移或左 移运算符右边所规定的次数(正整 数),所空出的位数均补0。,逻辑运算 逻辑乘:AND(与)逻辑加:OR(或)按位加:XOR(异或)逻辑非:NOT(非)关系运算 相等:EQ 不等:NE 小于:LT 大于:GT 小于等于:LE 大于等于:GE(3)数值表达式的运算时机 汇编期间进行,运算的结果为一数值常量,1常量与数值表达式数值表达式,2.变量、标号与地址表达式变量,(1)变量 变量:是数据段或附加数据段中一个数据存贮单元的名字,是这个存储单元的地址的符号表示。可代表一批存储单元的首址。变量的属性 段属性:定义变量所在段的段首址,当访问该变量时该段首址应在某一段寄存器中,即为CPU当前可访问段;偏移地址:该变量所占存储单元到所在段的段首址的字节距离;类型:类型是指存取该变量中的数据所需要的字节数,变量的类型由定义该变量时所使用的伪指令确定;,变量的定义 一般在数据段或附加数据段中使用数据定义伪指令 DB、DW、DD、DQ和DT来定义 格式:变量名 数据定义伪指令 表达式,功能:定义了一变量,并开辟了由变量属性所决定的 一 片连续存储区,其存储区 所占字节数=表达式个数*变量的类型。变量的类型:存储单元的大小,由数据定义伪指令定义。,例,2.变量、标号与地址表达式变量,数据定义伪指令:DB、DW、DD、DQ、DT指定变量的类型.BYTE(字节)DB.WORD(字)DW.DWORD(双字)DD.FWORD(3个字)DF.QWORD(4个字)DQ.TBYTE(10个字节)DT 例:BUF DB ABCD12EF;BUF的类型为字节 ARR DW 10,-60,189;ARR的类型为字 TT DD 0A57BD36H;TT的类型为双字,数据定义伪指令,变量定义中的表达式,指定了变量的初值:(i)数值表达式(ii)ASCII字符串(iii)地址表达式(只适用DW和DD两个伪指令)(iv)?变量值不确定(v)重复子句:n DUP(表达式),表示定义了n个数据存储单元(vi)上述(i)(v)组成的系列,各表达式之间用逗号隔开。,例,注意,表达式,DW 地址表达式 当地址表达式含变量名时,初值取变量EA;例:A DW B A,B为变量,则A的初始值为B的偏移地址DD 地址表达式 当地址表达式含变量名时,初始值取变量的EA,变量所在段的段首址 例:A DW B B为变量,则A的初始值为B的偏移地址,段首址,地址表达式,例:DB 3 DUP(A,12H)A,12H,A,12H,A,12H DB 2 DUP(A,2 DUP(3),B)A,3,3,B,A,3,3,B,重复子句:n DUP(表达式),表达式的个数(包括(v)中的重复因子n)确定了存储单元的个数。这一片连续的数据存储单元也称数据存储区,其类型由数据定义伪指令确定在定义一个数据存储区时:变量仅代表该区的第一个数据存储单元;整个数据存储区的类型均与变量相同;建立了一个以变量为首址的数据存储区或以变量为名的数组,表达式(注意),数据段定义的例子,例:数据段定义如下:DATA SEGMENT USE16 A DW M BUF DB AB,0DH,0AH CON EQU500H B DW 0FFAAH MARK=100H D DD BUF M DB 2 DUP(1),2 DUP(2,B)DB 123,1 DATA ENDS请画出数据段中的数据在主存中的存储形式。问题:上例中若分别执行语句:MOV AL,BUF MOV AL,BUF+2 后AL的结果?指令 MOV EDX,M 是否正确?,BUF,A,D,M,B,注意,伪指令EQU及“=”不分配存贮单元;使用直接寻址方式时,变量的类型必须与 指令的要求相符;变量的段必须是当前段。,本例中的注意事项,2.变量、标号与地址表达式标号,(2)标号 标号:是机器指令语句存放地址的符号表示,也可以是子程序名,即子程序入口地址的符号表示;在代码段中定义和引用。标号的属性:标号的段属性:标号的段属性是指定义该标号所在段的段首址。标号的偏移地址:标号的偏移地址是指它所在段的段首址到该标号所代表存储单元的字节距离。标号的类型:分NEAR(近)和FAR(远)两类型,近标号在定义该标号的段内使用,远标号无此限制。,3.变量、标号与地址表达式地址表达式,(3)地址表达式 地址表达式的定义 接触过的地址表达式 地址表达式的属性 地址表达式与数值表达式区别 特殊运算符(i)类型运算符PTR(ii)属性分离算符 使用地址表达式的注意事项,地址表达式的定义,地址表达式是由变量、标号、常量、寄存器(名加方括号)及一些运算符(数值表达式的运算符和特殊运算符)所组成的有意义的式子。,接触过的地址表达式,接触过的地址表达式:直接寻址方式、寄存器间接寻址方式、变址方式、基址加变址方式例如:MOV AX,BUFBX+SI MOV AL,BUF+2 MOV AL,BUFBX MOV WORD PTR DS:1000H,3000H;,;源操作数为地址表达式,;目的操作数为地址表达式,地址表达式的结果是一偏移地址,因此具备段属性、偏移地址和类型。问题:变量定义中,给变量置初始值的地址表达式可以含寄存器符号加方括号吗?例如变量定义:A DW BX 是否正确?,地址表达式的属性,地址表达式的结果:是一偏移地址,它具有段属 性、偏移地址和类型,(一个表达式中一般只出现一 个变量或标号)数值表达式的结果:只有大小,无属性。在特殊情况下(没有用到寄存器、不作为地址访 问),地址表达式的值也可能仅表示一个数值(没 有属性)。例:在变量/常量定义中给变量/常量赋值,或在OFFSET BUF+2语句中)NUM DW BUF1-BUF2(此时可以有多个变量或标号),地址表达式与数值表达式区别,格式:类型 PTR 地址表达式 类型可以是BYTE、WORD、DWORD、FWORD、NEAR、FAR 功能:用来指明紧跟其后的地址表达式的类型属性,但保持它原来的段属性和偏移地址属性不变或者使它们临时兼有与原定义所不同的类型属性。作用,特殊运算符类型运算符PTR,例,作用1:使语句中类型模糊的操作数类型变得明确 ADD BYTE PTR SI,5 ADD WORD PTR SI,5 作用2:临时改变某一操作数地址的类型,使得类型不一致的两地址变为一致。作用3:PTR运算符还可以与EQU或等号“”等伪指令连用,用来将同一存储区地址用不同类型的变量或标号来表示。,注意这两条语句的区别,例,例,类型运算符PTR的三个作用,例 DATA1 DW 1122H,3344H MOV AL,BYTE PTR DATA1;问题1:将最后一条语句改为:MOV EAX,DWORD PTR DATA1 执行该语句后,(EAX)=?比较PTR的作用与C语言的强制类型转换的不同点?问题2:上述最后一条指令中,改变了DATA1的类型是否从此DATA1变为BYTE类型?问题3:是否可以用该运算符改变寄存器的类型?MOV EAX,DWORD PTR SI,将变量DATA1临时改为字节类型,PTR作用2 例:,PTR作用3 例:,例:分析下列程序的执行结果 DATA1 DW 1122H,3344H DATA2 EQU BYTE PTR DATA1 MOV AL,DATA2 MOV BX,DATA1 用PTR算符建立了一个与变量DATA1有相同段 首址和偏移地址的变量DATA2,但它的类型为BYTE,DATA1,DATA2,;22AL,;1122BX,例:阅读下列程序段,指出其中的错误语句 DATA SEGMENTUSE16NUM DB 11H,22H,33H,44H LEN EQU$-NUM DATA END MOV AX,NUM MOV EAX,DWORD PTR NUM MOV SI,OFFSET NUM ADD 2SI,LEN MOV BYTE PTR 2SI,A INC SI DEC BYTE PTRSI,定义符号常量LEN,其值为以变量NUM为首址的数据存储区所占的字节数,类型不一致,出错,临时改NUM双字,注意与C语言强制类型转换的区别(NUM)44332211HEAX,NUM的EASI,目的操作数类型不明确,出错,OPDSI2NUM2,41HNUM2PTR指定OPD类型为字节,类型不明确,出错,OPD-SINUM,由PTR指定为字节类型,注意,类型运算符PTR 例:,a.PTR临时赋予地址表达式的新类型只能在本语句中有效。b.不带方括号的寄存器符号不是地址表达式,不能用PTR改变寄存器的类型,使用PTR注意事项:,格式:属性分离算符 变量或标号 功能:属性分离算符可分离出变量、标号的段、偏移地址、类型的属性值。运算结果为数值常量。a.取段址算符SEG 格式:SEG 功能:分离出其后变量或标号的段首址。b.取偏移算符OFFSE 格式:OFFSET 功能:分离出其后变量或标号的偏移地址。,例,特殊运算符属性分离算符,属性分离算符的例子,DATA SEGMENT USE16 A DW 50,100,B DB ABC DATA ENDS MOV AX,SEG B;MOV DS,AX MOV BX,OFFSET A;MOV DX,2BX;,A,MOV AX,DATA,A的EABX,100DX,B,(1)指令中的地址表达式不允许出现不带方括号 的寄存器符号;例:MOV AX,SI+4 错误语句,MOV AX,SI+4 正确语句(2)在定义变量时,其后表达式不能带寄存器 符号和方括号;例:A DW SI+4,SI+4 错误(3)数值表达式中如果有变量和标号,均是取其EA参加运算。,例,使用地址表达式注意事项,请指出下列程序段中的错误:DW1122H,3344H MOV SI,OFFSET A MOV AX,A MOV BX,SI MOV DL,2SI MOV 4SI,55H,改为:MOV BYTE PTR 4SI,55HMOV WORD PTR 4SI,55H,例,3.2 常用的机器指令语句,3.2.1 80X86指令集及其特点 3.2.2 数据传送指令3.2.3 算术运算指令3.2.4 位操作指令,3.2.1 80X86指令集及其特点,1.80X86指令集 8086 100条基本指令 80386 170条指令 Pentium 300多条2.特点 原8086的16位操作指令都可扩展支持32位操作数;原有16位存储器寻址的指令都可以使用32位的寻址方式;在实方式和虚拟8086方式中段的大小只能为64KB,只有在保护方式下才使用32位段。,3.分类(1)数据传送指令一般数据传送指令 堆栈操作指令:PUSH、POP、PUSHF、POPF标志传送命令:SAHF、LAHFI/O指令地址传送指令(2)算术运算指令(3)位操作指令(4)串操作指令(5)程序控制指令(6)处理机控制指令标志的操作指令:STD、CLD;STI、CCI怎样记住常用的指令?格式、功能、特殊规定,对标志寄存器的影响,3.2.1 80X86指令集及其特点,4.再次强调的问题大多数双操作数的指令,具有相同的语句格式和操作规定格式:标号:操作符 OPD,OPS;注释指令:数据传送指令;算术运算指令 部分位操作指令;串操作指令操作规定:目的操作数与源操作数应有相同的类型。目的操作数不能是立即操作数。操作结束后,运算结果送入目的地址中,源操作 数并不改变。源操作数和目的操作数不能同时为存储器操作数。,3.2.1 80X86指令集及其特点,(2)某些单操作数指令也有相同的语句格式和操作规定,格式:标号:操作符 OPD;注释指令:算术运算和位操作操作规定:操作对象为目的地址中的操作数,操作结束 后,将结果送入目的地址。操作数不能是立即操作数。,3.2.180X86指令集及其特点,3.2.2 数据传送指令,一般数据传送指令(1)传送指令(2)数据交换指令(3)查表转换指令XLAT 地址传送指令(1)传送偏移地址指令,一般数据传送指令 传送指令,A.一般传送指令 MOV 格式:MOV OPD,OPS 功能:(OPS)OPD(字或字节)说明:a.不能实现存贮单元之间的直接数据传送,OPS、OPD不能同时采用存贮器寻址方式。例:将字变量BUF0中的内容传送至字变量BUF1中,只能用以下方式:MOV AX,BUF0MOV BUF1,AX,图,一般传送指令 MOV,MOV指令所允许的数据传送路径及类型,主存储器,立即数,CS DS,ES,FS,GS,SS,双字类型,双字类型,字节类型,字类型,字类型,字节类型,双字类型,字类型,b.不能向CS送数据;IP不能在任何语句中出现。例:“MOV CS,AX”、“MOV AX,IP”均为错误语句。c.OPS和OPD必须类型一致。例:MOV AX,CL 为错误语句。d.立即数不能直接传递至数据段或者附加数据段寄存器中;问题:前面说过指令 MOV ECX,BL 是错误的,若确实想把BL寄存器的有符号数传送到ECX?,一般数据传送指令 传送指令,一般数据传送指令 传送指令,B.有符号数传送指令 格式:MOVSX OPD,OPS(move with sign-extend)功能:将源操作数的符号向前扩展成与 目的操作数相同的数据类型再送入目的地址。MOVSX ECX,BLC.无符号数传送指令 格式:MOVZX OPD,OPS(move with zero-extend)功能:将源操作数的高位全部补0,扩展成与 目的操作数相同的数据类型再送入目的地址中。,例,例 阅读下列程序段,指出运行结束后,EAX、EBX的值。BYTE0 DB 0A8HDWORD0DD 11111111H MOVSX EAX,BYTE0MOV EBX,DWORD0ADD EBX,EAX 运行结束后,(EAX)0FFFFFFA8H,(EBX)111110B9H,有符号数传送指令,一般数据传送指令 数据交换指令,A.一般数据交换指令格式:XCHG OPD,OPS(exchange)功能:(OPD)(OPS),可作八位或十六位交换。例:XCHG AX,DI执行前:(AX)=0001H(DI)=0FFFFH执行后:(DI)=0001H(AX)=0FFFFH,一般数据传送指令 查表转换指令,B.查表转换指令XLAT(table look-up translation)格式:XLAT OPS 或者 XLAT 不带操作数功能:(BX+AL)AL或(EBXAL)AL将(BX)或(EBX)为首址,(AL)为位移量的字节存贮单元中的数据AL,例1,例2,例:将数值4转换成字符4使用查表转换指令的思想,AL,04H,BX/EBX,查表转换指令XLAT,例:阅读程序 ASCII DB 0123456789ABCDEFARR DB 4,0BH,0EH,9OUT1 DB 0,0,0,0,$MOV BX,OFFSET ASCII MOV DI,OFFSET ARR MOV BP,OFFSET OUT1 MOV CX,4NEXT:MOV DL,DI MOV DH,0MOV SI,DXMOV AL,BXSIMOV DS:BP,ALINC DIINC BPDEC CXJNE NEXT,ASCII,ARR,OUT1,BX,DI,BP,修改:MOV AL,DIXLAT ASCII,XLAT指令简化了变址寻址和基址加变址寻址方式的使用。,查表转换指令XLAT,地址传送指令 传送偏移地址指令,传送偏移地址指令格式:LEA OPD,OPS(load effective address)功能:按OPS的寻址方式计算EA,将EA送入指 定的通用寄存器 注意:OPD一定要是16位/32位的通用寄存器OPS一定是一个存贮器地址,可是寄存器间接寻址、基址加变址、变址寻址、直接寻址。如果偏移地址为32位而OPD为16位寄存器,取低16位OPD;如果偏移地址为16位而OPD为32位寄存器,高16位补0后OPD,例1,例2,例:MOV BX,OFFSET ARRMOV SI,OFFSET PLUSMOV POIN,OFFSET MINUSLEA DI,4SI其中 ARR,PLUS,MINUS均为变量,传送偏移地址指令,LEA BX,ARR,LEA SI,PLUS,LEA POIN,MINUS,MOV DI,OFFSET 4SI,例.386DATA SEGMENT USE16 BUF DB ABCDEFNUM DW 72,5,100HPOIN DW 0DATA ENDS MOV ESI,OFFSET NUM LEA ESI,NUMMOV AX,ESI LEA AX,ESILEA DI,ESI4LEA POIN,BUFMOV POIN,OFFSET BUFMOV EBX,12345678HLEA DX,EBX+4321HLEA EAX,EBX+4321HLEA ECX,BX+4321H,传送偏移地址指令,;将NUM的EA即6ESI,;与上一条语句等效,6ESI,;(ESI)72AX,;将ESI所指的存储单元的EA,;即6AX,;取以NUM为首址的第三个字存,;储单元的EA即10DI,;错误语句,因为OPD不是寄存器,;将BUF的EAPOIN,;将低16位9999HDX,;将12349999HEAX,;将高16位补0后,,;00009999HECX,3.2.3算术运算指令,1.加运算指令 ADD、INC2.减运算指令 SUB、DEC、NEG、CMP3.乘运算指令 IMUL、MUL 4.符号扩展指令 CBW、CWD、CWDE、CDQ 5.无符号乘指令 MUL 6.除运算指令 IDIV、DIV,算术运算指令加运算指令,加指令 语句格式:ADD OPD,OPS 功 能:(OPD)(OPS)OPD该指令对标志寄存器的标志位有影响。例:ADD AX,-7FFFH执行前:(AX)0FFFDH(即-3的补码执 行:(AX)-7FFFH补0FFFDH8001H 7FFEHAX执行后:(AX)7FFEH两负数相加,结果为正,运算产生了溢出,结果是错误的,因而OF1。又由于从最高位向前产生了进位,CF1。,1,算术运算指令减运算指令,减法指令 格式:SUB OPD,OPS(subtract)功能:(OPD)(OPS)OPD例:SUB AX,5;(AX)5 AX SUB AX,CX;(AX)(CX)AX,比较指令 格式:CMP OPD,OPS(compare)功能:(OPD)(OPS)比较目的操作数与源操作数,然后根据比较的结果设置标志位,但该结果并不存入目的地址 例:CMP AX,-2JGE LMOV DX,AX,减运算指令,求补指令 格式:NEG OPD(twos complement negation)功能:(OPD)OPD 即0-(OPD)OPD例:NEG AX执行前:(AX)=0FFFFH执行:(AX)=0FFFFH=0001HAX结果:(AX)=0001H例:指出下面程序段执行后所完成的功能B:CMP AX,0 JGE EXIT NEG AXEXIT:,求(AX)的绝对值AX,减运算指令,算术运算指令乘运算指令,(1)有符号数和无符号数的区别复习.数的表示范围不一样.比较大小的标准不一样 例:对于8位16进制数,比较80H和0A8H的大小.判断运算结果是否正确的标准也不一样,例:对有符号数,加、减法运算结果只有OF0时才是正确的;对于无符号数,只有CF0时,运算结果才是正确的.符号扩展不一样,有符号数的补码最高位向左延伸,得到的仍是该数的补码。.常见的无符号数:操作数地址、循环次数、ASCII码。,(2)有符号乘指令有三条 双操作数的有符号乘指令 语句格式:IMUL OPD,OPS(signed integer multiply)功能:(OPD)*(OPS)OPD OPD可为16/32的寄存器,OPS为同类型的寄存器、存储器操作数或立即数。,乘运算指令,三个操作数的有符号乘指令 语句格式:IMUL OPD,OPS,n 功能:(OPS)*n OPD 其中,OPD可为16/32的寄存器,OPS可为同类型的寄存器、存储器操作数,n为立即数例:IMUL AX,BX,-10;(BX)*(-10)AX IMUL EAX,DWORD PTR SI,5;(SI)*5EAX IMUL BX,AX,3,(2)有符号乘指令有三条,单操作数的有符号乘指令 语句格式:IMUL OPS 功 能:字节乘法:(AL)*(OPS)AX字乘法:(AX)*(OPS)DX,AX双字乘法:(EAX)*(OPS)EDX、EAX说明:(a)只需指定源操作数,另一个操作数是隐含的,被乘数和乘积都在规定的寄存器中。源操作数只能是存储器操作数或寄存器操作数而不能是立即数,乘法类型由OPS的类型决定。(b)如果乘积的高位(字节相乘指AH,字相乘指DX,双字相乘指EDX)不是低位的符号扩展,即在AH(或DX/EDX)中包含有乘积的有效位,则CF1、OF1;否则,CF0,OF0。,例,(2)有符号乘指令有三条,例:写出实现500H*60HSI,DI的程序段。MOV AX,500HMOV BX,60HIMUL BX字乘法结果高位在DX中,低位在AX中,(DI)=0001H,(SI)=0E000H问题:若不要求将结果送SI,DI,还有其他写法吗?例:写出实现500H*(-2)的程序段。MOV AX,500HMOV BX,-2IMUL BX结果:(AX)=0F600H(DX)=0FFFFH,MOV EAX,500HIMUL EBX,EAX,60H,MOV AX,500HIMUL-2,单操作数的有符号乘指令,算术运算指令符号扩展指令,(1)将字节转换成字指令语句格式:CBW(convert byte to word)功能:将AL中的符号扩展至AH中,操作数隐含且固定例:MOV BX,04A7BH MOV AL,A3H CBW;将字节扩展成字 ADD BX,AX 执行后:(AX)=0FFA3H,(BX)=4A1EH问题:若想扩展BL至BH该怎样写出指令?,0/1,AH,AL,(2)将字转换成双字指令语句格式:CWD(convert word to double word)功 能:将AX中的符号扩展至DX中,由 DX,AX组成双字(3)CWDE 将AX中的有符号数扩展为32位数EAX(4)CDQ 将EAX中的有符号数扩展为64位数EDX、EAX例:MOV DX,0MOV AX,0FFA3HCWD执行后:(AX)=0FFA3H(DX)=0FFFFH注意:上述指令的操作数是隐含且固定的。,符号扩展指令,算术运算指令无符号乘指令,无符号乘指令 语句格式:MUL OPS 功 能:字节乘法:(AL)*(OPS)AX 字乘法:(AX)*(OPS)DX,AX 双字乘法:(EAX)*(OPS)EDX、EAX说明:(1)与有符号乘法指令之间的区别:参与运算的操作数和运算后的结果均为无符号数。(2)如果乘积的高位不为0,即在AH(或DX/EDX)中包含有乘积的有效位,则CF1、OF1;否则,CF0,OF0。,算术运算指令除运算指令,无符号除指令 语句格式:DIV OPS(unsigned divide)功 能:字节除法:(AX)/(OPS)AL(商)、AH(余数)字除法:(DX、AX)/(OPS)AX(商)、DX(余数)双字除法:(EDX、EAX)/(OPS)EAX(商)、EDX(余数)说明:(a)除法类型由OPS的类型决定。OPS不能是立即操作数,且指令执行后,(OPS)不变。(b)如果除数为0或运算结果溢出,则会产生溢出中断,立即中止程序的运行。但系统未定义除法指令影响条件标志位。注意:除法指令的被除数是隐含的。,(2)有符号除指令语句格式:IDIV OPS(signed integer divide)功 能:字节除法:(AX)/(OPS)AL(商)、AH(余数)字除法:(DX,AX)/(OPS)AX(商),DX(余数)双字除法:(EDX、EAX)/(OPS)EAX(商)、EDX(余数)说明:(a)、(b)两点与DIV语句相同;(c)相除后,商的符号与数学上规定相同,余数与被除数同号。,例1,例2,除运算指令,例:写出计算4001H4的程序段。MOV AX,4001H CWD 符号位扩展到DX,MOV CX,4IDIV CX(DX,AX)/(CX)结果:(AX)=1000H,(DX)=1问题:该题能否用字节除?如果将被除数改为4001H,程序段为:MOV AX,4001H CWD MOV CX,4 IDIV CX 运算的结果为:(AX)0F000H,(DX)0FFFFH假如被除数为-4001H,除数为-4,相除后的余数也为0FFFFH。,因为商是4位十六进制数,一个字节放不下。,有符号除指令,例:阅读下列程序段,指出程序的功能。.386DATA SEGMENT USE16X DW 25Y DW 20Z DW 74V DW 50F DD 2 DUP(0);DATA ENDSCODE SEGMENT USE16ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV AX,X CWDE MOV EBX,EAX MOV AX,Y,CWDEIMUL EBX,EAX MOV AX,ZCWDEADD EBX,EAX SUB EBX,540 MOV AX,VCWDESUB EAX,EBX XCHG EBX,EAXMOV AX,XCWDE XCHG EBX,EAXCDQ IDIV EBXMOV F,EAXMOV F+4,EDX,计算F=(V-(X*Y+Z-540)/X,有符号除指令 例题,DATA SEGMENT USE16X DW 25Y DW 20Z DW 74V DW 50F DW 2 DUP(0);DATA ENDS MOV BX,XIMUL BX,YADD BX,ZSUB BX,540MOV AX,VSUB AX,BXCWDIDIV XMOV F,AXMOV F+2,DX,有符号除指令 例题(续),3.2.3 位操作指令,逻辑运算指令(1)逻辑乘指令AND(and)(2)测试指令TEST(3)逻辑加指令OR(4)按位加指令XOR异或(5)位操作指令的特点移位指令(1)算术、逻辑移位指令(2)循环移位指令,1.逻辑运算指令逻辑乘指令AND,逻辑乘指令 格式:AND OPD,OPS(and)功能:(OPD)(OPS)OPD例 AND AX,0FH执行前:(AX)=0FBBAH执行后:(AX)=0AH 用途该指令主要用来将目的操作数中清除与源操作数置0的对应位,因此可用来将存贮器或寄存器中不需要的部分去掉。将需要部分分离出来。例:将DX中的11 8位分离出来使用以下指令:AND DX,0F00H(即将源操作数中的11 8位置1),1.逻辑运算指令测试指令TEST,测试 指令 格式:TEST OPD,OPS(test)功能:(OPD)(OPS)根据结果设置标志位检测与源操作数中为1的位相对应的目的操作数中的那几位是否为0(或为1),根据测试结果置OF、CF、SF、ZF位,后面往往跟着转移指令,根据测试结果确定转移方向。,例,例:要测试AX中第12位是否为0,为0转L,则要使用如下指令:15 12 0TEST AX,1000HJZ L如果要同时测试第15位和第7位是否同时为0,为0转L 15 7TEST AX,8080H JZ L,0001 0000 0000 0000,1000 0000 1000 0000,测试指令TEST,1.逻辑运算指令逻辑加指令OR,逻辑加指令OR 格式:OR OPD,OPS(or)功能:(OPD)(OPS)OPD例 OR AX,55H执行前:(AX)=0AAAAH执行后:(AX)=0AAFFH该语句主要用于:在目的操作数中置位与源操作数为1的对应位,其余位不变。,三条逻辑指令用法的选择,如果要将目的操作数中某些位清0,用AND如果要将目的操作数中某些位置1,用OR用来测试目的操作数中某一位或某几位是否为0或1,而结果不变,用TEST操作数自身相或、相与结果不变。,1.逻辑运算指令按位加指令XOR,按位加指令异或 格式:XOR OPD,OPS(exclusive or)功能:(OPD)(OPS)OPD运算法则:01=1,10=1,11=0,00=0例:XOR AX,0AAAAH执行前:(AX)=0FFFFH111111111111111110101010101010100101010101010101结果:(AX)=5555H作用:主要用来将目的操作数中与源操作数置1的对应位取反。操作数自身异或,结果为0,CF=0,位操作指令的特点,自身相或相与结果不变;自身按位加结果为0,“XOR AX,AX”之后(AX)=0;置位。如果(AL)=9,将(AL)+30HAL,用“ADD AL,30H”或“OR AL,30H”;测试。例如,测试SI中的第3、7、11、15为是否同时为0,为0 转ERR:TEST SI,8888HJE ERR,1011 0111 1000 0111,),1000 1000 10001000,1000 0000 1000 0000,15 11 7 3 0,例,例:阅读下列程序指出程序所完成的功能。.386DATA SEGMENT USE16 BUF DB 9234 BCD DB 4 DUP(0)DATA ENDS START:MOV AX,DATA MOV DS,AX MOV CX,4 LEA SI,BUF;取BUF缓冲区SI LEA DI,BCD+3;取BCD缓冲区DI L:MOV AL,SI;取BUF中一字符AL AND AL,0FH;清除AL高位,使其ASSCII码变为数字AL,位操作指令的特点,MOV DI,AL;(AL)BCD区INC SIDEC DIDEC CXJNE LMOV AH,4CHINT 21HCODE ENDSEND START功能:将BUF中四位数字字符的ASSCII码转换成非压缩的BCD码BCD区。,位操作指令的特点,移位指令,算术移位指令逻辑移位指令循环移位指令双精度移位指令前三类指令有统一的语句格式:操作符 OPD,n算术逻辑移位操作符:SXL,SXR(X=H,A)循环移位操作符:RXL,RXR(X=O,C),移位指令的特点,将目的操作数中的所有位按操作符所规定的方式移动n所规定的次数(031),然后将结果送入目的地址中。目的操作数是由各种寻址方式所提供的8位、16位或32位的寄存器数据或存储器数据。不管哪种方式的移位都会将所移出的最后一位放入CF位,移位指令算术、逻辑移位指令,算术左移和逻辑左移指令SAL/SHL格式:SHL OPD,n 或 SAL OPD,n(shift logical left/shift arithmetic left)功能:将OPD的内容向左移动n指定的位数,低位补入相应个数的0。CF的内容为最后移入位的值,移动方式为:,例,例:SAL AX,1执行前:(AX)=0044H,CF=1结果:CF=0,(AX)=0088H注意:当一个数乘2的N次方时,可以用算术左移或逻辑左移N位的方法实现,比用乘法指令效率高。但若发生溢出则可能得不到正确的结果。问题:设(SI)=00FFH,现需要计算(SI)*8-SI,请写出实现语句。,算术左移和逻辑左移指令SAL/SHL,逻辑右移指令SHR 格式:SHR OPD,n(shift logical right)功能:将(OPD)向右移动n规定的次数,最高位补入相应个数的0,CF的内容为最后移入位的值。SHR指令右移n位,实现无符号数

    注意事项

    本文(汇编语言程序设计 第三章 ppt课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开