Pixiv:_ LM7 _
汇编语言是一种直接在硬件上工作的低级编程语言,再介绍这个语言之前我们需要了解一些最基本的知识,也是需要对硬件结构的问题进行一些简单的探讨,关于PC机、CPU结构后续你可以在《微机原理与接口》中学到,关于计算机的结构后续你可以在《组成原理》中学到。
在汇编语言你将学到如何去和底层打交道,也是作为后续学习的一个基础
请至少有C语言的基础再来看此blog
在以前所有编程都是用0101的方式编程的,比如你要实现s = 768+12288-1280;
在机器语言里可能会表示成
101100000000000000000011 000001010000000000110000 001011010000000000000101
光是看这个你可能就头疼了,如果写错那可能就更头疼了。因此除了一些专业人士已经没人去学习机器语言了。
因此引申出了一个新的语言"Assembly Language"
汇编语言用一些英文单词的"缩写"来增强一个程序的可读性,让程序更接近人类语言。
比如你是愿意打
01010000
还是愿意打
PUSH AX
(寄存器有很多代号,比如AX、BX、SS、PSW等,在之后你将学到寄存器)
不仅提高了可读性也提高了编程效率
虽然说机器语言和汇编语言有很大区别,但汇编语言却和机器语言一一对应。
当你尝试破解一个游戏时,你是不可能得到C、Python的源代码的,你肯定要去反编译一下,得到汇编语言的代码。
我们知道一个C语言程序的生成当中有两个步骤叫做编译、汇编
编译正是将C代码翻译成汇编代码
而汇编正是将一个汇编代码翻译成机器语言。
因为是低级语言,所以汇编语言程序的生成没那么复杂
只有以下过程
汇编语言的核心是汇编指令,它决定了汇编语言的特性
每一种CPU都有自己的汇编指令集,可能功能也不一样
如果计算机想要工作,必须要用到它的核心部件——CPU,而CPU需要处理各种信息。
这种信息分为两类:一是指令,二是数据。
它们都是二进制信息,本质上没有什么区别,但在使用时可能会有所不同。
比如
1000100111011000 同样是这个二进制信息, 如果表示成数据,会表示成89D8H 如果表示成指令,会表示成mov ax,bx
下图是某程序(后面你会学习到)获取的信息,分别获取了同一二进制信息(只不过用十六进制表达了而已)对应了两种不同的信息:指令(ADD、JMP、PUSH等)和数据
具体同一信息是怎样被区分的,这暂时不用考虑。
这些汇编指令被存放在了内存里
用来存储指令和数据的被称为存储器,也就是我们平常所说的内存。
存储器被划分为很多个存储单元,每个存储单元都具有一定的编号.
微机的存储器的存储单元是以字节为最小单位来计算的
编号 |
---|
0 (1B) |
1 (1B) |
2 (1B) |
... (1B) |
127 (1B) |
若CPU想对存储器进行读写,需要通过三种不同类型的总线完成一次读写操作。
从上面图我们得知左边是一个存储单元的编号,中间是一个个汇编指令,右边则是一个谜之数据。
这也就是CPU对存储器进行一次读写所需要的三种信息
CPU需要索引到一个存储单元,每个存储单元都有一个编号,我们可以用其编号来表示我们要索引到的存储单元。
地址总线
,CPU交互的信息为地址信息
假如一个CPU存在7根地址总线,那么我们就可以表示2^7个存储单元的地址,就存储单元的的编号来看,最小为0,最大为127。
\[若存在n根地址总线, \\ 则可以索引到2^n个地址 \]其次CPU需要获取一个存储单元里的数据。我们依然可以仿照上面,用一个东西表示一个存储单元内的数据
数据总线
,CPU交互的信息为数据信息
数据总线的宽度决定了CPU与外界的数据传输速度,假如数据总线有8根,那就意味着我们一次可以传输8位的数据信息。
\[若存在n根数据总线, \\ 则一次可以传输n位的数据 \]最后CPU知道要操作什么,也就是执行什么指令,同样我们也能用一个东西表示要这个指令
控制总线
,CPU交互的信息为控制信息
内存地址空间
去DOSBOX官网安装DOSBOX,这里我已经白嫖好了。
下载地址:https://pan.baidu.com/s/1e36VMhno988RUUQKtwJbkw
提取码:7h19
安装好后,在D槽创建一个名字为ASM的文件夹,将压缩包ASM内的内容解压至文件夹里,然后打开DOSBOX然后依次输入以下指令
mount c: d:\asm c: debug
当然你每次打开都需要输入这个指令多少有些麻烦,在C盘用户数据里去找到DOSBOX的数据,会发现有一个conf文件
用记事本打开在最后结尾处输入以下指令保存
mount c: d:\asm c:
这样每次打开就不必再输入指令了
去官网上找到80-586版本下载或者到我的已经白嫖好的网盘里。
网盘地址:https://pan.baidu.com/s/1_wA6G4CCRyq-vvq70ppi1w
提取码:8u4e
不过VIM默认界面还是相当辣眼的,找到VIM的安装目录用记事本打开_vimrc软件
在一开始处添加以下代码
set number color evening
将我已经白嫖好的汇编语言环境解压至文件夹中,然后和Ⅰ一样在DOSBOX的conf文件最后输入以下指令
masm t1; link t1;
网盘地址:https://pan.baidu.com/s/1zR3Hk54PzOv6VvxCQEVV2w
提取码:k4pi
然后打开输入debug,再输入u和d。
u可以获取指令信息,输入d则可以获取数据信息。
至此感谢你能看完结构这么凌乱的blog。
这里简单介绍了汇编语言
介绍了软件DOSBOX去搭建一个编译环境以及两条最简单的指令(u、d)
简要说明了CPU如何对一个存储器进行操作