作业: 函数传递数组
存储类:
链接:
c 17汇编段:
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
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
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 带进位的加法
操作数位数相同
;AAA AAS AAM AAD 四种调整指令
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved