![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
80x86 ASM
青水
高级程序员,系统分析师
展开
-
ASM 函数参数处理
函数参数传递一般通过栈,在此情形下,又有两种表现形式:1、形式1定义fn proc; asm code listfn endp2、形式2定义fn proc arg1:DWORD,arg2:DWORD;asm code listfn endp 形式2与形式1在本质上是相同的,形式2可以转换为形式1。区别在于,形式2情形下1)编译器会自动绑定到参量arg1,ar...原创 2018-11-04 11:31:30 · 2870 阅读 · 0 评论 -
【ASM】浮点数比较大小
FPU计算通过指令 fcmp/fcmpp比较两个数的大小,其结果通过指令fstsw获取,再由SAHF设置标志寄存器,然后通过 jc:f1 <f2jz:f1==f2 。FPU的比较指令会改变状态寄存器C3和C0位。关系如下:C3 C0 result0 0 st(0)>源操作数0 1 st(0)<源操作数...原创 2018-11-10 23:33:42 · 1175 阅读 · 0 评论 -
【ASM]】local伪指令变量
local指令必须在proc的第一行。编译器会做以下工作:1、为每一个local变量预留栈空间2、为proc过程添加栈管理代码例:test_1 proc local x:DWORD xor eax,eax rettest_1 endp编译后为:test_1 proc push ebp mov ebp,esp ...原创 2018-11-05 23:30:37 · 1257 阅读 · 0 评论 -
x86浮点数指令
x86架构下,一般通过专用协处理器计算浮点数。浮点数运算通过FPU(Float Point Unit,浮点运算单元计算)计算,提供了浮点栈寄存器st0~st7。fld mem ;浮点数入栈fmul mem ;st(0)=st(0)*memfst mem ;st(0)转换为指定精度的浮点数fstp mem;同fst,并弹出st0另还 fdiv ,fsqrt,fist,fist...原创 2018-11-06 20:30:09 · 2464 阅读 · 0 评论 -
【ASM】函数变量定义
asm参量一般定义在数据段下。今天用vc++带的cl编译cpp文件生成asm代码后发现另一种定义参量方式,意义同直接定义在.data数据节中。可以如下定义:print_esp proc_DATAS segment szfmt1 db '这是1 esp=%p',13,10,0 szfmt2 db '这是2 esp=%p',13,10,0 x DWORD 0h_DATAS ends...原创 2018-11-13 22:00:48 · 1679 阅读 · 0 评论 -
简单地自定义实现 windows API InterlockedIncrement
自定义实现 windows APIInterlockedIncrement:long __declspec(naked) incby(volatile long*,int){ __asm { push ebp mov ebp,esp push ebx mov ebx, [ebp+8] ...原创 2019-07-20 15:18:17 · 187 阅读 · 0 评论