打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
NASM手册摘要(略读笔记)
NASM手册摘要(略读笔记) 你是否渴望回到那样的时代,当男人像男子汉并且能自己编写驱动程序? ---Linus
NASM手册:
NASM: 开源的,x86体系的,跨平台的汇编器.
NASM和MASM的不同点:
NASM大小写敏感.
访问一个内存地址的内容,在地址值上添加中括号
不存储符号的变量类型,再指令中显示的制定类型
不能自动识别远调用还是近调用,必须显式指定
优秀设计无不化繁为简,放下并自在.
NASM的汇编语言的语句
格式:lable: instruction operands     ;commit
两种指令: 预编译指令或汇编指令
Directives和Instruction难道都翻译程指令,真不好办.
数据定义用到的伪指令
d*系列定义初始化的数据
res*系列定义未被初始化的数据
INCBIN可以导入外部文件中的数据
EQU定义常量
times重复指令.对数据定义和真实指令都可以使用.
道生一,一生二,二生三,三生万物.
万物归三,三归二,二归一,一归道.
有效地址
指定地址的时候可以使用各种表达式:段前缀,计算表达式
看来这些表达式必须由NASM计算,把结果写到目标代码,而不是生成计算代码.
常量
支持各种常用进制的整数常量,十进制,十六进制,八进制,二进制
单引号定义字符常量,栈式存放
浮点数常量,也有各种不同的精度
表达式
特殊变量,$当前地址,$$当前段的地址
逻辑位计算,四则运算等.
SEG操作符取段基地址
WRT = With Ref to, 得到一个符号相对于其他的段地址的偏移
关键字STRICT, 严格按照字符长度操作,不做优化
限制表达式
NASM使用两次遍历:第一遍计算长度,第二遍产生代码
两次遍历导致了限制,为了更好的描述这些限制,规定了一些指令只能使用限制表达式,
限制表达式的值,必须在第一遍遍历中就能够计算出来.
本地标签(符号)
以点开头的标签为本地标签,和上一个非本地标签关联
使用..@开头的标签,在宏定义中使用,(我觉得应该叫它,相对标签)。
实际上在宏中使用的是%%开头的标签,被预处理器处理程..@开头,
预处理,宏展开后保证每个这样标签是全局唯一的
预处理器
代码在宏定义层次上不过是数据。程序员的思维在不同的层次中跳跃.
当在递归的多维空间游荡时,一个不成熟的程序员是会迷路的.
强大的宏预处理器: 条件组合,多级包含,多行或单行,上下文栈机构
宏定义中可以带参数.
%define宏自在调用时展开,%xdefine宏在其他宏定义中也可以被展开.
宏连接符号"%+",把字符串加在一起.
%assign,使用数字计算的表达式来定义数字量.
含有函数性质的宏,使用函数的运算结果为宏的值,substr,strlen
使用贪婪(greedy)参数把多余参数,拼接程逗号分隔的列表,可以被d*伪指令直接使用.
宏还支持默认参数
类似shift调用的,%rotate和个数特殊遍历%0, 似乎是给变参数个数的函数准备
奇怪的条件参数,是指令的一部分.,
条件组合,和C语言的编译预处理相似.一大堆条件表达式的预处理指令
包含文件,而且像C语言一样防止多次包含.
%rep循环,多次调用多行的宏,
预处理中的上下问栈(比较独特的一个东西.)
在多个宏定义中共享label,形成共通完成一个功能的复杂macro.
在栈中保存上下文环境,在上下文环境中定义label
能使用这东西在宏级别上实现各种控制流
NASM定义了许多标准宏,如果宏是函数,那么这应该就构成的标准汇编函数库
Assembler Directives
User Level Directive VS Primative Directive
Format-specific Directive
0x66, 0x67 prifix is use on diffecter bit instruction.
Extern 定义外部符号, 这和C语言很像,这只有部分文件格式支持。
支持好多系统的各种各样的格式,不同格式也有自己独特的汇编指令
bin: Flat-Form Binary Output.
传说中的引导扇区,就是把这种格式的文件写到了磁盘的开头的扇区里面.
obj: Microsoft OMF Object Files
win32: Microsoft Win32 Object Files
win64: Microsoft Win64 Object Files
微软竟然敢宣称他们的格式和coff兼容
coff: Common Object File Format
macho: Mach Object File Format
elf,elf32,elf64: Executable and Linkable Format Object Files
aout: lINUX 'a.out' object file,早期的linux使用
aoutb: BSD a.out Object files.
as86: Minix/Linux 'as86' Object Files
rdf : Relocatable Dynamic Object File Format
dbg: Debugging Format
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Nasm中文手册四
汇编教程nasm《nasm中文手册 》(有一件事NASM不能处理)
周立功:数据的输入输出:printf、scanf、预处理器指令
第4章_1 基本语法(1)
C++多文件程序
ASM
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服