汇编语言系列1

汇编语言系列1

前言

本系列内容是我在学习汇编语言过程中学习的笔记与心得,部分内容参照王爽老师的《汇编语言》第三版,这本书给了我很大的帮助。

1. 基础内容

1.1 机器语言

机器语言是机器指令的集合,这些指令都是一串二进制数。

早期的程序均使用机器语言,通过将0、1数字体现在纸带上,1表示打孔,0不打孔,再通过纸带机送入计算机。相关内容可以参照其他资料,这里不再赘述了。

作为程序员肯定不会想去编写只有1和0的代码,不仅写起来费劲,还容易错,于是汇编语言诞生了。

1.2 计算机基本知识

想要立即汇编语言,必须掌握一些计算机组成的基本知识。

这里针对8088/8086CPU(以下简称CPU)简单介绍一下计算机组成部分。

  1. CPU内部有14个寄存器,这些寄存器都是16位的。如何理解这个16位呢?先来梳理一下计算机中的计量单位。

    1. 位(bit):最基本的单位,位只有两种,1和0。每个数字代表一个位,我们常说计算机软件是一串二进制数组成的,那么这串二进制的每一个字符就代表一个位。bit也称比特。

    2. 字节(Byte):我们已经知道位了,但是一个位实际上并没有实际的意义,在计算机中用的最多的是字节。包括我们使用的文件,传输的速率,都是以字节作为单位去计算。1个字节 = 8个位,也即1Byte = 8 bit。在计算机科学中,用于表示ASCII字符,例如字符A便用 “0100 0001”来表示。1个字节可以储存1个英文字母或半个汉字。

    3. 字(Word):代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算的单位。字指的就是在CPU内部传输,处理,暂时存放的最大数据大小。在16位CPU(8086就是这种CPU)中,一字表示16位(2字节),双字代表32位(4字节)。在32位CPU中,一字表示32位(4字节),双字表示64位(8字节)。

    从上面的描述我们不难得出:1字节=8位,这个关系是固定的;而1个字的长度是随CPU的变化而变化的,知道这些之后我们继续看下面。

  2. CPU寄存器可以分为通用寄存器(8个),段寄存器(4个),控制寄存器(2个)。注意这里的寄存器,我们后面将频繁使用。

    通用寄存器

    AX BX CX DX (数据寄存器)

    AX(Accumulate) 累加器
    BX(Base) 基址寄存器
    CX(Count) 计数寄存器
    DX(Data) 数据寄存器

    ======================================

    SP BP 地址指针寄存器

    SP(Stack Pointer) 堆栈指针寄存器
    BP(Base Pointer) 基址指针寄存器

    ======================================

    SI DI 变址寄存器

    SI(Source Index) 源变址寄存器

    DI(Destination Index) 目的变址寄存器


    段寄存器

    CS(Code Segment) 代码段寄存器
    SS(Stack Segment) 堆栈段寄存器
    DS(Data Segment) 数据段寄存器
    ES(Extra Segment) 附加数据段寄存器


    控制寄存器

    IP(Instruction Pointer) 指令指针寄存器

    FLAGS 标志寄存器/程序状态字(PSW)

    关于基础内容就先聊到这里,未提到的部分以后会补充。

1.3 汇编语言的组成

​ 汇编语言有以下三个指令:

(1)汇编指令:机器码助记符,每个指令对应一个机器码。(核心)
(2)伪指令:由编译器执行,计算机不执行。无机器码对应。
(3)其他符号:加减乘除等符号,无机器码对应。

至此,最基本的内容就介绍完了,本章结束。更多精彩的部分会在下一篇文章中提及。其他未提及的基础部分可以参照 王爽《汇编语言》第三版 内容。


《汇编语言》第一章课后习题:

(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。— 8KB = 1024B*8 = 8192B ,相当于寻址能力为8192B,每一位都有0和1两种情况,要实现8192B,需要8192 = 2^N,N=13的总线宽度方可实现。

(2)1KB的存储器有 1024 个存储单元,存储单元的编号从 01023

(3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。 建议记住这个数字:如果你有一个1KB的U盘,那么你就有了一个8192Bit的储存器,对应的N是13。

(4)1GB是 2^30 个Byte、1MB是 2^20 个Byte、1KB是 2^10个Byte。

(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根, 则它们的寻址能力分别为: 64 (KB)、 1 (MB)、 16 (MB)、 4 (GB)。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1 (B)、 1 (B)、 2 (B)、 2 (B)、 4 (B)。

(7)从内存中读取1024字节的数据,8086至少要读 512 次,80386至少要读 256 次。

(8)在存储器中,数据和程序以 二进制 形式存放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值