汇编语言快速入门笔记

寄存器

EAX:累加器,一般存放运算结果
EBX:基址寄存器,一般用作内存寻址的基地址,DS段的数据指针
ECX:计数器,一般用作字符串操作和循环操作的计数器
EDX:用于存储部分乘法结果和部分除法被除数
EBP:栈底指针,SS段的数据指针
ESP:栈顶指针,一般指向栈顶
EDI:字符串操作的目标指针,ES段的数据指针
ESI:字符串操作的源指针,SS段的数据指针

FALAGS寄存器:
在这里插入图片描述

内存的表现形式

  1. 立即数
    MOV EAX, DWORD PTR DS:[0x????????]
  2. 寄存器
    MOV EBX, 0x????????
    MOV EAX, DWORD PTR DS:[EBX]
  3. 寄存器+立即数
    MOV EBX, 0x????????
    MOV EAX, DWORD PTR DS:[EBX+4]
  4. 数组元素地址=数组首地址+元素索引*数组元素占用空间
    MOV EAX, 0x????????
    MOV EBX, 0x2
    MOV ECX, DWORD PTR DS:[EAX + EBX * 4]
  5. 比例因子+立即数
    MOV EAX, 0x????????
    MOV EBX, 0x2
    MOV ECX, DWORD PTR DS:[EAX+EBX*4+1]

数据存储模式

大端序:数据高位在内存地位,数据低位在内存高位,常用于arm架构
小段序:数据低位在内存高位,数据高位在内存低位,常用于x86,amd64架构

汇编指令

ADD: 加法
ADC:带进位加法
SUB:减法
SBB:带借位减法
MUL:无符号乘法
IMUL:有符号乘法
DIV:无符号除法
IDIV:有符号除法
INC:自增
DEC: 自减
AND:按位与运算
OR:按位或运算
XOR:按位异或
NOT:按位取反运算
PUSH:压栈指令
POP:出栈指令
MOV:数据传送指令
LEA:有效地址传送指令
XCHG:数据交换指令
CMP:比较指令
TEST:测试指令
JMP:无条件跳转指令
JZ/JE:ZF=1不等于0或相等跳转
JNZ/JNE:ZF=0不等于1或不相等跳转
JBE/JNA:CF=1/ZF=1低于等于/不高于跳转
JNBE/JA:CF=0/ZF=0不低于等于/高于跳转
JL/JNGE:SF!=OF小于/不大于等于跳转
JNL/JGE:SF=OF不小于/大于等于跳转
MOVS:字符串传送指令
MOVSB:BYTE传送指令
MOVSW:WORD传送指令
STOS:字符串存储指令
REP:字符串重复前缀指令
CALL:过程调用指令,相当于push eip,jmp OPRD
RETN:返回指令,相当于pop eip,jmp eip

过程调用-函数

过程调用的方式:

//寄存器传参
.586

.model flat, stdcall

.code

myfucntion proc
	add eax, ebx
	ret
myfunction endp

main proc
	mov eax, 1
	mov ebx, 2
	call myfunction 
	nop
main endp
end main
//堆栈传参
.586

.model flat, stdcall

.code

myfucntion proc
	mov eax, [esp+4]
	mov ebx, [esp+8]
	add eax, ebx
	ret
myfunction endp

main proc
	push 1
	push 2
	call myfunction 
	nop
main endp
end main

win32API

win32API参数传递遵循从后往前压栈原则

.586
.MODEL flat, stdcall
includelib user32.lib
includelib kernel32.lib

ExitProcess PROTO, dwExitCode:DWORD
MessageBoxA PROTO, hWnd:DWORD, lpText:BYTE, lpCaption:BYTE, uType:DWORD

.data
string db "helloworld",0

.code

main proc
	push 0
	push offset string	
	push offset string
	push 0
	call MessageBoxA
	add esp, 16					//堆栈平衡
	call ExitProcess
main endp
end main
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值