我从哪里开始组装?

2024-03-17

嘿,我会用 C 语言编程,会一点 Python 和 Pascal,我真的很想学习汇编。我今年 18 岁,高中毕业,编程是​​我的爱好,因为学业确实不是什么挑战。

我下载了几本关于汇编的书籍,它们是:汇编的艺术、初学者的汇编、完全初学者的汇编和 Wrox 专业汇编语言。我还下载了 FASM、MASM 和 HLA 编译器。

现在有几个问题。

  1. 完全初学者汇编中的示例适用于 MASM,我应该在模拟器中运行它们吗?有人告诉我,如果我不使用模拟器,我可能会损坏我的电脑,如果是,我应该使用哪个模拟器?

  2. 另外,开发人员如何使他们的汇编代码可移植?我在这个主题上找到的唯一信息是关于编写病毒的,因为用汇编语言编写的病毒必须是可移植的。

  3. HLA 到底是什么?它是真实的东西还是只是一个伪装成汇编来帮助初学者汇编的 HLL?

  4. 除了明显的 vxheaven 和 hacker 网站之外,汇编社区在哪里?

我最近读了很多书,但我感觉自己就像一个正在学习拉丁语的人,但永远不会去梵蒂冈见到其他说拉丁语的人。我的朋友都用 Java 编程,但似乎并不关心 C 或 C++,他们认为他们可以使用 Java 做所有事情。我在 Intel 上运行 Windows 7 和 Ubuntu 10.0.10。我现在只编程了大约一年......我是否太快进入汇编了?我想学习汇编的原因:

  1. 想要更多地了解 CPU 的工作原理。
  2. 寻找挑战。
  3. 想学习编写高效的代码。
  4. 想要编写更小更快的程序。
  5. 当我掌握了汇编之后,想了解更多关于操作系统开发的知识。
  6. 如果我掌握了汇编,学习更多 HLL 会更容易。
  7. 希望在申请工作时能提供一些其他人没有的东西。
  8. 对 AVR 感兴趣,例如 Arduino,它使用 C 而不是汇编,但想了解更多有关 AVR 的信息。

谢谢。时间


1) 运行汇编程序对系统的“损害”不会比运行 C 程序更大。在现代操作系统上,最糟糕的结果通常是进程崩溃。不过,无意中从汇编代码中导致进程崩溃可能会更容易一些。如果你想得到一些东西useful在模拟器之外,请查看 Bochs 或 QEMU - 他们不仅提供沙箱,还提供有用的调试工具。不过,即使没有虚拟机,您也可以使用常规调试器在常规操作系统上编写+测试代码。

2)你不知道,真的。您可以像 C 语言一样跨操作系统(但使用相同的 CPU)进行移植,但是跨 CPU 汇编没有意义(如果您想这样做,您最好使用 C 或 .NET 或 Java 字节码)。

3)许多争论的主题。取决于你如何看待它......汇编器实际上只是一个处理汇编语言的编译器。组装的风格有很多种,有些比其他的更高级;有些则比其他的更高级。大多数可用于 x86 的都有宏支持。 HLA 添加了一个lot宏支持和很多人不喜欢的语法,再加上一个大的标准库。不是我喜欢的(我宁愿使用“真正的”HLL),但在我的书中它仍然是汇编语言。

4) http://www.asmcommunity.net/board/ http://www.asmcommunity.net/board/ , http://board.flatassembler.net http://board.flatassembler.net:) - 远离 IRC 频道。另外,请远离 usenet alt.lang.assemble,它几乎已经被一些卑鄙的人摧毁了。

至于学习汇编的几个原因:

6.如果我掌握了汇编,学习更多HLL会更容易。

不一定,如果你在深入研究 HLL 之前“做太多”,事情可能会变得更加困难。我发现一些机器架构知识可以帮助您编写出更好的软件,但前提是您学会不要一直沉迷于无关紧要的微小细节。

7.在申请工作时希望能提供一些别人没有的东西。

不一定对您有帮助,因为装配在大多数职位中完全无关紧要。哎呀,你可能会冒着“哦,他永远不会把事情做好,迷失在无用的微优化中”的偏见。

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

