汇编笔记(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)的主要内容,如果未能解决你的问题,请参考以下文章