汇编语言学习(1)

更好的阅读体验,请点击 汇编语言学习 | YinKai's Blog


简介

我为什么要学汇编

因为想在寒假手写一下操作系统玩玩,所以提前学一学汇编,到时候放假就可以直接上手写了。

什么是汇编语言

由于处理器只能理解机器语言指令,即 0 和 1 组成的字符串。然而,机器语言对软件开发来说过于晦涩和复杂。因此,低级汇编语言是为特定的处理器系列而设计的,通过符号代码和更易于理解的形式表示各种指令。

汇编语言的优点

学习使用汇编语言可以让人深入了解计算机体现结构和底层硬件工作原理,提供对计算机内部操作的更详细的了解。

我们可以收获:

  • 更加深入了解计算机的体系结构、寄存器、指令集和内存管理

  • 了解程序是如何在计算机上执行的

  • 有助于我们编写更高效的代码,可以直接控制底层硬件资源,使你能够优化代码以提高程序的性能

  • 提高我们调试代码的能力

PC 硬件的基本特征

PC 的主要硬件由处理器、存储器和寄存器组成。寄存器是保存数据和地址的处理器组件。为了执行程序,系统将其从外部设备复制到内部存储器中。处理器负责执行程序指令。

处理器支持以下数据大小:

  • 单词:2 字节数据项

  • 双字:4 字节(32 位)数据项

  • 四字:8 字节(64 位)数据项

  • 段落:16 字节(128 位)区域

  • 千字节:1024 字节

  • 兆字节:1,048,576 字节

寻址内存中的数据

处理器控制指令执行的过程称为------执行周期,它通常包含以下几个阶段:

  1. 取指令:处理器从内存中读取下一条指令的地址,并将指令加载到指令寄存器中

  2. 译码:处理器对取得的指令进行译码,确定指令的操作类型和操作数

  3. 执行:处理器执行指令的操作,可能涉及算术运算、逻辑运算、数据传输等

  4. 写回:将执行结果写回到寄存器或内存中,更新存储器或寄存器内容

在计算机中,处理器在访问内存时以字节为单位进行操作。考虑一个十六进制数 0725H,它需要两个字节的内存来存储。其中,高位字节或最高有效字节为 07,低位字节为 25.

:::warning

需要注意的是,处理器以相反的字节顺序存储数据,即低位字节存储在低内存地址中,高位字节存储在高内存地址中。因此,当处理器将值 0725H 从寄存器传输到内存时,它首先将 25 传输到较低的内存地址,然后将 07 传输到下一个内存地址。

当处理器从内存获取数字数据到寄存器时,它会再次反转字节。这个过程中,有两种内存地址形式:

  1. **绝对地址:**这是具体位置的直接引用,表示数据存储在内存的特定地址。

    例如:如果 x 表示内存地址,则数据 0725H 存储在 x 地址和 x + 1 地址上,分别对应低位字节 25 和高位字节 07.

  2. **段地址(或偏移量):**这是具有偏移值的内存段的起始地址。段地址与偏移量相结合,给出了实际的内存地址。

    例如:如果有一个段地址 y,那么 x 表示内存中的偏移地址。在这种情况下,数据 0725H 存储在地址 y:x 和 y:x+1 上,分别对应低位字节 25 和 高位字节 07.

:::

安装和环境设置

在学习过程中,我们需要使用 NASM 汇编器,因为它免费、有据可查,并且可以在 Linux 和 Windows 上使用

首先要验证是否已安装 NASM,可以使用下面的方法验证:

  1. 打开 Linux 终端

  2. 输入 whereis nasm 并按 Enter

  3. 如果已安装会出现类似 nasm: /usr/bin/nasm 的行,否则只能看到 nasm:

如果没有安装,就需要安装 NASM。

我的机器是 centos7 的虚拟机,我是直接在命令行中进行安装的,安装步骤如下:

  1. 打开终端并以 root 用户身份登录

  2. 运行以下命令更新 yum 软件包列表:

    复制代码
    yum update
  3. 运行以下命令安装 NASM:

    复制代码
    yum install nasm
  4. 过程中的询问,输入 y 并按 Enter 键继续

  5. 等待安装完成后,使用以下命令验证是否成功安装:

    复制代码
    nasm -v
相关推荐
子非鱼942712 分钟前
07-Flutter 鸿蒙实战 07:故事集列表与缓存设计
学习·flutter·缓存·华为·harmonyos
fanchenxinok19 分钟前
学习笔记:LabVIEW中如何将解析S19/HEX的VI封装为子VI并供主VI调用
笔记·学习·labview·子vi
2301_8090511434 分钟前
基本电子电路元件 学习笔记
笔记·学习
今天AI了吗1 小时前
Hermes Agent 搭建全流程:从本机试跑到可持续运行的个人 AI Agent
java·人工智能·python·学习·embedding
一只小菜鸡..2 小时前
Stanford CS144 学习笔记 (二):传输层与数据通信机制
网络·笔记·学习
天选之子1232 小时前
tabulate学习
学习
子非鱼94273 小时前
06-Flutter 鸿蒙实战 06:上传后处理流程,照片识别、故事生成和状态刷新
学习·flutter·华为·harmonyos
天天爱吃肉82184 小时前
# 商用车多体动力学整车仿真学习笔记(开篇总览)
人工智能·笔记·python·功能测试·学习·汽车
xd1855785554 小时前
藏头诗工坊-基于鸿蒙的AI藏头诗创作应用开发实践
人工智能·学习·华为·harmonyos·鸿蒙
一起努力啊~4 小时前
DataWhale组队学习笔记--llm-algo-leetcode(三)
笔记·学习·llm