linux汇编字符长怎么看,linux – 在内联GNU汇编程序中获取字符串长...

使用GCC的内联asm来学习汇编的问题在于你花了一半的时间来学习gcc的内联汇编是如何工作的,而不是实际学习汇编.例如,这是我如何编写相同的代码:

#include

int getStringLength(const char *pStr){

int len;

__asm__ (

"repne scasb

"

"not %%ecx

"

"dec %%ecx"

:"=c" (len), "+D"(pStr) /*Outputs*/

:"c"(-1), "a"(0) /*Inputs*/

/* tell the compiler we read the memory pointed to by pStr,

with a dummy input so we don't need a "memory" clobber */

, "m" (*(const struct {char a; char x[];} *) pStr)

);

return len;

}

将此与您的示例进行比较

>我没有初始化len,因为asm将它声明为输出(= c).

>没有必要复制pStr,因为它是一个局部变量.根据规范,我们已经允许更改它(虽然因为它是const我们不应该修改它指向的数据).

>没有理由告诉内联asm将Ptr放入eax,只是让你的asm将它移动到edi.我只是把edi中的值放在第一位.请注意,由于edi中的值正在发生变化,我们不能仅将其声明为“输入”(按规范,内联asm不得更改输入值).将其更改为读/写输出可解决此问题.

>没有必要让asm零eax,因为你可以有限制为你做.作为附带好处,gcc将“知道”它在eax寄存器中有0,并且(在优化版本中)它可以重用它(想想:检查2个字符串的长度).

>我也可以使用约束来初始化ecx.如上所述,不允许更改输入值.但是由于我将ecx定义为输出,gcc已经知道我正在改变它.

>由于ecx,eax和edi的内容都是明确指定的,因此不再需要破坏任何内容.

所有这些都使得(略微)更短和更有效的代码.

但这太荒谬了.怎么了(我能说’哎呀’吗?)你应该知道这一切吗?

如果目标是学习asm,那么使用inline asm并不是你最好的方法(实际上我会说在大多数情况下,inline asm是bad idea).我建议您将getStringLength声明为extern并将其完全写入asm,然后将其与您的C代码链接.

通过这种方式,您可以了解参数传递,返回值,保留寄存器(以及学习哪些寄存器必须保留以及哪些可以安全地用作划痕),堆栈帧,如何将asm与C链接等等.所有对于内联asm而言,这比gobbledygook更有用.

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

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

相关文章

埃森哲5G智慧城市报告:美国GDP将狂增5千亿

来源:智东西 概要:第五代通信技术将不仅仅带来网速的提高(eMBB),更意味着可靠的低延时(uRLLC)海量物联网(mMTC)。 5G被认为是万物互联的开始。第五代通信技术将不仅仅带来…

linux 信号发生器,用STM32实现函数信号发生器

自己慢慢看,,,,[mw_shl_codec,true]#ifndef __BSP_WAVEMAKER_H#define __BSP_WAVEMAKER_H#include "stm32f10x.h"#define DAC_DHR12RD_Address 0x40007420#define DAC_DHR8R1_Address 0x40007410#define DAC_DHR12R1_Ad…

星际旅行、返老还童…1.3万字看完今年的WE大会,简直就是一部科幻电影

来源:腾讯科技 概要:在第五届WE大会上,科学家们的“脑洞”更大了:星际旅行、返老还童等一个个过去科幻电影里的镜头出现了。 11月5日,WE大会在老时间、老地点如约而至。 时光飞速,WE大会如今已经是第五届了…

gdp笔记本 linux,linux中如何使用微软鼠标的第4、5键

虽说使用的人大都对微软没什么好感,但不能否认微软确实也出了不少好东西呀,比如微软鼠标(IE系列) icon_smile.gif IE2.0和以上版本都有5个按钮,除了正常的左中右外,两侧还各有一个,在windows中可用来支持浏览器的前进/…

智能优化算法应用:基于战争策略算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于战争策略算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于战争策略算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.战争策略算法4.实验参数设定5.算法结果6.…

从芯片巨头沦落到收购对象 高通是怎样失去魔力的?

来源:凤凰科技 概要:过去5年,高通股价几乎是原地踏步,而其他科技公司的股价却一直在快速上涨。 据《福布斯》北京时间11月6日报道,在华尔街,高通已经失去昔日魔力。过去5年,高通股价几乎是原地踏…

zynq linux网口不通,已解决: ZYNQ 7035以太网口无法连通 - Community Forums