我从哪里开始组装? 的相关文章

  • 用于读/写 XMM 和 YMM 寄存器的内联汇编代码?

    我有 2 个变量来模拟 X86 XMM 和 YMM 如下所示 uint64 t xmm value 2 uint64 t ymm value 4 现在我想使用内联汇编来读取和写入 XMM YMM 寄存器 如何编写GCC内联汇编来复制xmm
  • 如何在汇编程序中使用 C 库?

    我想知道如何用汇编语言编写文本编辑器 但现代操作系统需要 C 库 特别是对于它们的窗口系统 我找到了这个page http pengu1n is programmer com posts 8304 html 这对我有很大帮助 但我想知道是否
  • elf .rel.text 部分中 R_386_32/R_386_PC32 的含义

    为了理解重定位的概念 我编写了一个简单的 chk c 程序 如下所示 1 include
  • MASM 字符串反转

    好吧 我正在讨论这个问题 可能是一个非常复杂的解决方案 但这是我脑海中浮现的第一件事 我需要编写一个汇编语言程序来反转 源 字符串 而不使用 目标 字符串 临时变量 这是我的尝试 INCLUDE Irvine32 inc data sour
  • C/C++ 中的简单“Hello World”内联汇编语言程序

    我使用 devcpp 和 borland c 编译器 asm mov ax 4 I O Func mov bx 1 Output func mov cx name address of the string mov dx 6 length
  • 左/右旋转进位的实际用途

    循环左进位和循环右进位指令有哪些实际用途 在我的汇编课上 我们无法想出一个有用的好例子 如果要将位从一个操作数移出并移入另一个操作数 SHL EAX 1 move sign bit of EAX RCL EDX into LSB of ED
  • 使用 gdb 调试反汇编库

    在Linux和Mac OS X中可以使用strapi和next来调试应用程序而无需调试信息 在 Mac OS X 上 gdb 显示在库内部调用的函数 尽管有时会在每个 stepi 指令中推进多个汇编程序指令 在 Linux 上 当我进入动态
  • 装配中出现奇怪的字符?

    我写了以下代码 386 model small stack 100h data text db Paper 0 code start lea dx text mov ah 9h int 21h mov ah 4ch int 21h end
  • 汇编指令陷阱有什么作用?

    当程序需要时 程序通常会发出软件陷阱 由操作系统提供服务 通用异常处理程序 操作系统确定陷阱的原因并做出响应 适当地 汇编指令 trap 和 BASIC 中的 TRAP 指令一样吗 答案似乎是肯定的 你能接受还是拒绝我的结论 不中断 的代码
  • 破坏/分解函数的函数

    我以前有过 here https stackoverflow com questions 4920610 c class function in assembly 已经表明 C 函数不容易用汇编表示 现在我有兴趣以一种或另一种方式阅读它们
  • AVX512 掩码寄存器(k1...k7)的 GNU C 内联 asm 输入约束?

    AVX512 为其算术命令引入了 opmask 功能 一个简单的例子 上帝螺栓 org https godbolt org z P7xWD8 include
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • CALL指令是否总是将EIP指向的地址压入堆栈?

    x86架构中函数调用时是否存在返回地址不入栈的情况 No CALL根据定义 将在跳转到目标地址之前将返回地址压入堆栈 该返回地址是EIP or RIP sizeof call instruction 通常为 5 个字节 英特尔 64 和 I
  • 尝试使用 x86 程序集 GNU GAS 在数组索引处赋值时出现错误

    我在用x86GNU 与 GCC 的程序集 并尝试实现相当于以下内容的程序集c c int x 10 x 0 5 但是 当我尝试运行 使用命令 a out 我的汇编代码如下 第一次编译后gcc filename s 错误Segmentatio
  • 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

    我正在读一本书 计算机组织与设计RISC V版 我遇到了 S B 和 U J 指令类型的编码 我上面提到的那些类型有奇怪的编码立即字段 S B 类型将直接字段分为两部分 这是有道理的 因为所有指令编码都必须相似 但我无法理解为什么立即字段以
  • 在 x86-64 CPU 上通过交叉修改代码重现意外行为

    Question 对于可能在 x86 或 x86 x64 系统上触发意外行为的交叉修改代码有哪些想法 在这些系统中 交叉修改代码中的所有操作均已正确完成 但在执行处理器之前执行序列化指令除外修改代码 如下所述 我有一个 Core 2 Duo
  • 汇编8086监听键盘中断

    我有与此完全相同的问题 边画边听键盘 https stackoverflow com questions 13970325 8086 listen to keyboard while drawing 但第一个答案 接受的答案 只听键盘一次
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • AVX-512CD(冲突检测)与原子变量访问有何不同?

    所以我在看他们展示了如何 void Histogram const float age int const hist const int n const float group width const int m const float o
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include

