【汇编教程】寄存器和内存&一些基本命令的说明

前言

        本来已经编辑好了汇编语言后面的几篇教程,但最终考虑了一下还是决定写一下这篇基础教程,如果读者愿意看我的教程学习的话建议后面几篇反复来回看,有助于理解,看书也是如此~


什么是寄存器

        从物理层面上看,寄存器位于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 转载需经作者授权!

分享到:

扫描二维码推送至手机访问。

版权声明:本文由faryou的博客发布,如需转载请注明出处。

本文链接:https://blog.faryou.eu.org/post/124.html

分享给朋友:

评论列表

全局变量
21小时前

如果对编程方面有兴趣可以提早买一些相关的书籍先了解。

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。