一个月不到重新学习汇编后的心得,大家指点一下我的方向对不对
文坛护理 2021-02-09 11:28:39 我买了一本王爽著的汇编语言课本,通过这个课本我认识到了汇编的基础,请各位指教不知道理解是不是没有偏离方向!
总结如下:
1、计算机只认识二进制,也就是0/1,CPU每根地址线/数据线/控制线会发出这样的信号给与内存,首先CPU要按自己的地址芯线多少来分配地址给内存,一般为8位/16位/32位/64位,对应的最大的地址分配就是256位/64Kb/4G/16G的总数,CPU通过地址找到某个内存,找到内存后,就传送数据,数据总线可以是8位,也可以是16位,相当于传送一个字节或两个字节,无论地址总线还是数据总线,均用8421码看待,因为这样可以大幅度提高人的识别能力,控制总线意味CPU对外部设备的控制能力,即有多少种指令集合。
CPU通过总线和各类存储器连接,对存储器进行读写操作,为了让外部设备能够都高速读取存储器,CPU给各存储器分配了了相应固定的地址,例如分配给显存,而显示器会在显存中不断读取,时刻保持显示器的数据更新。
计算机要执行程序,必须通过CPU一条一条指令执行,运算器负责逻辑运算和算数运算,控制器则负责控制各种设备进行工作,寄存器则负责把其他内存的数据拿到手后交给运算器执行程序,×86架构有14个寄存器,每个寄存器的工作均有分工,如下:
1、通用寄存器AX BOX CX DX 用于获取或写入内存内数据
2、代码段寄存器 code segment CS和配套使用的指针寄存器 IP,搭配段地址+偏移地址,如物理地址21F60H相当于2000:1F60单元,修改CS和IP即意味改变CPU执行不同的指令,需要留意能改变CS和IP的指令,不是每个指令都可以改变CS和IP寄存器的内容。CPU只会按照CS:IP所指向的第一条指令的首地址开始运行执行。
3、DS寄存器,是用来存放要访问数据的内存段地址,段地址输入到DS里后,通用寄存器才能直接获取段地址下的偏移地址的数据,如move alarm [0],即DS段地址:0
内存和寄存器之间传递数据必须确定数据类型是什么,以便确认是单字节还是双字节,字型是双字节数据!
4、SS寄存器和SP寄存器是用于栈顶概念的地址的,如果涉及push/pop控制指令,CPU即使有CS:IP的指引也不能知道栈顶位置,必须在使用push/POP时先给SS/SP指定地址,按照先进后出的机制运行程序,这是CPU特殊的栈操作机制!
第一个程序的实际理解主要是编辑源程序/编译链接/执行可执行exe文件!
需要留意加载内存中的程序是通过command执行的,command是DOS里默认加载exe文件到CPU的默认指令,程序运行完后就返回command状态。
剩下来的就是各种指令的理解了,这些指令太多,需要慢慢消化!
请各位老师指点,这样理解是否准确,我打算在稍微看看后,理解了,就进入其他需要学习,不知道是C语言/C++/JAVA哪种以汇编为基础的,我以前学过C++和JAVA,但是都忘了,再拿起来不知道能不能理解