了解 ATT 汇编语言

2023-12-20

C版本:

int arith(int x, int y, int z)
{
    int t1 = x+y;
    int t2 = z*48;
    int t3 = t1 & 0xFFFF;
    int t4 = t2 * t3;
    return t4;
}

同一程序的 ATT 汇编版本:

x 位于 %ebp+8,y 位于 %ebp+12,z 位于 %ebp+16

movl   16(ebp), %eax    
leal   (%eax, %eax, 2), %eax   
sall   $4, %eax      // t2 = z* 48... This is where I get confused
movl   12(%ebp), %edx   
addl   8(%ebp), %edx
andl   $65535, %edx
imull  %edx, %eax

我了解除了左移之外它在程序的所有点上所做的一切。

我假设它会左移 4 次。这是为什么?

谢谢你!

编辑:我也明白我感到困惑的部分相当于 C 版本的 z*48 部分。

我不明白的是左移 4 次如何等于 z*48。


你错过了leal (%eax, %eax, 2), %eax线。应用一些数学计算,汇编代码如下:



a := x
a := a + 2*a    // a = 3*x
a := a * 2^4    // a = x * 3*16
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 ATT 汇编语言 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • “你好世界”从何而来?

    hello world 通常是任何编程语言的第一个示例 我一直想知道这句话是从哪里来的 又是在哪里第一次使用的 我曾经被告知这是有史以来在计算机屏幕上显示的第一句话 但我找不到任何对此的参考 所以我的问题是 练习在哪里使用 hello wo
  • 有没有办法为 Kotlin 顶级函数引用 Java 类?

    我想使用以下方式在顶级函数中加载资源Class getResourceAsStream 有什么方法可以获取顶级函数将被编译到的类的引用 以便我可以编写 例如 val myThing readFromStream MYCLASS getRes
  • 如何在 IntelliJ 插件中“注册”新的模块类型?

    我是 IntelliJ 插件开发的初学者 但我希望我的插件在 新项目 新模块 窗口中注册新的模块类型 我已经搜索了插件开发人员的文档 但找不到任何有用的东西 我还查看了 Kotlin 和 Scala 等现有插件 它们也添加了新的模块类型 但
  • 是否有 Java OCR 工具将文本图像转换为可编辑的文本文件?

    我正在开发一个项目 该项目需要拍摄文本 来自任何文本的硬拷贝 并将该文本转换为文本文件 然后我想使用该文本文件来做一些不同的事情 例如提供新闻文章的超链接或允许用户编辑文档 到目前为止我尝试过的工具是来自sourceforge net的Ja
  • 在选择之前和之后添加和删除字符

    我怎样才能获得角色before AND after选定的文本 然后删除它们 或者更确切地说 如果所选文本在字符内 请删除周围的字符 这样如果有任何额外的空格 字符仍将被删除 例如 双击文本时 它将选择文本 但不会选择前后的反引号 然后我想删
  • 调用 DriveApp getFolderById 或 getFileById 时 Google 附加脚本引发服务器错误

    我已经部署了一个电子表格绑定脚本作为附加组件 当它是容器绑定时它起作用了 但现在 作为附加组件 当我调用 DriveApp getFolderById 时 我收到服务器错误 function makeMap console log star
  • documentFragment.cloneNode(true) 不会克隆 jQuery 数据

    我有一个 documentFragment 其中有几个子节点 其中添加了一些 data 如下所示 myDocumentFragment document createDocumentFragment for myDocumentFragme
  • vuejs 从子组件更新父数据

    我开始玩 vuejs 2 0 我构建了一个简单的页面 其中包含一个组件 该页面有一个带有数据的 Vue 实例 在该页面上 我注册了该组件并将其添加到 html 中 该组件有一个input type text 我希望该值反映在父级 主 Vue
  • 相对于彼此定位多个嵌套 div

    我有一个外部 div 外部 div 内的 div 以及这些 div 内的 div 我想将最里面的 div 定位到它的父级 将中间级别的 div 定位到它的父级 即最外面的 div 对于 div 内的 div 我们可以使用父 div 的相对定
  • 我将如何编写 purrr::keep 的递归版本?

    假设我有一个嵌套列表 其中包含一堆不同级别的数据框 我想提取出数据框的扁平列表 我该如何写这个使用purrr功能 我应该看一下reduce 例如 给定数据 s lt list x 1 10 data data frame report LE
  • 重定向后 Codeigniter 会话销毁

    我正在会话中添加订单 ID 和购物车项目 如果我在会话中添加 2 个购物车商品 效果很好 如果我在会话中添加 3 个或更多购物车商品 重定向后所有数据丢失 控制器的名称是 checkout function pay order order
  • LINQ to SQL Server 2000:“必须声明变量‘@p0’”

    我创建了这个简单的 LINQ 查询 var result from invoice in invoiceTable where invoice Id 1 select invoice Document 它生成以下 SQL SELECT t0
  • 如何用C#关闭计算机

    从 C 程序关闭计算机的最佳方法是什么 我发现了一些有效的方法 我将在下面发布它们 但它们都不是非常优雅 我正在寻找更简单且原生 net 的东西 从 Windows XP 开始工作 在 win 2000 或更低版本中不可用 这是最快的方法
  • 将 Web 项目发布到 azure 失败:“IsolatedCSPack”任务意外失败

    我有想要发布并上传到 windows azure 的 Web 应用程序 我使用 Visual Studio 2008 我单击 发布 在 发布云服务 窗口中选择 仅创建服务包 然后单击 确定 发布失败 例外情况是 Error 26 The I
  • 如何使用 MessageHeader.CreateHeader() 方法向 WCF 消息头添加属性?

    我使用以下代码添加 WCF 自定义标头 MessageHeader header MessageHeader CreateHeader Key ns Value OperationContext Current OutgoingMessag
  • 如何在 Winform C# 上创建带有圆角/边缘的按钮?

    好吧 我将在按钮上放置一个图像 该图像有圆角 我怎样才能做到这一点 我已经在谷歌上搜索了几个小时 但仍然没有运气 您可以使用以下矩形形状Microsoft Visual Basic PowerPacks http go microsoft
  • 显式等待作为另一个元素的子元素的元素

    如果您有一个 WebElement 对象 您可以像这样搜索它的子对象 element WebElement blah element find element by id blah 是否可以使用显式等待来做同样的事情 如 wait WebD
  • 使用 SELECT * 时出现性能问题? [复制]

    这个问题在这里已经有答案了 可能的重复 哪个更快 最好 SELECT 或 SELECT 列 1 列 2 列 3 等 https stackoverflow com questions 65512 which is faster best s
  • 我无法使用 expo-media-library 访问 ios 上的音频文件

    我正在尝试使用 expo media library 获取用户手机上的所有歌曲 如下所示 const getAudioFiles async gt let media await MediaLibrary getAssetsAsync me
  • 了解 ATT 汇编语言

    C版本 int arith int x int y int z int t1 x y int t2 z 48 int t3 t1 0xFFFF int t4 t2 t3 return t4 同一程序的 ATT 汇编版本 x 位于 ebp 8