C和汇编混合编程----实现浮点数的加减乘除

加法

C程序:

#include "stdio.h"int main()
{float a=1.0;float b=2.34;float c;c=a+b;printf("c=%f",c);return 0;
}

反汇编之后,实现加法的关键程序

5:        float a=1.0;
00401028 C7 45 FC 00 00 80 3F mov         dword ptr [ebp-4],3F800000h
6:        float b=2.34;
0040102F C7 45 F8 8F C2 15 40 mov         dword ptr [ebp-8],4015C28Fh
7:
8:        float c;
9:        c=a+b;
00401036 D9 45 FC             fld         dword ptr [ebp-4]
00401039 D8 45 F8             fadd        dword ptr [ebp-8]
0040103C D9 55 F4             fst         dword ptr [ebp-0Ch]
14:       printf("c=%f\n",c);
00401046 83 EC 08             sub         esp,8
00401049 DD 1C 24             fstp        qword ptr [esp]
0040104C 68 1C 60 42 00       push        offset string "c=%f" (0042601c)
00401051 E8 2A 00 00 00       call        printf (00401080)
00401056 83 C4 0C             add         esp,0Ch
  • 我们定义的浮点数1.0转成了3F800000h,转化过程是什么呢?这是个IEEE 754定义的标准,网上有很多现成帮我们转,其实我们可以不必理解这些东西,毕竟人生苦短,学的东西还很多,能直接用就可以了。(http://www.styb.cn/cms/ieee_754.php#)到这里可以直接转
  • fld:将浮点数压入到ST(0)出
  • fadd:将浮点数和ST(0)出的浮点数相加,结果保存到ST(0)中
  • fstp:将ST(0)出数据出栈,影响FPU栈内数据,TOP会减一,将数据保存到dword ptr [ebp-0Ch]中
  • fst:将ST(0)取出,不影响FPU栈内数据

改成混合编程为:

#include "stdio.h"int main()
{char * str="c=%f\n";__asm{mov  dword ptr [esp-4],0x3F800000		;1.0mov  dword ptr [esp-8],0x4015C28F		;2.34fld  dword ptr [esp-4]fadd dword ptr [esp-8]fst  dword ptr [esp-0ch]sub esp,8fstp qword ptr [esp]mov eax,strpush eaxcall printfadd esp,0ch}return 0;
}

在这里插入图片描述

除法

在C和·汇编混合编程中将fadd 换成fdiv
结果:
在这里插入图片描述
乘法:
将fadd换成fmul
在这里插入图片描述
相减:
将fadd换成fsub
在这里插入图片描述
用eax这样的寄存器试了没成功,如果哪位大佬做出来了发我一份,感谢
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java删除指定索引元素_将对象/元素添加到列表中的Java指定索引处

java删除指定索引元素We have to create a List and add objects/elements to the List and given indexes in java. 我们必须创建一个List并将对象/元素添加到该List中,并在Java中添加给定的索引。 To add any object/element at given index to the List, we use…

使用ActiveX读取客户端mac地址

//保存为html文件<HTML><HEAD><TITLE>获取客户端MAC和用户名</TITLE><META http-equivContent-Type content"text/html; charsetgb2312"><SCRIPT languageJScript event"OnCompleted(hResult,pErrorObject, pAsyncContext)&qu…

【Wordpress】分享500多款国外WordPress经典主题 其之三

从国外网站上淘来的WordPress主题&#xff0c;以前都是放在本人博客xcodeland.mooo.com上的后来空间挂掉了就转到这里来与大家分享。 modernclean 下载地址 just-business 下载地址 redrum 下载地址 aneducation 下载地址 artsie 下载地址 eveningalone 下载地址 wasabi …

python 微秒_Python程序可显示当前时,分,秒和微秒

python 微秒In the below example – we are implementing a python program to print current hour, minute, second and microsecond. 在下面的示例中-我们正在实现一个python程序来打印当前时&#xff0c;分&#xff0c;秒和微秒 。 Steps: 脚步&#xff1a; Import the d…

终于知道RTM的含义了

从关注VS 2005开始&#xff0c;注意到RTM、RC这几个缩写&#xff0c;一直没找到是什么意思。今天终于知道了含义&#xff1a;RTM&#xff1a;Release To Manufacturing意味着开发工作已结束, RTM 版将提供给发行商、OEM 硬件厂商、驱动程序开发者、独立软件开发者等。RC&#x…

C和混编混合编程----strcpy缓存溢出原理

今天老师给了一到程序&#xff0c;让我们分析分析原理&#xff0c;关于strcpy缓存溢出原理的&#xff0c;反汇编一遍遍调试&#xff0c;终于看明白了&#xff0c;记录一下 C程序&#xff1a; #include "string.h" #include "stdio.h" char *shellcode&quo…

16进制的简单运算

描述 现在给你一个16进制的加减法的表达式&#xff0c;要求用8进制输出表达式的结果。 输入 第一行输入一个正整数T&#xff08;0< T<100000&#xff09; 接下来有T行&#xff0c;每行输入一个字符串s&#xff08;长度小于15)字符串中有两个数和一个加号或者一个减号&…

逝去的大学生活自己丢了什么

1.一个HP电脑包挂在外面的阳台 2.一个蚊帐 3.乱七八糟的垃圾 4.两双篮球鞋 5.一台电脑桌送给了阿姨&#xff0c;不到一会儿就消失不见了 6.一辆自信车给了好朋友 7.三个水果筐给了阿姨 这么大方的丢东西丢的最多的一次 祭奠我逝去的大学&#xff0c;祭奠我丢失的东西&#xff0…

android 中文api 在线测试,android webview测试方法

利用chromedriver操作webview1.创建chrome serverchromedriver --url-basewd/hub --port9515 --adb-port50372.创建sessionPOST http://127.0.0.1:9515/wd/hub/session参数&#xff1a;{"desiredCapabilities":{"chromeOptions":{"androidPackage&quo…

几篇介绍在页面中引用脚本文件的技术文档

在一个页面中包含一个脚本文档是多么简单的一件事&#xff0c;但今天看了几篇文章后&#xff0c;才发现在一个这么简单的功能也有这么多的技巧可谈&#xff0c;以下是这几篇文章挣脱浏览器的束缚&#xff08;1&#xff09; - 前言挣脱浏览器的束缚&#xff08;2&#xff09; - …

Java StringBuffer insert(int offset,String s)方法,带示例

StringBuffer类insert(int offset&#xff0c;String s) (StringBuffer Class insert(int offset , String s)) This method is available in package java.lang.StringBuffer.insert(int offset, String s). 软件包java.lang.StringBuffer.insert(int offset&#xff0c;Strin…

C和汇编混合编程--------函数调用后ebp、esp值问题

今天老师又给了一个程序&#xff0c;让我们分析&#xff0c;记录一下分析过程 程序&#xff1a; #include "stdio.h" #include "string.h"char *shellcode"\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00"; void fun1(int a, int b) {print…

C小加 之 随机数

描述 ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了N个1到1000之间的随机整数&#xff08;0< N≤100&#xff09;&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同…

How to use fb.data.query to get friends info?

参考代码1&#xff1a; varquery FB.Data.query(select uid, first_name, last_name, work, from user where uid{0}, response.id);query.wait(function(rows) {varloginData {fb_uid: rows[0].uid, first_name: rows[0].first_name, last_nam…

android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

ListView的主要有两种滑动事件监听方法&#xff0c;OnTouchListener和OnScrollListener1、OnTouchListenerOnTouchListener方法来自View中的监听事件&#xff0c;可以在监听三个Action事件发生时通过MotionEvent的getX()方法或getY()方法获取到当前触摸的坐标值&#xff0c;来对…

获得jmp esp地址

对于大部分想要利用缓冲区溢出的人来说&#xff0c;jmp esp就再熟悉不过了&#xff0c;我最近发现网上将如何如何利用它的人太多太多&#xff0c;可是就是没人告诉在shellcode 中到底jmp esp的地址在哪&#xff0c;有些直接给除了它的地址可是由于jmp esp随系统的不同地址也不同…

TreeView无限极分类绑定(从数据库读取数据源)

TreeView这个控件其实我本来不怎么会用到&#xff0c;今天有一个项目要用到&#xff0c;而且是无限极的分类数据绑定&#xff0c;于是就根据自己以前写过的代码别写出了这个无限极分类的例子&#xff0c;呵呵希望能够对大家有所帮助&#xff0c;本人尽量把注释写的详细一些把&a…

为何把牛奶倒入大海

汤姆是生活在米国乌有城城郊的一位奶牛场主&#xff0c;不知何故&#xff0c;方圆数百里&#xff0c;只有这一家奶牛场。汤姆的奶牛场有2000头奶牛&#xff0c;每月产奶2000吨&#xff0c;这牛奶供应给乌有城的市民和周边的农民。牛奶售价是每吨500美元&#xff0c;每吨牛奶的生…

软件工程 软件设计 步骤_好的软件设计特点 软件工程

软件工程 软件设计 步骤For good quality software to be produced, the software design must also be of good quality. Now, the matter of concern is how the quality of good software design is measured? This is done by observing certain factors in software desi…

android游戏黑屏,第五人格游戏进不去黑屏解决办法

小编今天给各位玩家朋友们带来的是第五人格游戏进不去黑屏解决办法&#xff0c;很多的玩家朋友们在第五人格更新后都出现了黑屏、游戏无法进入等情况&#xff0c;这应该怎么办呢&#xff1f;小编把解决方法给大家整理在了下方&#xff0c;感兴趣的小伙伴们快来跟小编一起往下看…