网口使用emio连接mii phy芯片,lwIP Echo Server测试例子可以运行,u-boot,linux无法连ping通,能识别到芯片;我该如何配置u-boot与内核?关键打印信息:U-Boot 2019.01 (May 20 2020 - 05:49:03 000…

2017年中国人工智能产业专题研究报告(完整版)

来源:数据观 概要:目前,中国的人工智能研究处于爆发期,行业巨头公司正逐渐完善自身在人工智能的产业链布局,而不断涌现出的创业公司将持续在垂直领域深耕深挖。 目前,中国的人工智能研究处于爆发期&#x…

C语言的广泛作用的论文,关于c语言论文模板

该频道包含关于c语言论文模板和c语言的范例,免费为你学习关于c语言的论文提供相关参考文献资料。摘要:在一套试卷中,重复题问题是影响考试质量的一个重要因素。该文针對C语言试卷中选择题间易出现重复题问题进行深入研究 通过对代码相似性检测以及文。摘…

周志华:最新实验表明gcForest已经是最好的非深度神经网络方法

北京时间 11月5 日到11月6日,西瓜书《机器学习》作者、南京大学机器学习与数据挖掘研究所(LAMDA)周志华教授日前在MLA 2017上的演讲:深度森林初探——讲述的关于他最新集成学习研究成果-深度森林,一种对深度神经网络可…

C语言答案写成科学记数法,c语言科学记数法_C语言中、科学计数法123456e+002具体代表什么意思、或者说怎么理解这个数_淘题吧...

『壹』 c语言用double写了一个表示科学计数法的程序,但是却读不出来30位以上的数,怎么办double 是抄64 位(8字节),52 位代表有袭效数位,11 位表示指数,一位表示符号,精度(有效数位)十进制的 16 位。int64 的…

中国工程程院院士高文:从大数据科学到人工智能的迁移过程

概要:中国工程程院院士、北京大学教授高文应邀参加JDD京东金融全球数据探索者大会,并进行了以“探索大数据,迎接人工智能时代”为主题的演讲。 来源:亿欧 11月6日,京东举行JDD京东金融全球数据探索者大会,在…

男人女人小孩共32人c语言,C编程核心要点,你确信你会C语言?看完之后,男人沉默,女人流泪...

引言笔者有十余年的C开发经验,相比而言,我的C经验只有一两年,C比较简单,简单到《The C Programming Language》(C程序设计语言)只有区区的200多页,相比上千页的C大部头,不得不说真的很人性化了。C是古典艺术…

2017全球硬科技创新大会今日开幕 科技大腕聚集共绘西安“硬科技”发展蓝图

概要:2017全球硬科技创新大会今天在西安开幕。 来源:中国科技网 科技大腕聚集共绘西安“硬科技”发展蓝图 2017全球硬科技创新大会今天在西安开幕。本次大会参会人数超过5000人,其中有诺贝尔奖获得者、国内外相关领域院士专家、科技企业领袖、…

c语言能实现帧动画吗,CSS3 animation属性中的steps实现GIF动图(逐帧动画)

相信 animation 大家都用过很多,知道是 CSS3做动画用的。而我自己就只会在 X/Y轴 上做位移旋转,使用 animation-timing-function 规定动画的速度曲线,常用到的 贝塞尔曲线。但是这些动画效果都是连续性的。今天发现个新功能 animation-timing…

Sorenson Capital:值得投资的 5 种 AI 技术

概要:身为投资者的你,如果看好AI和机器学习的前景,又该在AI公司遍地开花的市场中,选择什么样的公司进行投资? 来源:36Kr 值得投资的机器学习和人工智能的应用有哪些? 人工智能、神经网络、机器…

myeclipse怎么运行c语言,windows下MyEclipse安装配置C/C++开发环境

windows下MyEclipse安装配置C/C开发环境 ,安装MinGW:假设安装路径为c:\MinGW编辑如下系统变量:变量名变量值PATH C:\MinGW\bin;LIBRARY_PATH C:\MinGW\libC_INCLUDEDE_PATHC:\MinGW\includeCPLUS_INCLUDE_PATH C:\MinGW\include\c\3.4.2;C:\M…

这个重量级产业,中国正在爆发!

来源:全球新论坛 概要:中国在汽车领域和先进国家差距很大,但是我们至少做了一件对的事情,在中国销售的车辆都是在中国制造。 集成电路产业是中国产业升级的重中之重,我们都知道汽车是人类第一大工业,中国在…

c语言布尔类型赋值给整型,C语言的布尔类型(_Bool)【转】

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼1. 我们自己定义的“仿布尔型”在C99标准被支持之前,我们常常自己模仿定义布尔型,方式有很多种,常见的有下面两种:view plaincopy to clipboardprint?/* 第一种方法 */#define TRUE …

AI论文引用排行榜丨微软第一,清华第九;Alphabet董事长看AI:美国仅领先5年,大陆追赶速度快;

来源:集微网 概要:根据The Verge报导,Schmidt表示,美国在AI人工智慧领域落后的风险相当高,他预测未来5年美国还有领先的实力,但之后大陆追上来的速度会非常快。 1.AI论文引用排行榜:微软第一,清华第九; 日经…