汇编语言部分知识点整理_第1页
汇编语言部分知识点整理_第2页
汇编语言部分知识点整理_第3页
汇编语言部分知识点整理_第4页
汇编语言部分知识点整理_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上8大通用寄存器:EAX 累加器 常用、放数据 EBX 基址寄存器 常用、放地址ECX 计数器 少用、多用于循环操作、控制循环次数egloopEDX 数据寄存器 常用!放数据(要输出的字符串地址放在DX、字符的ASCII码放在DL里ESI 源变址寄存器 放源操作数(数组或字符串)的地址 即指向他EDI 目的变址寄存器 放目的操作数(数组/字符串)的地址 即指向他EBP 基址指针寄存器 一般不用,指向堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量ESP 堆栈指针寄存器 指向栈顶的数据,在涉及堆栈操作的指令中自加自减,一般不能自主变化。6大段寄存器:CS

2、 代码段,存放程序中的指令代码SS 堆栈段,指明程序使用的堆栈区域DS 数据段,存放当前运行程序所用的数据ES 附加数据段 特别的:专为处理数据串设计的串操作指令必须使用附加数据段作为其目的操作数的存放区域。FS 附加数据段GS 附加数据段另外两个常用寄存器:FLAGS 状态寄存器:CF(进位) ZF(零) OF(溢出) PF(奇偶)SF(符号)AF(调整 一般不用) (DF IF)IP 16位(EIP 32位) 指令指针寄存器,专门用来存放将要 执行的指令在主存中的位置。特别的EIP有自动增量功能。一般不能改,不可中断。但可以调整其指令执行顺序实现循环MASM操作符:对常量、变量、地址等进行

3、操作的关键字。Eg:+ - * / offset(取得变量的偏移地址)程序模板:;example.asm in DOS.model small.486.stack(可以没有).data(可以没有);数据定义 eg:msg db hello,Sarah!.code;定义代码段.startup;程序执行开始,同时设置数据段寄存器DS指向程序的数据段;主程序eg:mov dx,offset msg 等等.exit;程序执行结束,返回DOS;子程序(可以没有).end;汇编结束调用DOS操作系统功能:Eg:mov ah,9;实现输出一个字符串(DX存放其字符串地址)Int 21hEg:mov ah,2

4、;实现输出一个字符(DL存放其ASCII码)Int 21hEg:mov ah,0ah;实现输入一个字符串(DX指向其首地址=offset msg +2)Int 21hEg:mov ah,1;实现输出一个字符串(AL存放输入字符的ASCII码)Int 21h;调用指令,不可少!编译连接:ML eg101.asm运行:eg101.asm常用的地址和类型操作符:属性操作符作用地址将括起的表达式作为存储器的地址指针$返回当前偏移地址offset返回变量名所在段的偏移地址类型(DB DW DD DF DQ DT) 1 2类型名 PTR 变量名将变量名按照指定类型使用Type 变量名返回一个字量数值,表明

5、变量名类型Lengthof 变量名返回整个变量的数据项数Sizeof 变量名返回整个变量占用的字节数Eg:Mov bx,wvar2Mov edx,$Mov bx,offset xMov ax,word ptr bvarMov bx , type bvarmov si, lengthof arrayMov di , sizeof array数据寻址方式如何访问操作数1立即数寻址:立即数:已经随指令代码进入处理器的数据,可直接使用。只用于源操作数;2寄存器寻址:数据已经事先保存在处理器的寄存器里。寄存器操作数(使用寄存器名表示他保存的数据。)可同时或单独用于目的/源操作数。要保持前后类型一致(同样

6、长度)。3存储器寻址:数据还在主存中,需要通过段基地址:偏移地址默认:一般数据在DS段寄存器;(有效地址EA偏移地址 下同)读取指令在CS段寄存器;(EIP)堆栈操作在SS段寄存器;(ESP)EBP、ESP为基地址的数据访问在SS段寄存器;(有效地址EA)串指令源操作数在DS段寄存器;(ESI)串指令的目的操作数在ES段寄存器;(EDI)段基地址由默认或指定的段寄存器指明;所以指令只需说明偏移地址。存储器操作数寻址使用的偏移地址常被称为有效地址(EA)偏移地址 32位有效地址=基址寄存器+(变址寄存器*比例)+位移量 -32位基址寄存器均可;变址寄存器不能是ESP;比例=1/2/4/8字节;位

7、移量是8/32位 16位有效地址=基址寄存器+变址寄存器+位移量基址寄存器只能是BX/BP;变址寄存器只能是SI/DI;位移量是8/16位有符号方式分类如表:直接寻址Mov ax,count ;count是变量寄存器间接寻址Mov al,bx ;bx中放的是地址,bx代表地址指向的数据(类型不确定),所以必须有明确类型的操作数eg:al;相当于:MOV AL , DS:2000H寄存器相对寻址MOV ESI , EBX+4MOV EAX , COUNTESI ;变量count的偏移地址+ESI变址寻址MOV EDI , EBX+ESIMOV EAX , EBX+EDX+80H带比例的变址寻址M

8、OV EDI , EBX*4+ESIMOV EAX , EBX+EDX*8-80H指令助记符 reg , imm/reg/mem指令助记符 mem , imm/reg指令汇总表:大类型小类型指令助记符注意/要求举例数据传送类通用传送MOV1. 双操作数指令的目的操作数与源操作数类型一致2. 类型一致的两个操作数之一必须有明确的类型3. 不允许两个操作数都是主存单元4. 注意对专用寄存器进行操作的指令Eg:mov esi,edxMov byte ptr ebx,255Mov ax , dataMov ds,axPs:立即数不能直接传送给段寄存器XCHG交换源操作数和目的操作数的内容。XCHG r

9、eg , reg/memXchg mem/reg , reg1. 不能是立即数2. 不支持存储器与存储器之间的交换Xchg esi ,ediXchg esi ,edi堆栈操作PUSH堆栈就像一条水平管道(左小右大)中的一段垂直的下方的走不通的岔路(上大下小)。ESP指向栈顶(栈最外面的元素,地址最小的元素)。所以进栈ESP-;出栈ESP+;Push是进栈操作。先将ESP减小为当前栈顶,再将数据传送到当前栈顶。=sub + mov堆栈的应用:1. 可用于临时存放数据,以便随时恢复;2. 利用堆栈实现主子程序间传递参数;3. 还常用于子程序的寄存器保护和恢复。POPPop是出栈操作。先将栈顶数据传

10、送到寄存器/存储单元中,再将ESP+。 =mov + add地址传送LEA获取有效地址并传送至16/32位通用寄存器中。LEA r16/r32,mem效果等同于offset;Lea在指令执行时获取偏移地址;Lea ESI ,dvarPs:区别:Offset在汇编阶段获取偏移地址。其他标志传送指令:CLC STC等输入输出指令:IN OUT INS OUTS REP算术运算类状态标志CF 针对无符号整数运算。有进位/借位=1OF 针对有符号整数运算。有溢出=1ZF 整数运算。结果为零=1SF 针对有符号整数运算。结果为正数=1PF 反映低8位1的个数为偶数=1AF 针对加减运算。低4位有进位=1

11、加法指令ADD影响全部标志位。ADD A,B 结果送到AA不是立即数ADD AX , 3FFFHADC影响全部标志位。与ADD相结合实现多精度的加法。A+B+CF = AA不是立即数INC不影响标志位对操作数加1再将结果送回原处INC reg/mem减法指令SUB影响全部标志位。不带进位的减法:A-B=ASBB影响全部标志位带进位的减法: A-B-CF=ADEC不影响标志位自减。A-NEG影响全部标志位求补指令。0-A=ACMP影响全部标志位只根据结果影响标志位,但操作数值不变主要影响SFCmp ax,dx前更大:SF=1;后更大:SF=0;elseZF=1乘法和除法指令隐含使用eax、edx

12、MUL IMUL 无符号乘法/有符号乘法Mul reg/mem :AX=AL*r8/m8DX.AX=AX*r16/m16EDX.EAX=EAX*r32/m32DIV reg/memIDIV reg/mem无符号除法/有符号除法AX除r8/m8AH是余数,AL是商DX.AX除r16/m16DX是余数,AX是商EDX.DAX除r32/m32EDX是余数,EAX是商其他运算指令MOVZX MOVSX 零位扩展,符号扩展位数加长,大小不变CBW CWD CWDE CDQ符号扩展指令位操作类(针对二进制位进行操作,实现位控制)逻辑运算指令不为0即为真AND不为0即为真。按位与。返回结果。设置标志CF=O

13、F=0根据结果影响SF.ZF.PFOR按位或,返回结果。设置标志CF=OF=0根据结果影响SF.ZF.PFNOT按位逻辑非。返回结果。不影响标志位。XOR按位逻辑异或。返回结果。异或:相同为1,不同为0.设置标志CF=OF=0根据结果影响SF.ZF.PFTEXT按位与,不返回结果。原操作数不变。设置标志CF=OF=0根据结果影响SF.ZF.PF移位指令SHL=SAL逻辑/算术左移。最低位补0,最高位进CF。逻辑左移1位=无符号数*2SHR逻辑右移。最高位补0,最低位进CF。逻辑右移1位=无符号数/2SAR算术右移。最高位不变,最低位进CF。循环移位指令ROL不带进位循环左移最高位进入CF和最低

14、位。按指令功能设置进位标志CF,但不影响SF ZF PF标志ROR不带进位循环右移最低位进入CF和最高位RCL带进位循环左移最高位进入CF,原CF中的数进入最低位。RCR带进位循环右移最低进入CF,原CF中的数进入最高位。程序结构:顺序按书写的前后顺序执行每条指令。分支首先利用CMP、TEXT、加减运算、逻辑运算等影响状态标志的指令形成条件,然后利用条件转移指令判断由标志表达的条件,并根据状态控制程序转移到不同的程序段。类型方法指令用法无条件转移指令改变EIP或者包括CSJMP段内寻址、相对寻址:JMP LABLE(仅改EIP)段内转移、间接寻址: JMP r32/r16/m32/m16段间转移、直接寻址:JMP LABAL(改EIP和CS)段间转移、间接寻址:JMP m48/m32条件转移指令指定条件Jcc LABAL Jcc 具体见p19若满足Jcc 跳去labal处执行不满足则顺序执行下一条Zero.Equal.Not.Sign(负).P(偶).Below.Ablove.Less.Greater.CF.OF 单/双/多分支结构单分支结构需注意采用正确的条件转移指令。双分支结构满足执行分支1;不满足执行分支2.所以一定要有JMP指令。多分支结构:有效利用单分支结构和双分支结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论