搜索
bottom↓
回复: 46

怎样让汇编语言跨平台?

[复制链接]

出0入32汤圆

发表于 2021-4-25 18:13:28 | 显示全部楼层 |阅读模式
不同cpu,对应的汇编语言也不同。

有什么办法解决这个问题呢?

我想用汇编语言来做一个电脑上位机软件,希望跨平台。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出30入25汤圆

发表于 2021-4-25 18:15:43 | 显示全部楼层
纯粹的汇编跨平台那是说笑了。不过一套“字节码”跨多个平台的想法,有很多人努力过啊。最后形成了很多流行的技术:JVM, .net CLR, WebAssembly (WASM) 等,太多了。

现在的跨平台上位机还得是 Electron (基于Nodejs) 和 .net 那一套比较好。

出0入0汤圆

发表于 2021-4-25 18:16:17 | 显示全部楼层
看看 WebAssembly

好奇楼主是做什么工作的,楼主单位是什么的?

出0入32汤圆

 楼主| 发表于 2021-4-25 18:17:33 | 显示全部楼层
shamiao 发表于 2021-4-25 18:15
纯粹的汇编跨平台那是说笑了。不过一套“字节码”跨多个平台的想法,有很多人努力过啊。最后形成了很多流行 ...

你说的这些,JVM, .net CLR, WebAssembly (WASM) ,是不是运行效率都很低?

我想用汇编语言来编程,就是希望运行效率高一些。

出30入25汤圆

发表于 2021-4-25 18:19:58 | 显示全部楼层
2020echo 发表于 2021-4-25 18:17
你说的这些,JVM, .net CLR, WebAssembly (WASM) ,是不是运行效率都很低?

我想用汇编语言来编程,就是 ...


性能无高低,只有合不合用。与其空谈,不如先厘清需求。你想用什么硬件,支持什么样的一个业务,达到什么样的性能指标?

出0入32汤圆

 楼主| 发表于 2021-4-25 18:25:27 | 显示全部楼层
shamiao 发表于 2021-4-25 18:19
性能无高低,只有合不合用。与其空谈,不如先厘清需求。你想用什么硬件,支持什么样的一个业务,达到什么 ...

普通电脑台式机或者笔记本电脑。

跑一个很复杂的上位机软件。

希望cpu占有率越低越好。

出0入0汤圆

发表于 2021-4-25 18:28:19 | 显示全部楼层
2020echo 发表于 2021-4-25 18:25
普通电脑台式机或者笔记本电脑。

跑一个很复杂的上位机软件。

有汇编的功夫,不如自己拿其他语言写。2021年了,得多复杂才非要用汇编,就离谱

出50入58汤圆

发表于 2021-4-25 18:31:54 来自手机 | 显示全部楼层
楼主是典型的既想马儿跑,又想马儿不吃草

出0入32汤圆

 楼主| 发表于 2021-4-25 18:32:41 | 显示全部楼层
yang855u 发表于 2021-4-25 18:28
有汇编的功夫,不如自己拿其他语言写。2021年了,得多复杂才非要用汇编,就离谱 ...

客户需要cpu占有率极低,越低越好。

出0入442汤圆

发表于 2021-4-25 18:39:16 来自手机 | 显示全部楼层
shamiao 发表于 2021-4-25 18:15
纯粹的汇编跨平台那是说笑了。不过一套“字节码”跨多个平台的想法,有很多人努力过啊。最后形成了很多流行 ...

qemu可以实现

出0入0汤圆

发表于 2021-4-25 19:52:31 | 显示全部楼层
要通用就要有牺牲效率的心理准备,要效率高就要有牺牲通用性的准备
还有一种方法,就是把其他的平台搞垮,让世界以你为尊,都按你的标准做.....

出0入0汤圆

发表于 2021-4-25 20:10:06 | 显示全部楼层
2020echo 发表于 2021-4-25 18:32
客户需要cpu占有率极低,越低越好。

他咋不直接机器语言0101写?低也是要有个限度。只要流畅运行不就行了吗

出0入58汤圆

发表于 2021-4-25 20:46:26 | 显示全部楼层
核心算法C语言写已经很高校了,你还要在X86上面汇编也是醉了。

出0入4汤圆

发表于 2021-4-25 20:49:49 | 显示全部楼层
想跨平台,又要不牺牲性能,大概率是不可能实现的事情

出200入2554汤圆

发表于 2021-4-25 20:52:12 来自手机 | 显示全部楼层
如何让全世界都讲中国话?

出0入8汤圆

发表于 2021-4-25 20:53:00 | 显示全部楼层
2020echo 发表于 2021-4-25 18:32
客户需要cpu占有率极低,越低越好。


就这么个需求,竟然逼着你要汇编,要二进制;楼主这是不了解编程,任意一门编程语言,程序员只要没brain-damaged,都能做到占有率极低。

出30入42汤圆

发表于 2021-4-25 21:16:59 来自手机 | 显示全部楼层
楼主所在的公司估计没有高手,要不然也不会问出不少奇葩问题。

