汇编笔记(1)

汇编笔记(1)

首页休闲益智堆栈平衡更新时间:2024-05-11
1.c语言概述

作业: 函数传递数组

存储类:

链接:

c 17汇编

段:

XMM寄存器64位执行环境

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)

数据相关的运算符与伪指令offset 按字节计算的偏移量

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

ptr

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

type 判断类型

mov eax type

lengthof 计算数组有多少元素

mov eax offset lengthof 变量名

sizeof 计算变量占据多少空间

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

jmp和LOOP

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

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

while循环:

.while eax < 100
inc eax
.endw

dowhile循环:
.repeat
inc eax
.until eax < 0

移位与循环移位指令

;逻辑移位 用0补位
;算数移位 用符号位填充

;SHL 左移 SHR 右移 逻辑移位
SAL SAR 算数移
ROL ROR 循环移
RCL RCR
SHLD SHRD

乘法与除法指令

无符号:mul乘法 div除法
有符号:imul idiv

乘数 在前 默认为bl bx ebx
被乘数 在后/默认为al ax eax
乘积存放在 al ax eax

div 除数 被除数 商 余数

div mem/reg(除数)不能跟立即数

AX DX/Ax
EDX/EAX 被除数

商 : al 余数 ah
ax dx
eax edx

CDQ 位数扩展指令
将字扩展为双字长,即把AX寄存器的符号位扩展到DX

扩展加减法

扩展加法

adc 带进位的加法
操作数位数相同

ascii与非压缩十进制运算

;AAA AAS AAM AAD 四种调整指令

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved