汇编笔记
文章平均质量分 69
汇编相关内容的笔记、问题及其解决方案
zhonguncle
居高才能临下,深入才能浅出(这话是谁说的呢?肯定不是鲁迅)
展开
-
如何使用rdtsc和C/C++来测量运行时间(如何使用内联汇编和获取CPU的TSC时钟频率)
CPUID 签名就是当EAX=1时,cpuid在EAX中的返回值。内容如下:实际上并不会用到整个EAX的内容,只要取得处理器的Model部分即可。原创 2024-04-22 19:33:11 · 1817 阅读 · 1 评论 -
MSR是个什么寄存器
MSR 的概念是不易理解,所以这一节只说一些 MSR 的外在,比如形容和指令等,然后展开说说,看完整篇文章你应该就能明白了。MSR 是一组寄存器,主要可用于操作系统或执行过程(即在特权级别0下运行的代码),这些寄存器的数量和功能因处理器不同,可能也不同。实际上所有的 MSR 处理系统相关的函数,并且不能被应用程序访问,读取和写入 MSR 需要使用WRMSR和RDMSR两个系统指令。而本文的 TSC 是一个例外(使用rdtsc等指令也可以读取)。原创 2024-04-22 19:31:32 · 1917 阅读 · 0 评论 -
苹果自家的as汇编器的特色风格(与微软masm汇编器语言风格的不同)
as汇编器是苹果的汇编器,Xcode 生成的代码也是as风格的,而as风格与大部分人在大学里所学的微软的masm风格大相径庭,所以本文会列出二者的不同。不过由于细节太多,没法一次性写出所有的不同,所以会持续更新。你可能会找到一本手册名为《Mac OS X Assembler Guide》,但是这本手册出自 2005 年,是为了过度到 Intel 所写的。但是现在很多事情已经变了,现在的as手册最近更新日期为 2020 年 4 月 23 日,也就是 M1 登场的日子。原创 2023-05-14 15:44:43 · 676 阅读 · 0 评论 -
clang 如何产生汇编代码文件
有时候为了学习或者调试,需要查看程序的汇编代码。这在很多 GUI 的 IDE 中很方便实现,例如在 Xcode 中,点击“Product”-“Perform Action”-“Assemble 文件名”就可以,如下:那么在终端中呢?首先写一个 C 源码文件 test.c。内容如下:#include <stdio.h>int main() { printf("hello world!\n"); return 0;}然后使用以下命令:$ cc -S test.c原创 2022-04-23 04:22:10 · 3558 阅读 · 0 评论 -
macOS 汇编指南
现在很多汇编的学习资料、途径和工具都是关于 Windows 下的,所以这里来介绍一下 macOS 上学习使用汇编需要的资料和工具。为什么需要学习汇编(使用途径)汇编是计算机的“魔法”,虽然做个只会高级语言的“战士”也可以,但是当给“武器”附魔之后,战斗力也会大大增加(当然也有“玩火自焚”的)。在现代,学习汇编之后的使用途径有几种:直接用汇编指令写程序的代码,然后使用汇编器(Assembler)汇编成程序(这种学习的过程中可能使用比较多,在实际情况下很少用,因为太复杂了)。用在 C 语言代码中,提原创 2022-04-15 00:33:24 · 7094 阅读 · 1 评论 -
汇编中的尺寸命令(Size Directives)
在汇编过程中,可能需要指定预计的数据大小,例如栈的大小,这时候就需要用到尺寸命令(Size Directives)。命令尺寸分三种(可以是是小写):BYTE PTR [eax]:表示从 eax 存储的地址,开始的 1 个字节。WORD PTR [eax]:表示从 eax 存储的地址,开始的 2 个字节。DWORD PTR [eax]:表示从 eax 存储的地址,开始的 4 个字节。这里需要注意的是,如果使用mov指令来设置一个位置,那么:mov BYTE PTR [eax],32:表示将原创 2022-05-08 02:25:08 · 1747 阅读 · 0 评论
分享