出0入4汤圆

发表于 2021-4-25 21:51:12 | 显示全部楼层
不说跨平台, 一个很复杂的上位机软件还用汇编我感觉是找死的节奏. 或者你这套软件能买个上百万

出300入477汤圆

发表于 2021-4-25 21:51:20 来自手机 | 显示全部楼层
shawn_bu 发表于 2021-4-25 20:46
核心算法C语言写已经很高校了,你还要在X86上面汇编也是醉了。

写汇编不希奇啊,比如intel MKL数学库之类的,里面都是手写的汇编。但是,有能力写这些库的人是不需要来问的,他们知道自己的水平。
所以,所有来这里问需不需要用手写汇编优化的人,我们都可以回答:不需要!因为你手写的汇编肯定比不过编译器生成的!

出300入477汤圆

发表于 2021-4-25 21:54:19 来自手机 | 显示全部楼层
sniper.q 发表于 2021-4-25 21:51
不说跨平台, 一个很复杂的上位机软件还用汇编我感觉是找死的节奏. 或者你这套软件能买个上百万 ...

上百万也不该手写汇编给自己开发人员找罪受,并且白白降低性能啊。
客户岀钱多,你更应该想的是怎么让程序清晰易维护,然后在必要的地方想想怎么提高性能。
不是花钱找罪受再降低性能。

出0入663汤圆

发表于 2021-4-25 22:08:36 | 显示全部楼层
上位机用汇编写确实也是可以的,我说的是DOS年代……

出0入25汤圆

发表于 2021-4-25 22:10:32 | 显示全部楼层
楼主明白啥叫汇编语言吗?

出300入477汤圆

发表于 2021-4-25 22:12:29 来自手机 | 显示全部楼层
举个例子:我前一阵选型选了个cortexA7 CPU,介绍说它可以在部分情况下每个时钟执行两条指令,但是没有详细内容。我在网上查,最后最详细的说明竟然是来自GCC源码!那里面详细描述了该CPU里面各种指令什么能跟什么指令并行,能并行的指令是可以当作并行的两条指令的第一条,还是第二条,还是都可以。。。。
看到这个,我充分相信我手写的汇编肯定没有GCC考虑的多。。。。
PC的X86 CPU内部的并发能力更好,那么想要充分利用所有的执行流水线,你在生成代码的时候要考虑的东西肯定更多。。。
随便手写一段,就算你写的比编译器生成的短,很可能执行还比人家慢。何苦呢?

出0入0汤圆

发表于 2021-4-25 22:13:07 来自手机 | 显示全部楼层
这年头能用汇编写上位机软件的人不应该问出这问题啊

出300入477汤圆

发表于 2021-4-25 22:20:51 来自手机 | 显示全部楼层
Archer_Emiya 发表于 2021-4-25 22:13
这年头能用汇编写上位机软件的人不应该问出这问题啊

是的。有能力写汇编超过现代编译器的人,根本不会来问这种问题。
所有来问的人,手写汇编一定比不过编译器。哈哈

出300入477汤圆

发表于 2021-4-25 22:26:39 来自手机 | 显示全部楼层
本帖最后由 redroof 于 2021-4-25 22:35 编辑
gzhuli 发表于 2021-4-25 22:08
上位机用汇编写确实也是可以的,我说的是DOS年代……


现在在小单片机上,手写汇编还是可以轻易比过编译器啊!越小的单片机,编译器生成代码的性能越差,越比不过手写。比如老51的编译器,就明显比不过一个稍微有点经验的人手写的汇编。
但是这个时代该过去了,还用老单片机的都是不在乎那一点性能的了。用C写起来要轻松的多。在乎性能的早就换好一点的单片机了,然后继续写C就够。
DOS年代的PC,差不多就等于现在的小单片机的技术水平。没有多发射,好像连流水线都没有,或者一大堆指令都需要多周期执行的,也没有SIMD,所以编译器对人脑写汇编还没多少优势。

出500入109汤圆

发表于 2021-4-25 22:43:59 | 显示全部楼层
汇编写个死循环照样CPU100%, 照你说,极其复杂的软件, CPU的占用率不在你使用什么语言, 而是设计能力,
当然你要是把写X86编译器的那些码农找来给你用汇编写一个极其复杂的程序, 大约真的可以快的飞起.

出0入0汤圆

发表于 2021-4-25 22:54:59 | 显示全部楼层
能提出这种要求的客户你就当他是个二百五,嘴上答应没问题就行了,你就随便给个c++、java、python等写出来的程序跟他说这跨平台、这效率高,他知道个屁是不是

出10入18汤圆

发表于 2021-4-25 23:55:48 来自手机 | 显示全部楼层
2020echo 发表于 2021-4-25 18:25
普通电脑台式机或者笔记本电脑。

跑一个很复杂的上位机软件。

做好开发一百年的准备

出0入663汤圆

发表于 2021-4-26 00:06:01 | 显示全部楼层
本帖最后由 gzhuli 于 2021-4-26 00:07 编辑

