





























本来已经编辑好了汇编语言后面的几篇教程,但最终考虑了一下还是决定写一下这篇基础教程,如果读者愿意看我的教程学习的话建议后面几篇反复来回看,有助于理解,看书也是如此~
从物理层面上看,寄存器位于CPU中,位数一般与地址总线相同(因为用地址总线在内存和寄存器之间通信)。寄存器的读写速度非常快,用处很多,有些寄存器用来存地址,帮助CPU实现一些功能,有的寄存器则用作循环,如下节课的bx。
不知道大家有没有见过内存条,外观上看,内存条是一块薄片,而实际上我们从物理的角度看内存条,它存储的数据确实是条状分布,即便是你在高级语言编程时创建的数组,在内存上也是“一条”,高级语言中的多维数组并不是多维,只不过是用指针标记的罢了。
内存的读写速度相比寄存器慢些(毕竟寄存器本身就在CPU里面),但相比硬盘这些还是要快不少的。应用程序运行时的数据都放在内存中(包括程序的机器代码数据本身、图片、视频、长文本等静态资源,和一些临时数据(就是高级语言中的变量))。
mov指令从CPU的角度看就是用地址总线传输一组数据,有以下六种格式:
mov 寄存器,数据(常数)
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器写成C语言方便理解就是这样:
void mov(int *a,int b){
*a = b;
return ;
}使用mov时有三个需要注意的点:
如违反会导致编译错误,因为CPU没有这些功能。
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指令不能对段寄存器操作。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。