DOS下16位汇编学习
前言
汇编语言不学总感觉差点东西,那就开整,我用的是王爽老师那本汇编语言第三版,也可以看B站上“零点Boy”老师的视频课程,参考的也是王爽老师那本汇编语言讲的
电子版:这里
本文只是简单记录下这段时间的学习感受
总结
汇编语言是和操作系统强相关的低级语言,DOS下16位汇编、Windows下32位汇编、Linux下汇编可以说是“三门语言”,不像C、C++、JAVA这种高级语言,是跨平台的。王爽老师那本汇编语言讲的就是DOS下16位汇编,现在到处都是64的Windows,16位的DOS汇编属实有点过时了,但是知识都是一点点演化的,想了解汇编是怎么来的,这本书的基础部分我觉得还是有用的
16位DOS汇编寄存器是16位的,但寻址总线是20位的,所以CPU内部会有一个转换器,转换器的基本逻辑是,将两个16位寄存器(也就是两个16位二进制)经过转换变成一个20位二进制,寻址方式是 段地址:偏移地址
汇编代码之所以看起来像天书,就是因为它有很多隐藏知识,例如下述代码,ds寄存器默认被用来存放段地址,再结合偏移地址,便得到了某个字符串的起始地址,然后对字符串进行异或操作,便可以将大写变为小写,将小写变为大写(注意:32位CPU的通用寄存器变为:EAX、EBX、ECX、EDX,64位CPU的通用寄存器变为:RAX、RBX、RCX、RDX)
1 | assume cs:code, ds:data |
16位DOS汇编中用到的主要寄存器
1 | AX:通用寄存器,通常用于存放程序运行过程中产生的临时值,可以简易理解为C语言中的变量 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.