汇编语言知识点汇总

一、汇编语言——寄存器

1.寄存器的分类

(1)数据寄存器:分别为EAX,EBX,ECX和EDX这四个寄存器。

(2)2个指针寄存器(ESI和EDI),2个指针寄存器(ESP和EBP)

(3) 6个段寄存器(ES,CS,SS,DS,FS和GS)

(4)1个指令指针寄存器(EIP),1个标志寄存器(EFlages)

2.数据寄存器

数据寄存器作用:主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX,EBX,ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16为寄存器分别为:AX,BX,CX,DX,它和先前的CPU中的寄存器 相一致。

4个16位寄存器又可分割分8个独立的8位寄存器(AX:AH-AL,BX:BH-BL,CX:CH-CL,DX:DH-DL),每个寄存器都有自己的名称,可独立存取。

数据寄存器对应的作用:(EAX/EBX/ECX/EDX)

(1)EAX通常称为累加器:可用于乘、除、输入/输出等操作。它们的使用频率很高。EAX还通常用于存储函数的返回值

(2)EBX称为基地址寄存器:它可作为存储器指针来使用,用来访问存储器。

(3)ECX称为计数寄存器:在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数。(发现出现这个寄存器,则说明可能存在循环或重复的操作)

(4)EDX称为数据寄存器:在进行乘、除运算时,可作为默认操作数参与运算,也可用于存放I/O的端口地址。

####

3.变址寄存器(ESI/EDI)

变址寄存器的作用:用来存放操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。

32位CPU有2个32位通用寄存器ESI和EDI,其中低16位对应先前CPU中的SI和DI,对低16位数据存取,不影响高16位的数据。

ESI通常在内存操作指令中作为“源地址指针”使用,而EDI通常在内存操作指令中作为“目的地址指针”使用。

4.指针寄存器(ESP/EBP)

寄存器EBP,ESP称为指针寄存器(pointer register),主要用于存放堆栈内存单元的偏移量,用它们可以实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

指针寄存器主要用于访问堆栈内的存储单元:

EBP为基指针寄存器:通过它减去一定的偏移值,来访问栈中的元素;

ESP为堆栈指针寄存器:它始终指向栈顶。

5、段寄存器

段寄存器是根据内存分段的管理模式而设置的,内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。

6.指令指针寄存器(EIP)

32位CPU把指令指针扩展到32位,并记作EIP.

指令指针EIP是存放下次要执行的指令在代码段的偏移量。

二、汇编语言——主要指令(如需加深了解,请自行学习)

1.数据传送指令集(mov)

mov:把源操作数送给目的操作数

语法:mov 目的操作数 源操作数

xchg:交换两个操作数的数据

语法:xchg 目的操作数 源操作数

push/pop:把操作数压入或取出堆栈

pushf、popf、pusha、popa:堆栈指令群

lea、lds、les:取地址到寄存器

2、位运算指令集

and、or、xor、not、test:执行位与位之间的逻辑运算

shr、shl、sar、sal:移位指令

ror、rol、rcr、rcl:循环移位指令

3、算数运算指令

add、adc:加法指令

sub、sbb:减法指令

inc、dec:把操作数的值加一或减一

neg:将操作数的符号反相(取二进制补码)

mul、imul:乘法指令

div、idiv:触发指令

4.程序流程控制指令集

cmp:比较操作数1和操作数2的值

jmp:跳往指定地址执行

loop:循环指令集

call、ret:子程序调用,返回指令

int、iret:终端调用、返回命令

rep、repe、repne:重复前缀指令集

5.条件转移命令

jxx:当特定条件成立则跳往指定地址执行。

x的常用取值及意义:

z:为0转移

g:大于则转移

l:小于则转移

e:等于则转移

n:取相反条件

6.字符串操作指令集

movsb、movsw、movsd:字符串传送指令;

gmpsb、cmpsw、smpsd:字符串比较指令;

scasb、scasw:字符串搜索指令。

lodsb、lodsw、stosb、stosw:字符串载入或存储指令

三、汇编语言——寻址方式

寻址方式定义:形成操作数的有效地址的方法称为操作数的寻址方式。

1.立即寻址

定义:指令的地址给出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特定是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。

如:mov cl,15H //将十六进制的15,放到八位寄存器cl中。

2.直接寻址

定义:直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。

如:mov al,[3100H] //将地址3100H处对应的内容,放到8位寄存器al中

注意:在汇编语句中括号内的数据表示地址

3.间接寻址

定义:间接寻址是相对直接寻址而言的,在简介寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址

如:mov [bx],12H //将立即数12H放到寄存器bx中存储地址指向的位置

4.基址寻址方式

定义:在基址寻址方式中将CPU中基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置的很长,从而可以在较大的存储空间中寻址。

如:mov eax,[ebx+esi] //将基址寄存器ebx内容加上变址寄存器esi的结果地址指向的内容传递给寄存器eax

  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值