欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Intel处理器指令系统及汇编语言.ppt

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

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

    Intel处理器指令系统及汇编语言.ppt

    数据定义语句数据定义语句类型类型用途用途类型类型用途用途BYTE8位无符号整数位无符号整数FWORD48位整数位整数(可在保护模式可在保护模式下用作远指针下用作远指针)SBYTE8位有符号整数位有符号整数QWORD64位整数位整数WORD16位无符号整数位无符号整数(可在实模式下用可在实模式下用作近指针作近指针)TBYTE80位整数位整数SWORD16位有符号整数位有符号整数REAL432位位IEEE短实数短实数DWORD32位无符号整数位无符号整数(可在保护模式下可在保护模式下用作近指针用作近指针)REAL864位位IEEE长实数长实数SDWORD 32位有符号整数位有符号整数REAL10 80位位IEEE扩展精度实数扩展精度实数早期版本:早期版本:DB、DW、DD、DQ、DT1 语句格式语句格式名称名称 数据定义伪指令数据定义伪指令 初始值初始值,初始值初始值例:例:.datavalue1 BYTE 10hvalue2 BYTE?list1 BYTE 10,20,30,40 BYTE 50,60,70,80list2 BYTE 32,41h,00100010b,agreeting BYTE Good afternoon,0dh,0ah,0array WORD 5 DUP(?);5个未初始化的值个未初始化的值value3 DWORD 12345678h78h56h34h0000:0001:0002:12h0003:Intel处理器采用小端顺序:处理器采用小端顺序:value3+value3+value3+value3+2符号常量符号常量不占用任何实际的存储空间。不占用任何实际的存储空间。n等号等号例:例:COUNT=500ESC_key=27array byte COUNT DUP(0)mov cx,COUNTmov al,ESC_keynEQU如如 maxintequ 0ffh3n计算数组和字符串的大小计算数组和字符串的大小例:例:list1 BYTE 10,20,30,40 List1Size=($-list1)myString BYTE This is a long string,BYTE Containing any number BYTE of characters,0dh,0ah MyString_len=($-myString)list2 WORD 1000h,2000h,3000h,4000h List2Size=($-list2)/24微机原理及接口技术第3章 Intel处理器指令系统及汇编语言三、数据传送、寻址和算数运算5本节要点本节要点n数据传送指令数据传送指令n加法和减法加法和减法n和数据传送相关的操作符和伪指令和数据传送相关的操作符和伪指令n间接寻址间接寻址nJMP和和LOOP指令指令6n立即操作数(立即操作数(immediate)limm:8、16或或32位立即数位立即数limm8:8位立即数(字节)位立即数(字节)limm16:16位立即数(字)位立即数(字)limm32:32位立即数(双字)位立即数(双字)n寄存器操作数(寄存器操作数(register)lreg:任意的通用寄存器:任意的通用寄存器lsreg:16位段寄存器位段寄存器CS、DS、SS、ES、FS、GSlr8:AH、AL、BH、BL、CH、CL、DH、DLlr16:AX、BX、CX、DX、SI、DI、SP、BPlr32:EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBPn内存操作数(内存操作数(memory)lmem:8、16或或32位内存操作数位内存操作数(一)数据传送指令(一)数据传送指令 1.操作数类型操作数类型7n其它形式其它形式lr/m8:8位操作数(位操作数(8位通用寄存器或内存字节)位通用寄存器或内存字节)lr/m16:16位操作数(位操作数(16位通用寄存器或内存字)位通用寄存器或内存字)lr/m32:32位操作数(位操作数(32位通用寄存器或内存双字)位通用寄存器或内存双字)(一)数据传送指令(一)数据传送指令 1.操作数类型操作数类型8.datavar1 BYTE 55hvar2 BYTE 10hvar3 BYTE 0aah.codemov ax,datamov ds,axmov al,1040h;假设假设var1位于偏移位于偏移1040h处处mov al,var1;使用使用var1的符号名的符号名mov al,var1;上一条语句的另一种写法上一条语句的另一种写法mov al,var1+2;直接偏移操作数直接偏移操作数(一)数据传送指令(一)数据传送指令 2.直接内存操作数直接内存操作数编译器会自动将名称转换为数字编译器会自动将名称转换为数字偏移,然后根据该偏移来寻址。偏移,然后根据该偏移来寻址。9mov destination,source回忆:回忆:C+或或Java中的赋值语句中的赋值语句dest=source;nMOV指令需要遵循的规则:指令需要遵循的规则:l两个操作数的两个操作数的尺寸尺寸必须必须一致一致。l两个操作数不能同时为两个操作数不能同时为内存操作数内存操作数。l目的操作数目的操作数不能是不能是CS,EIP和和IP。l立即数立即数不能直接送至不能直接送至段寄存器段寄存器。(一)数据传送指令(一)数据传送指令 3.MOV指令指令10nMOV指令的具体格式:指令的具体格式:mov reg,regmov mem,regmov reg,memmov mem,immmov reg,immn段寄存器仅用于实地址模式下运行的程序。段寄存器仅用于实地址模式下运行的程序。mov r/m16,sregmov sreg,r/m16n内存之间的移动内存之间的移动通过寄存器暂存。通过寄存器暂存。(一)数据传送指令(一)数据传送指令 3.MOV指令指令.datavar1 WORD?var2 WORD?.codemov ax,var1mov var2,ax11n含义:含义:move with zero-extendn格式:格式:movzx r32,r/m8movzx r32,r/m16movzx r16,r/m8(一)数据传送指令(一)数据传送指令 4.整数的零整数的零/符号扩展符号扩展 1)MOVZX指令指令1000110110001101000000000源操作数源操作数目的操作数目的操作数12例:例:(一)数据传送指令(一)数据传送指令 4.整数的零整数的零/符号扩展符号扩展 1)MOVZX指令指令mov bx,0A69Bhmovzx eax,bxmovzx edx,blmovzx cx,bl.databyte1 BYTE 9Bhword1 WORD 0A69Bh.code movzx eax,word1 movzx edx,byte1 movzx cx,byte1 13n含义:含义:move with sign-extendn格式:格式:movsx r32,r/m8movsx r32,r/m16movsx r16,r/m8(一)数据传送指令(一)数据传送指令 4.整数的零整数的零/符号扩展符号扩展 2)MOVSX指令指令100011011000110111111111源操作数源操作数目的操作数目的操作数mov bx,0A69Bhmovsx eax,bxmovsx edx,blmovsx cx,bleax=FFFFA69Bhedx=FFFFFF9Bhcx=FF9Bh例:例:14n含义:含义:exchange data,交换两个操作数的内容。,交换两个操作数的内容。n格式:格式:xchg reg,regxchg reg,memxchg mem,regn交换两个内存操作数:交换两个内存操作数:利用寄存器,利用寄存器,MOV与与XCHG结合使用。结合使用。mov ax,val1xchg ax,val2mov val1,ax(一)数据传送指令(一)数据传送指令 5.XCHG指令指令xchg ax,bxxchg ah,alxchg var1,bxxchg eax,ebx例:例:15(一)数据传送指令(一)数据传送指令 6.直接偏移操作数直接偏移操作数.dataarrayB BYTE 10h,20h,30h,40h,50h.codemov al,arrayB;AL=mov al,arrayB+1;AL=mov al,arrayB+2;AL=mov al,arrayB+20;AL=?注意:注意:nMASM并不要求一定要使用方括号。并不要求一定要使用方括号。lmov al,arrayB+1 等同于等同于 mov al,arrayB+1nMASM对有效地址没有内建的范围检查模块。对有效地址没有内建的范围检查模块。10h20h30h16(一)数据传送指令(一)数据传送指令 6.直接偏移操作数直接偏移操作数.dataarrayW WORD 100h,200h,300h.codemov ax,arrayW;AX=100hmov ax,arrayW+2;AX=200h应用:数组元素的寻址应用:数组元素的寻址.dataarrayD DWORD 10000h,20000h.codemov eax,arrayD;EAX=10000hmov eax,arrayD+4;EAX=20000h17n含义:含义:increment、加、加1和和decrement、减、减1。n格式:格式:inc reg/memdec reg/mem(二)加法和减法(二)加法和减法 1.INC和和DEC指令指令.datamyWord WORD 1000h.codeinc myWord;1001hmov bx,myWorddec bx;1000h18n将将同尺寸同尺寸的的源操作数源操作数和和目的操作数目的操作数相加,结果在相加,结果在目的目的操作数操作数中(不改变中(不改变源操作数源操作数)。)。n格式:格式:add 目的操作数目的操作数,源操作数源操作数(二)加法和减法(二)加法和减法 2.ADD指令指令.datavar1 DWORD 10000hvar2 DWORD 20000h.codemov eax,var1add eax,var2;30000h影响的标志位:影响的标志位:CF、ZF、SF、OF、AF、PF19n将将源操作数源操作数从从目的操作数目的操作数中减掉,结果在中减掉,结果在目的操作目的操作数数中(不改变中(不改变源操作数源操作数)。)。n格式:格式:sub 目的操作数目的操作数,源操作数源操作数(二)加法和减法(二)加法和减法 3.SUB指令指令.datavar1 DWORD 30000hvar2 DWORD 10000h.codemov eax,var1sub eax,var2;20000h影响的标志位:影响的标志位:CF、ZF、SF、OF、AF、PF20nNEG reg/mem;reg/mem0reg/memn求补,将操作数按位取反、末位加求补,将操作数按位取反、末位加1。n影响的标志位:影响的标志位:CF、ZF、SF、OF、AF、PFnmov ax,0ff64h neg al;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1(二)加法和减法(二)加法和减法 4.NEG指令指令21Rval=-Xval+(Yval Zval)(二)加法和减法(二)加法和减法 5.例子例子:实现算数表达式实现算数表达式.dataRval SDWORD?Xval SDWORD 26Yval SDWORD 30Zval SDWORD 40.codemov eax,Xvalneg eax;EAX=mov ebx,Yvalsub ebx,Zval;EBX=add eax,ebxmov Rval,eax;-26-10-3622(二)加法和减法(二)加法和减法 6.算数运算影响的标志算数运算影响的标志mov cx,1sub cx,1;ZF=mov ax,0FFFFhinc ax;ZF=inc ax;ZF=n零标志和符号标志零标志和符号标志110mov cx,0sub cx,1;SF=add cx,2;SF=1023(二)加法和减法(二)加法和减法 6.算数运算影响的标志算数运算影响的标志mov al,0FFhadd al,1;CF=n进位标志(无符号算数运算)进位标志(无符号算数运算)INC和和DEC指令指令不影响进位标志不影响进位标志。1mov ax,00FFhadd ax,1;CF=0mov ax,0FFFFhadd ax,1;CF=1mov al,1sub al,2;CF=124(二)加法和减法(二)加法和减法 6.算数运算影响的标志算数运算影响的标志mov al,+127add al,1;OF=n溢出标志(有符号算数运算)溢出标志(有符号算数运算)1mov al,-128sub al,1;OF=1mov al,-128;AL=10000000bneg al;AL=,OF=10000000b 1mov al,+127;AL=01111111bneg al;AL=,OF=10000001b 0其中,其中,Cn为为符号位符号位产生的产生的进进位位,即标志位,即标志位CF;Cn-1为为最高有效位最高有效位向向符号位产生的符号位产生的进位进位。25(二)加法和减法(二)加法和减法 6.算数运算影响的标志算数运算影响的标志nCPU如何知道一个数字是有符号的还是无符号的?如何知道一个数字是有符号的还是无符号的?lCPU并不知道并不知道 只有程序员才知道。只有程序员才知道。lCPU在执行指令之后机械地设置各种状态标志,在执行指令之后机械地设置各种状态标志,它并不知道哪些对程序员是重要的,程序员自己它并不知道哪些对程序员是重要的,程序员自己来选择解释哪些标志和忽略哪些标志。来选择解释哪些标志和忽略哪些标志。26nOFFSET 操作符操作符nPTR 操作符操作符nTYPE 操作符操作符nLENGTHOF 操作符操作符nSIZEOF 操作符操作符(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令27n返回返回数据标号数据标号的的偏移地址偏移地址(标号标号距距数据段开始数据段开始的距离,的距离,以以字节字节为单位)。为单位)。n保护模式下偏移总是保护模式下偏移总是32位的。位的。n实模式下偏移只有实模式下偏移只有16位。位。(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 1.OFFSET操作符操作符28n例:假设例:假设bVal位于位于00303000h处。处。.databVal BYTE?wVal WORD?dVal1 DWORD?dVal2 DWORD?.codemov esi,OFFSET bVal;ESI=mov esi,OFFSET wVal;ESI=mov esi,OFFSET dVal1;ESI=mov esi,OFFSET dVal2;ESI=mov esi,OFFSET bVal+1(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 1.OFFSET操作符操作符0030300000303001003030030030300729n用来说明操作数的尺寸。用来说明操作数的尺寸。n必须和以下标准数据类型联合使用:必须和以下标准数据类型联合使用:BYTE,SBYTE,WORD,SWORD,DWORD,SDWORD,FWORD,QWORD,TBYTE(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 2.PTR操作符操作符30例:例:(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 2.PTR操作符操作符.datamyDouble DWORD 12345678h.codemov ax,myDouble;错误错误mov ax,WORD PTR myDouble;ax=?mov ax,WORD PTR myDouble+2;ax=?mov bl,BYTE PTR myDouble;bl=?5678h1234h78h偏移偏移字节字节myDouble000078myDouble+1000156myDouble+2000234myDouble+300031231n返回按字节计算的变量的单个元素的大小。返回按字节计算的变量的单个元素的大小。n例:例:.datavar1 BYTE?var2 WORD?var3 DWORD?var4 QWORD?(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 3.TYPE操作符操作符表达式表达式值值TYPE var1TYPE var2TYPE var3TYPE var4124832n计算数组中元素的个数。计算数组中元素的个数。n例:例:(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 4.LENGTHOF操作符操作符.databyte1 BYTE 10,20,30array1 WORD 30 DUP(?),0,0array2 WORD 5 DUP(3 DUP(?)arrar3 DWORD 1,2,3,4digitStr BYTE 12345678,0表达式表达式值值LENGTHOF byte1LENGTHOF array1LENGTHOF array2LENGTHOF array3LENGTHOF digitStr330+2534933SIZEOF返回值返回值LENGTHOF返回值返回值TYPE返回值返回值例:例:(三)和数据相关的(三)和数据相关的操作符操作符和和伪指令伪指令 5.SIZEOF操作符操作符.dataintArray WORD 32 DUP(0)表达式表达式值值TYPE intArrayLENGTHOF intArraySIZEOF intArray2326434n汇编语言中如何处理数组?汇编语言中如何处理数组?l完全使用直接寻址完全使用直接寻址 不切实际不切实际l解决办法:解决办法:用用寄存器寄存器作为作为指针指针,通过改变指针寄存器的值来,通过改变指针寄存器的值来访问数组中的不同元素,这种寻址方式称为访问数组中的不同元素,这种寻址方式称为寄存寄存器间接寻址器间接寻址,存放地址的,存放地址的寄存器寄存器称为称为间接操作数间接操作数。(四)间接寻址(四)间接寻址 1.间接操作数(寄存器间接寻址)间接操作数(寄存器间接寻址)35n可以是任何用方括号括起来的可以是任何用方括号括起来的32位通用寄存器位通用寄存器(EAX,EBX,ECX,EDX,ESI,EDI,EBP、ESP)。例:)。例:.dataval1 BYTE 10h.codemov esi,OFFSET val1mov AL,esimov esi,BLn实地址模式实地址模式下只能用下只能用SI,DI,BX,BP。通常尽量避。通常尽量避免使用免使用BP(BP常用来寻址堆栈而不是数据段)。常用来寻址堆栈而不是数据段)。(四)间接寻址(四)间接寻址 1.间接操作数(寄存器间接寻址)间接操作数(寄存器间接寻址).dataval1 BYTE 10h.codemain proc mov si,OFFSET val1 mov AL,si;AL=10h36nPTR与间接操作数的联合使用与间接操作数的联合使用例:例:inc esi;error:operand must have sizeinc BYTE PTR esi(四)间接寻址(四)间接寻址 1.间接操作数(寄存器间接寻址)间接操作数(寄存器间接寻址)37例:三个双字相加例:三个双字相加.dataarrayD DWORD 10000h,20000h,30000h.codemov esi,OFFSET arrayDmov eax,esiadd esi,4add eax,esiadd esi,4add eax,esi(四)间接寻址(四)间接寻址 2.数组数组;=10000h;=20000h;=30000h38例:例:.dataarrayB BYTE 10h,20h,30h.codemov esi,0mov al,arrayB+esi;mov al,arrayBesi;mov esi,OFFSET arrayBmov al,esi;mov al,esi+1;mov al,esi+2;n实模式下只能使用实模式下只能使用SI,DI,BX,BP寄存器。寄存器。(尽量避免使用(尽量避免使用BP寄存器)寄存器)(四)间接寻址(四)间接寻址 3.变址操作数(寄存器相对寻址)变址操作数(寄存器相对寻址)AL=10h 同上,另一种格同上,另一种格式式 AL=10h AL=20h AL=30h39

    注意事项

    本文(Intel处理器指令系统及汇编语言.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开