汇编笔记(1)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编笔记(1)相关的知识,希望对你有一定的参考价值。

参考技术A 作业: 函数传递数组

存储类:

链接:

段:

db char
堆栈平衡

整数常量: 0a3h 42o 26d 010101b

实数常量:2 3.0+3.0 -44.2E+5

字符常量: ‘A’ “A”

字符串常量: “hello”
保留字:
指令: mov lea add sub jcc
寄存器:
属性: db dword
运算符

标识符:
第一个字符有限制
标识符不能与保留字相同

伪指令:data offset

指令:mov eax,123

注释:;

BYTE 8位 无符号
SBYTE 8位 有符号
word 16位
sword 16位
Dword 32位

FWORD 48位 保护模式的远指针

QWORD 64位 整数

TBYTE 80位 整数

实数 or 浮点数:
REAL4 32位 短实数
REAL8 64位 长实数
REAL10 80位 扩展长实数

伪指令:
db 8位 整数 = char 保存ascii码
dw 16位 整数
dd 32位整数或实数
dq 64位整数或实数
dt 80位整数或实数

数组 初始化为0
arrNum dwird 20 dup(0)

大端序:高位在高地址

小端序:高位在低地址

#数据传送指令:
reg 通用寄存器
reg8 reg16 reg32
sreg 段寄存器

立即数: imm 8 16 64
mem 内存: mem8 16 32

mov 目的,源(位数一样)

movzx 全零填充
movsx 全1填充

LAHF:标志位保存到变量
lahf (无需操作数)
mov flag , ah

SAHF: 变量保存到标志位
mov ah,flag
sahf(无需操作数)

XCHG 交换指令
交换两个操作数的内容
XCHG reg reg (位宽一样)

inc eax 自加1
dec eax 自减1

sub eax,ecx
eax =2
ecx = 1
eax = 1

f10 单步步过

neg reg/mem
取补码(按位取反 再加1)

arrNum DWORD 0,1,2,3
mov eax offset arrNum+8
mov eax,[eax]

mov ax,byte ptr arrNum
改变位数传送

mov eax type

mov eax offset lengthof 变量名

mov eax,sizeof 变量名

mov eax,[eax]

inc byte ptr [eax]

mov esi,4 ;4是下标
mov eax, var[esi*数据宽度]

pbyte typedef ptr byte
.data
asd pbyte 1

loop
每循环一次 ecx 减1

push 压栈 (esp-4)
esp 栈顶 ebp 栈底

pop 出栈(esp+4)

pushfd
popfd
把32位eflags压到堆栈
(标志位保持不变)(常用于写 游戏 脚本等需要保持环境的地方)

pushad popad 压栈 通用寄存器
压栈顺序:eax ecx edx ebx esp ebp esi edi

字符串长度获取方式: size = ($ - source) - 1

addx proc uses eax ebx (参数)
函数体
addx endp

指令:ret call
call: 首先eip压栈

ret : eip 出栈

位运算 与 and 或 or 非 nor 异或 xor

运算时 不能全是立即数

test eflags

cmp (浮点数不能通过cmp比较)两个操作数
o1 < o2 zf = 0 cf = 1
o1 > o2 zf = cf = 0
o1 = o2 zf = 1 cf = 0
(有符号数)

jcc指令根据比较结果跳转

作业:小程序:简单加密:基于xor的加密

loop :ecx》0

伪指令:

.if eax > i
inc eax
.elseif
add eax,2
.else
dec eax
.endif

;还包括== !== > >= <

以上是关于汇编笔记(1)的主要内容,如果未能解决你的问题,请参考以下文章

IA-32汇编语言笔记—— 基础知识

汇编学习笔记-伪指令

汇编笔记(1)

IA-32汇编语言笔记——堆栈的作用

串操作汇编笔记

汇编入门学习笔记 —— int指令port