随机推荐

  • 如何使用 PHP 页面使用自定义用户名验证的 WCF Web 服务?

    我很难从 PHP 站点使用安全的 WCF Web 服务 我对 PHP 的了解有限 我在网上找到了各种示例 但还没有成功地使它们工作 我有一个 Silverlight 应用程序也使用这个 WebService 并且它工作正常 但是当我运行 P
  • 如何使用 git 仅暂存新文件的一部分?

    I love git add 交互式 现在它已成为我日常工作流程的一部分 问题似乎不适用于未跟踪的文件 我想要做的是跟踪一个新文件 但只添加其中的一部分 即这个新文件的某些部分尚未准备好进行暂存 例如 使用 git add i 我可以选择补
  • 插件Android支持异常,Worker因异常退出

    我刚刚在 Linux 上更新到 Android Studio 2 2 2 稳定版 现在经常崩溃 已经尝试过 使缓存无效 重新启动 清洁工程 删除 gradle 缓存 rm gradle caches rf 删除 Android Studio
  • 如何将 sitemap.xml 添加到 angularJS 站点?

    我在应用程序文件夹中添加了 sitemap xml 但如何将其公开以便谷歌网站管理员工具可以获取它 Thanks 来自谷歌的文档 有两种不同的方法可以让 Google 可以使用您的站点地图 OR 插入 在 robots txt 文件中的任意
  • 通过指针访问是否会改变严格的别名语义?

    有了这些定义 struct My Header uintptr t bits struct Foo Type struct My Header header int x struct Foo Type foo struct Bar Type
  • 信号栈

    我确实读到信号需要有一个单独的堆栈 您认为它为什么以及如何实现 它们是动态分配还是静态分配 内存分配是如何完成的 所有信号都一样吗 信号需要单独堆栈的原因是 如果正常堆栈损坏或溢出 信号仍然可以执行 我认为信号堆栈通常是动态分配的 但它可以
  • htmlspecialchars_decode() 不适用于空格

    我正在尝试使用 htmlspecialchars decode 但它不解码 nbsp 进入空间 这个问题有解决办法吗 My code query mysql query select from nowosci order by id des
  • 如何使用 Django/nginx 部署仅 HTTPS 的站点?

    我原来的问题是如何为 Django 登录页面启用 HTTPS https stackoverflow com questions 8015685 how to enable https in django auth generated pa
  • 如何使用 Selenium WebDriver 获取 HTTP 响应代码

    我已经使用 Selenium2 WebDriver 编写了测试 并且想要测试 HTTP 请求是否返回 HTTP 403 Forbidden 是否可以使用 Selenium WebDriver 获取 HTTP 响应状态代码 一句话 不 使用
  • 将图像图标添加到按钮/标签 Swing

    我知道这个问题已经发布了 但我已经尝试了我发现的所有内容 但没有任何效果 我有一个 Maven 项目 我想在按钮上使用图像 我把图像放在src main res folder Maven clean Maven 安装后 我的所有图像都可以在
  • 对对齐的 malloc 实现的解释

    这不是作业 这纯粹是为了我自己的个人教育 我不知道如何实现对齐的 malloc 所以在网上查找并发现这个网站 https sites google com site ruslancray lab bookshelf interview ci
  • 始终排除在 SVN for Netbeans 中提交的文件夹

    我使用Netbeans 7 0和内置的SVN客户端进行开发 我希望始终从提交 更新中排除某些文件和文件夹 例如 缓存 或 日志 因为它们对于存储库本身并不重要 我没有找到任何设置来执行此操作 而且 Netbeans 也没有在其常见问题解答中
  • MySQL 在没有缓存的情况下增强性能

    我正在使用 MySQL 版本 5 5 14 从 500 万行的表运行以下查询 SELECT P ID P Type P Name P cty X P latlng as lat Y P latlng as lng P cur P ak P
  • JSDoc 和 JavaScript 单例文档

    我有一个 JavaScript 单例定义为 A description here class com mydomain ClassName function constructor lends com mydomain ClassName
  • 带有包含路径和源路径的 CMake - 基本设置

    我正在尝试建立一个看起来像我自己的项目的测试项目 只是为了让事情首先正常工作 它看起来像这样 MainProject inc main h MainProject src main cpp LibProject inc test h Lib
  • Codemagic IOS 构建需要很长时间才能完成

    我正在尝试在 Codemagic 上设置我的 flutter 应用程序 但为 IOS 构建大约需要 40 50 分钟 日志显示是compiling files c and cc 有很多这样的文件正在编译 有没有办法让构建速度更快 我是否缺少
  • 轻量级的 Scala fork join 语法

    尽管即将推出 java 7 标准 fork join 框架 但我正在构建一些语法轻量级的辅助方法 以便客户端并行运行代码 这是一个可运行的 main 方法来说明这个想法 import actors Futures object ForkTe
  • 如何将值从一种形式传递到另一种形式?

    考虑一下我有两个窗口窗体的情况 比如说F1 and F2 使用后F1 我现在已经打电话了F2 ShowDialog 这使得F2也在屏幕上 现在两种形式都可见 我如何从F1 to F2 另外 有一次F2 模态对话框 结束 如何返回数据F1 有
  • Android canvas drawText 文本的 y 位置

    我正在使用 Canvas 创建一个带有一些背景和一些文本的 Drawable 该可绘制对象用作 EditText 内的复合可绘制对象 文本是通过在画布上的 drawText 绘制的 但在某些情况下 我确实对绘制文本的 y 位置存在问题 在这
  • 我从哪里开始组装?

    嘿 我会用 C 语言编程 会一点 Python 和 Pascal 我真的很想学习汇编 我今年 18 岁 高中毕业 编程是 我的爱好 因为学业确实不是什么挑战 我下载了几本关于汇编的书籍 它们是 汇编的艺术 初学者的汇编 完全初学者的汇编和