一个网站需要哪些东西,温州网站建设对比,海南网站制作公司,wordpress上传算流量吗第4章 汇编语言和汇编软件
该章主要介绍了汇编语言和汇编语言编译器的安装和使用。
汇编语言程序
该小节主要介绍了为什么要有汇编语言和汇编语言程序的一些基础写法。
书中有提到CPU有不同的架构#xff0c;汇编语言有不同的风格#xff0c;那么不同的CPU架构和不同的汇…第4章 汇编语言和汇编软件
该章主要介绍了汇编语言和汇编语言编译器的安装和使用。
汇编语言程序
该小节主要介绍了为什么要有汇编语言和汇编语言程序的一些基础写法。
书中有提到CPU有不同的架构汇编语言有不同的风格那么不同的CPU架构和不同的汇编风格到底是什么关系呢有些东西如果不了解全貌感觉身在此山中呢
为了厘清这些个东西继续搜资料资料链接参见文章尾部最后整理出汇编风格、编译器和指令集这3类。 汇编风格、编译器和CPU指令集架构整理 备注编译器和CPU指令集架构没有列全这里主要是列一些主要的。
这三大类之间的关系是什么呢因为编译器是将汇编代码编译成机器代码的程序理论上来说编译器可以决定风格和支持的CPU架构故列一个表格进行说明就清晰了。 不同的编译器的汇编风格和支持的CPU指令集架构 该书汇编主要采用NASM编译器Intel的风格支持x86和x86-64架构这下就清晰多了知道自己学习的是其中哪个汇编了位于整体中的哪个位置了。
书中列举了一些例子这里摘录如下
mov ax,3FH ;将立即数3EH传送到寄存器ax中
add bx,ax ;将寄存器bx的内容和寄存器ax的内容相加结果在bx中
add cx,ax ;将寄存器cx的内容和寄存器ax的内容相加结果在cx中3FH最后个H字母表明这是一个十六进制数但是很多高级语言中都是添加0x前缀
mov ax,0x3F作者提到为什么是用0x没有找到原因。我尝试去找了一下找到一篇 stackexchange 上一篇文章链接见文末大概得意思就是说
BCPL语言 使用了#b表示二进制、#o表示八进制、 #x 表示十六进制B语言 放弃了 # 这种方式采用 0 作为前缀表示八进制。又因为当时八进制和机器架构更加适合所以就没有设计十六进制的表示方式。C语言 时代十六进制和机器架构更合适所以结合B语言和BCPL语言就用了0x表示了。
作者如果有看到这篇文章能否请我喝杯咖啡哈
如果不习惯十六进制0x3F也可以用二进制和十进制代替
mov ax,63 ;十进制末尾可以加D如63D也可以不加。
mov ax,00111111B ;二进制末尾要加1个B几个进制之间列个表格就更加清楚了 0x3F各进制之间的表示 其实B、O、D、H就是对应英文单词的首字母英文好的话对变成帮助真的很大。
另外在网上搜索相关资料时发现了汇编语言的层级介绍遂摘录在此。 High Level and Low Level Language来源参考文章末尾 从图中可以看出Assembly Language处于机器语言和高级语言之间但是据我了解现在也有高级语言直接翻译成机器语言了不用经过汇编了。如C、Ruby、Go、Java、C#等。
NASM编译器
该小节介绍了NASM的安装和使用以及用什么IDE编写汇编和如何查看编译后二进制编码。
NASM的下载和安装
NASM的全称是Netwide Assembler它是可免费使用的开源软件并且可以支持Linux、Windows、MacOS等多平台。
NASM官网https://www.nasm.us
然后跟着书本讲解进行操作交作业。我的电脑是Win10所以下载了Windows 64位的并安装在了D\Env\NASM 目录。
然后配置Path环境变量 NASM配置环境变量 代码的书写和编译过程
书中作者自己编写了一个Nasmide软件编写汇编只是我没有用我自己习惯是用Visual Studio Code然后在增强版的CMD工具 PowerShell 里进行编译。
Visual Studio Code我是安装这个插件x86 and x86_64 Assembly显示效果也不错 Visual Studio Code编写汇编 PowerShell 一开始敲命令还挺麻烦的但是敲了第一次后可以通过 ctrlr 进行历史命令查找还是挺方便的。 ctrlr 进行历史命令查找 常用命令格式
nasm -f bin exam.asm -o exam.bin -l exam.lstf bin表示生成的文件只包含纯二进制的只有处理器能够识别的代码。-o输出的二进制文件运行就是用这个文件。-l输出的汇编列表文件方便debug用。
用HexView观察编译后的机器代码
生成二进制文件后调试的时候经常会需要查看二进制文件所以如果能转成16进制查看就比较友好。
书中作者介绍了 HexView 软件可以进行查看我还是习惯用 Visual Studio Code 想着是否有插件支持于是在插件库搜索 Hex发现了 Hex Editor 这个插件安装后
右击文件 - Open With - 多了一个Hex Editor选项 选择 Hex Editor 打开效果感觉也不错如下图 Visual Studio Code查看二进制文件 不得不说Visual Studio Code 确实很强大。
配书文件包的下载和使用
作者提供了书籍配套的源码和工具包除了源码编码是gb2312的我都一一转成了utf-8其他没有发现什么问题真的是非常给力。 书籍配套的源码和工具包 本章习题
开始写作业了。作业要用到图4-8摘录在此。 图片来源书籍 对应的源码是
mov ax,0x3f ;将0x3f传送到AX寄存器
add bx,ax
add cx,ax如图4-8所示请问
源程序共有3行每行第一个字符在文件内的偏移量分别是多少
第一行第一个字符m在文件内的偏移量是 0第二行第一个字符a在文件内的偏移量是 0x35第三行第一个字符a在文件内的偏移量是 0x40 该源程序文件的大小是多少字节 最后一个字符的偏移地址是 0x49所以源程序文件大小就是 0x4910x50 字节了。偏移地址从0开始计算
参考资料
处理器架构、指令集和汇编语言三者有何关系 - young cc的回答 - 知乎编程语言-2-处理器架构、指令集和汇编语言_指令集和芯片 汇编的区别-CSDN博客不同汇编语言的对比_汇编语言版本区分-CSDN博客常见CPU架构、产品、指令集、特点 - 程序员老吴的文章 - 知乎Introduction to Assembly Language with Examples - Just Codehistory - Where and when did the 0x convention for hexadecimal literals originate? - Retrocomputing Stack Exchange