好钢用在刀刃上,所有现代大型程序都是高级语言开发大部分功能,只有最核心部分,例如数字滤波器、加解密算法等牵涉CPU密集运算的地方才用汇编优化,一般牵涉到的代码量也就几百到几千条汇编指令,而跨平台也只需将这部分汇编针对每个平台进行优化移植即可。

出0入34汤圆

发表于 2021-4-26 01:11:39 | 显示全部楼层
汇编确实是可以跨平台的啊!我说的是使用的编辑器 Editer 确实可换不同的啊!...

出145入215汤圆

发表于 2021-4-26 07:40:58 来自手机 | 显示全部楼层
x86的确实都可以直接汇编写软件,连操作系统的不需要装直接运行。先研究dos系统把

出0入16汤圆

发表于 2021-4-26 08:40:21 | 显示全部楼层
降低CPU多写几个sleep就行了,就是效率会下去,目测不需要太高的效率

出300入477汤圆

发表于 2021-4-26 08:45:05 来自手机 | 显示全部楼层
初音之恋 发表于 2021-4-26 08:40
降低CPU多写几个sleep就行了,就是效率会下去,目测不需要太高的效率 ...


对,然后将来可以找甲方再要一笔钱去优化程序,加快执行速度,优化方法是去掉几个sleep即可。哈哈

出0入0汤圆

发表于 2021-4-26 09:14:38 | 显示全部楼层
2020echo 发表于 2021-4-25 18:32
客户需要cpu占有率极低,越低越好。

把台式机当单片机用裸奔。没有操作系统这一层开销,这个CPU占用率肯定低。

出0入36汤圆

发表于 2021-4-26 10:15:33 | 显示全部楼层
要让汇编跨平台,这就相当于要小姐从良那么不靠谱,用到汇编就不可能有太大的移植性,因为汇编都是和某个硬件体系绑定的,要说到考虑移植性,就不可能用汇编,因为要兼顾构架差异必定会有中间语言的编译器做翻译

出0入0汤圆

发表于 2021-4-26 11:35:39 | 显示全部楼层
这个问题问的不明所以,如果能这样,linux都不用做各种架构的移植了

出145入215汤圆

发表于 2021-4-26 18:06:37 来自手机 | 显示全部楼层
norman33 发表于 2021-4-26 10:15
要让汇编跨平台,这就相当于要小姐从良那么不靠谱,用到汇编就不可能有太大的移植性,因为汇编都是和某个硬 ...

汇编是带助记符的机器语言。理论上用汇编写代码的人可以直接写机械码,直接写二进制然后保存为二进制文件写入单片机就可以。汇编指令集类似于具体的按钮各种开关,就像电控箱上面的各种旋钮按键。不同指令就是具体面板操作顺序。再dos下开发更加有可能性点,不然各种硬件初始化驱动就不大可能完成。

出215入118汤圆

发表于 2021-4-26 19:20:35 | 显示全部楼层
.net core 可以的,虽然是字节码,但是转换后效率不错。

出0入0汤圆

发表于 2021-4-26 20:37:11 | 显示全部楼层
这是挖坑吧

出0入27汤圆

发表于 2021-4-26 23:53:18 | 显示全部楼层
大家的想象力要发散一下,比如把软件工程师当做一个程序,那么只要你当了老板,就可以用汇编跨平台编程了。
比如:
call  A工程,51ASM
call  B工程,ARMASM
call  C工程,X86ASM

出20入67汤圆

发表于 2021-4-27 00:38:01 来自手机 | 显示全部楼层
楼主可以先把简单的实现了,先用汇编写个usb总线协议吧

出15入9汤圆

发表于 2021-4-27 06:56:56 | 显示全部楼层
不考虑算法跟数据结构直接说汇编效率高的,可以说就是没有任何操作系统经验。

如果你想CPU占用率越低越好,最好的办法是整一块PCI-E的运算卡。让FPGA帮你算,相信我,绝对CPU爆低,速度还特别快。

出0入0汤圆

发表于 2021-4-30 11:40:31 | 显示全部楼层
2020echo 发表于 2021-4-25 18:25
普通电脑台式机或者笔记本电脑。

跑一个很复杂的上位机软件。

用汇编写很复杂的上位机程序,目的是降低CPU使用率,
你这是相当于纯手工打造航天飞机,估计只能当工艺品。

出20入0汤圆

发表于 2021-5-2 13:36:01 | 显示全部楼层
哈哈,搞两个进程,主程序平时sleep,按需得到结果显示,另一进程注入式隐藏,负责耗时任务

出0入32汤圆

 楼主| 发表于 2021-5-2 17:51:24 | 显示全部楼层
wgainn 发表于 2021-5-2 13:36
哈哈,搞两个进程,主程序平时sleep,按需得到结果显示,另一进程注入式隐藏,负责耗时任务 ...

注入式隐藏。。。客户无法发现吗?

出0入0汤圆

发表于 2021-5-2 21:34:43 来自手机 | 显示全部楼层
楼主要求cpu占用率低,任务里加个sleep就可以了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 03:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表