首页 > 编程语言 >汇编基础

汇编基础

时间:2022-08-25 13:56:49浏览次数:80  
标签:汇编 操作数 字节 16 基础 指令 处理器 寄存器

寄存器

处理器总是很繁忙的,在它操作的过程中,所有数据在寄存器里面都只能是临时存在一会儿,然后再被送往别处,这就是为什么它被叫做“寄存器”的原因

早期的处理器,它的寄存器只能保存4 比特、8 比特或16 比特,分别叫做4 位、8 位和16位寄存器。现在的处理器,寄存器一般都是32 位、64 位甚至更多。8 位寄存器可以容纳8 比特(bit),或者说1 字节(Byte)。我们还要为这个字节的每一位编上号,编号是从右往左进行的,从0 开始,分别是0、1、2、3、4、5、6、7。在这里,位0(第1 位)是最低位,在最右边;位7(第8 位)是最高位,在最左边。

16 位寄存器可以存放2 个字节,这称为1 个字(word),各个数位的编号分别是0~15,其中0~7 是低字节,8~15 是高字节

32 位寄存器可以存放4 个字节,这称为1 个双字(double word),各个数位的编号分别是0~31,其中0~15 是低字,16~31 是高字。

内存储器

是一个可以保存很多数字的电路,叫做存储器(Storage 或 Memory)。

8 位处理器包含8 位的寄存器和算术逻辑部件,16 位处理器拥有16 位的寄存器和算术逻辑部件,64 位处理器则包含64 位的寄存器和算术逻辑部件,通过单次访问就能处理8 位、16 位、32 位或者64 位的二进制数,单次最小访问1字节。

指令和指令集

指令是集中存放在内存里的,一条接着一条,处理器的工作是自动按顺序取出并加以执行。

一般来说,指令由操作码和操作数构成,但也有小部分指令仅有操作码,而不含操作数。停机指令仅包含1 字节的操作码F4,而没有操作数。指令的长度不定,短的指令仅有1 字节,而长的指令则有可能达到15 字节(对于INTEL x86 处理器来说)。

第一条指令的操作码是B8,这表明,该指令是一条传送指令,第一个操作数是寄存器,第二个操作数是直接包含在指令中的,紧跟在操作码之后,可以立即从指令中取得。

8B 1E,它隐含的意思是,这是一条传送指令,第一个操作数是寄存器,而且是RB 寄存器,第二个操作数是内存地址,要传送到RB 寄存器中的数存放在该地址中。同时,这是一个字操作指令,应当从第二个操作数指定的地址中取出一个字。003F是一个内存地址,取出这个地址的值存到RB寄存器里。

指令和数据要分开存放,分别位于内存中的不同区域,存放指令的区域叫代码区,存放数据的区域叫数据区。

在内存中,指令和数据一模一样,都是无差别的数。

8086 的通用寄存器

8086 处理器内部有8 个16 位的通用寄存器,分别被命名为AX、BX、CX、DX、SI、DI、BP、SP。“通用”的意思是,它们之中的大部分都可以根据需要用于多种目的。

这8 个寄存器中的前4 个,即AX、BX、CX 和DX,又各自可以拆分成两个8 位的寄存器来使用,总共可以提供8 个8 位的寄存器AH、AL、BH、BL、CH、CL、DH 和DL。

内存分段机制

处理器至少要提供两个段寄存器,分别是代码段寄存器(Code Segment,CS)和数据段寄存器(Data Segment,DS)。

当处理器访问内存时,它把指令中指定的内存地址看成是段内的偏移地址,而不是物理地址。这样,一旦处理器遇到一条访问内存的指令,它将把DS 中的数据段起始地址和指令中提供的段内偏移相加,来得到访问内存所需要的物理地址。

8086 内部有4 个段寄存器。其中,CS 是代码段寄存器,DS 是数据段寄存器,ES 是附加段(Extra Segment)寄存器。附加段的意思是,它是额外赠送的礼物,当需要在程序中同时使用两个数据段时,DS 指向一个,ES 指向另一个。可以在指令中指定使用DS 和ES 中的哪一个,如果没有指定,则默认是使用DS。SS 是栈段寄存器

IP 是指令指针(Instruction Pointer)寄存器,它只和CS 一起使用,而且只有处理器才能直接改变它的内容。当一段代码开始执行时,CS 指向代码段的起始地址,IP 则指向段内偏移

进程

程序是静静地躺在文件系统里的二进制代码,属于静止状态。一旦把这个程序加载到操作系统内运行,它就变成了进程。进程是程序的运行状态,所以它会比程序拥有更多管理层面的信息和数据。

标签:汇编,操作数,字节,16,基础,指令,处理器,寄存器
From: https://www.cnblogs.com/zjr0/p/16624044.html

相关文章

  • python基础——函数
    函数函数就是将一段具有独立功能的代码块整合到一个整体并命名在需要的位置调用这个名称即可完成对应的需求。函数在开发过程中,可以更高效的实现代码重用。先定义后......
  • iOS开发入门基础篇
    iOS开发入门 任何C源程序,不经修改,即可通过Objective-C编译器成功编译Objective-C源程序中可以直接使用任何C语言代码除了面向对象有语法是SmallTalk风格的(下面会讲到),其......
  • 复习:linux基础 软链接和硬链接
    软链接=windows下的快捷方式特点:可以对不存在的文件创建软链接可以对文件或者目录来创建软链接删除了软链接不会影响他的指向文件删除了指向文件,该软链接会变成死链......
  • redis基础知识
    1、redisjedis客户端pipeline中可以传入function或consumer,里面可以写多条语句2、redis客户端setnx:key不存在时才set,存在时则忽略3、redis数据类型:hash数据类型:即键......
  • VUE 基础知识总结
    VUE的介绍VUE的导包<!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><!--开发环境版本--><scriptsrc="https://cdn.jsdel......
  • HTML基础(三):列表、表格、表单标签学习
    列表标签列表的应用场景场景:在网页中按照行展示关联性内容,如新闻列表、排行榜、账单等特点:按照行的方式整齐显示内容种类:有序列表、无序列表、自定义列表无序列表......
  • 基础数论模板
    快速幂longlongqpow(longlonga,longlongb){ longlongans=1; for(;b;b>>=1) { if(b&1) ans=ans*a%p; a=a*a%p; } returnans;}线性筛......
  • 0基础替换数据:智慧城市可视化大屏模板合集
    听说你还在找智慧城市大屏的模板?这不就来了嘛~! 本文精选了山海鲸可视化的6份智慧城市大屏模板,颜值天花板+高级感拉满!最重要的是只需要将自己的数据替换到模板中去,再将组......
  • HCIA-datacom 6.1 实验 构建基础WLAN网络
    前言:最近事情太多了,更新不会很稳定!今天遇到一个很恶心人的事情,分享知识是一件开心的事,但有些人好像觉得这是他谋生的手段一样,没得意思。本来wlan的实验大概在周一就写完了......
  • 9、Python基础夯实篇——数据的常用操作
    数据拷贝数据引用产生的问题(1)下面的代码会发生什么情况呢?L1=[1,2[3,4,5]]L2=L1L2[0]=6print('L1':L1)print('L2':L2)输出:L1:[......