【汇编教程】寄存器和内存&一些基本命令的说明
前言
本来已经编辑好了汇编语言后面的几篇教程,但最终考虑了一下还是决定写一下这篇基础教程,如果读者愿意看我的教程学习的话建议后面几篇反复来回看,有助于理解,看书也是如此~
什么是寄存器
从物理层面上看,寄存器位于CPU中,数量一般与地址总线相同(因为用地址总线在内存和寄存器之间通信)。寄存器的读写速度非常快,用处很多,有些寄存器用来存地址,帮助CPU实现一些功能,有的寄存器则用作循环,如下节课的bx。
什么是内存
不知道大家有没有见过内存条,外观上看,内存条是一块薄片,而实际上我们从物理的角度看内存条,它存储的数据确实是条状分布,即便是你在高级语言编程时创建的数组,在内存上也是“一条”,高级语言中的多维数组并不是多维,只不过是用指针标记的罢了。
内存的读写速度相比寄存器慢些(毕竟寄存器本身就在CPU里面),但相比硬盘这些还是要快不少的。应用程序运行时的数据都放在内存中(包括程序的机器代码数据本身、图片、视频、长文本等静态资源,和一些临时数据(就是高级语言中的变量))。
mov指令
mov指令从CPU的角度看就是用地址总线传输一组数据(见上篇《8086CPU工作原理》),有以下六种格式:
mov 寄存器,数据(常数)
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器
写成C语言方便理解就是这样:
void mov(int *a,int b){ *a = b; return ; }
使用mov时有三个需要注意的点:
1. 要向段寄存器中传数据时,必须用寄存器中转。
2. 要在内存空间之间中转数据,必须用寄存器中转。
3. mov指令的两个数据必须位数相同
如违反会导致编译错误,因为CPU没有这些功能。
add&sub指令
add指令和sub指令的使用格式类似,其功能是向前一个操作单元加上/减去(add是加,sub是减)。以下是使用格式:
add/sub 寄存器,数据
add/sub 寄存器,寄存器
add/sub 寄存器,内存单元
add/sub 内存单元,寄存器
写成C语言方便理解就是这样:
void add(int *a,int b){ *a += b; return ; } void sub(int *a,int b){ *a -= b; return ; }
需要注意的是,add/sub指令不能对段寄存器操作。
结语
本文介绍了汇编中的一些基础知识,方便后面的学习。我是faryou,下期见!
本文链接:https://blog.faryou.eu.org/post/124.html 转载需经作者授权!