Win32汇编(以C语言作为基础)

本文介绍了Win32汇编的基础,包括数据类型如DWORD和QWORD,以及整数和实数的算术运算。讲解了平方根、绝对值等实数算术指令,并涉及选择结构如.IF伪指令和JMP/Jcc转移指令。此外,还探讨了循环结构如.while和LOOP,并通过实例展示了如何求字符串长度。
摘要由CSDN通过智能技术生成




基础模板

.386									; 选择的处理器
.model flat, stdcall					; 储存模型,win32程序只能用平展(flat)模型
										; stdcall为函数调用方式:右边的参数先入栈
option casemap :none					; 指明标识符大小写敏感
include kernel32.inc					; 要引用的头文件
includelib kernel32.lib					; 要引用的库文件
includelib msvcrt.lib					; 引用C语言库文件(msvcrt = Microsoft Visual Studio Runtime)
printf PROTO C:ptr sbyte,:vararg		; C语言的printf函数原型声明
scanf PROTO C:ptr sbyte,:vararg			; C语言的scanf函数原型声明
.data									; 数据段
			\
			 > 数据的声明
			/
.code									; 代码段
start:									; 定义标号start
			\
			 > 要运行的代码
			/
ret										; 退出进程,返回值为0 (也可以写 invoke ExitProcess,0)
end start								; 指明程序入口点start


数据类型

  • 整型 - DWORD
    相当于C语言中的 int 类型
变量 DWORD 数字/?		; 数字是静态输入  ?表示大小未知  (不允许使用变量)
  • 浮点型(双精度)- QWORD
    相当于C语言中的 double类型(在这里建议不要使用 单精度浮点类型 (float) )
变量 QWORD 数字/?		; 数字是静态输入  ?表示大小未知  (不允许使用变量)
  • 字符型 - BYTE
    相当于C语言中的 char 类型
变量 BYTE ?				; 字符类型申明
变量 BYTE N DUP(?)		; 字符串类型的声明  声明了长度为N的字符串

小贴士:
在win32汇编中不允许出现变量直接给变量赋值的情况,每条语句中只能出现一个变量
(此处的变量是指自己声明的变量,系统变量(EAX、EBX、ECX、EDX)除外)



整数(DWORD)的加(+)、减(-)、乘(*)、除(/)、取余(%)

  • 加法( + )z = x + y
MOV EAX,x		; EAX = x 
ADD EAX,y		; EAX = EAX + y
MOV z,EAX		; z = EAX
  • 减法( - ) z = x - y
MOV EAX,x		; EAX = x 
SUB EAX,y		; EAX = EAX - y
MOV z,EAX		; z = EAX
  • 乘法( * ) z = x * y
MOV  EAX,x		; EAX = x 
IMUL y			; EAX = EAX * y
MOV  z,EAX		; z = EAX
  • 除法( / ) & 余除( % )z = x / y & z = x % y
MOV  EAX,x		; EAX = x 
CDQ				;				商☟	   ☟余数
IDIV y			; EDX|EAX / y = EAX ...EDX
MOV  z,EAX		; z = EAX (EAX储存的是 商 )
MOV  z,EDX		; z = EDX (EDX储存的是 余数 )

小贴士:
在整数的 加、减 中可以将 EAX 替换为 EBX、ECX、EDX
但是在 乘、除、取余 中只能使用 EAX !!!



实数(QWORD)的加(+)、减(-)、乘(*)、除(/)

实数 包括 整数 与 小数 !!

  • 加法( + )z = x + y
FLD   x
FADD  y
FSTP  z
  • 减法( - ) z = x - y
FLD   x
FSUB  y
FSTP  z
  • 乘法( * ) z = x * y
FLD   x
FMUL  y
FSTP  z
  • 除法( / ) z = x / y
FLD   x
FDIV  y
FSTP  z

小贴士:
如果变量中有 整数类型(DWORD) 的话,要将该语句的 F 后加上一个i

以加法为例(此时 x为DWORD类型 y为QWORD类型)

FiLD  x
FADD  y
FSTP  z

当变量类型全为 DWORD类型 时,也可以使用 实数 的运算语句,但尽量不要这样用!



实数算术指令

以下 变量的定义 都要使用 QWORD类型 ,否则输出会出错!!!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值