汇编语言笔记(数据传输、寻址和算术运行)

数据传送、寻址和算术运算

32位通用寄存器  
EAX EBP
EBX ESP
ECX ESI
EDX EDI
6个段寄存器  
CS代码段 ES
SS堆栈段 FS
DS数据段 GS

一个指令指针寄存器EIP

一个状态标志寄存器EFLAGS

指令的格式:标号 指令助记符 操作数 注释

数据定义语句的格式:【变量名】 数据定义伪指令 初始值 【,初始值 ……】

image

MOV指令从原操作数向目的操作数赋值数据

MOVZX将源操作数的内容复制到目的操作数中,并将该值零扩展至16或32位。

MOVSX将原操作数的内容复制到目的操作数中,并将该值符号扩展至16或32位。

LAHF将EFLAGE寄存器的低字节复制到AH寄存器中。

SAHF复制AH寄存器的值至EFLAGS寄存器的低字节中。

XCHG交换两个操作数的内容。

INC从操作数中加1

DEC从操作数中减1

ADD指令将同尺寸的源操作数和目的操作数相加

SUB将源操作数从目标操作数中减掉

NEG取反

和数据相关的操作符和伪指令

OFFSET操作数返回一个变量相对于其所在段开始的偏移

PTR操作符允许重载变量的默认尺寸

TYPE操作数返回数组中每个元素的大小

LENGTHOF操作数返回数组内元素的数目

SIZEOF操作符返回数组初始化时占用的字节数

PROTO伪指令声明函数的原型

PUSH首先减小ESP的值,然后将源操作数压入堆栈

POP弹出堆栈,增加ESP

PUSHFD将EFLAGS的值压入堆栈

POPFD将堆栈顶部的值弹出并送到EFLAGS中

PUSHAD指令将EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI压入堆栈

POPAD指令以相反的顺序从堆栈中弹出这些通用寄存器的值

过程使用PROC和ENDP指令声明,例如

main PROC

……

main ENDP

CALL指令指示处理器在新的内存地址执行指令

RET指令返回到程序中过程被调用的地方继续执行

CALL指令把返回地址压入栈并把调用过程的地址复制到指令指针寄存器中

RET指令从堆栈中弹出返回地址并送到指令指针寄存器中

ESP是栈指针用于指向栈的栈顶

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量

原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/2806696.html