汇编语言

作者: Sephiroth_Ma | 来源:发表于2019-12-04 16:37 被阅读0次

@[toc]

汇编语言

  • 汇编语言的主体是汇编指令

操作

  • 寄存器bx的内容送到ax中

机器指令

  • 1000100111011000

汇编指令

  • 汇编语言的核心是汇编指令,它决定了汇编语言的特性.
  • 形式:mov ax,bx
  • 指令组成:

1.汇编指令:机器码的助记符,有一一对应的机器码
2.伪指令:没有对应的机器码,有编译器执行,计算机不执行
3.其他符号:如+,-,*,/等,由编译器识别,没有的对应的机器码

寄存器

  • 寄存器:CPU中可以存储数据的器件,一个CPU中有多个寄存器.
  • ax,bx为寄存器的代号


    在这里插入图片描述

指令和数据

  • 在内存或者磁盘中,指令和数据没有任何区别,都是二进制信息

如 内存中的二进制信息 1000100111011000 计算机可以看作大小为89D8H的数据,也可以看作指令mov ax,bx
1000100111011000 -> 89D8H
1000100111011000 -> mov ax,bx

存储单元

  • 存储器被划分成若干个存储单元

如一个存储器有128个存储单元
编号:0~127

在这里插入图片描述
  • 计算机的存储器容量以字节为最小单位
  • 一个存储单元 ->一个字节(Byte) ->8个二进制位(bit)
  • 对于拥有128个存储单元的存储器,容量为128个字节
  • 大容量的存储器一般用以下单位来计量容量

1KB = 1024B, 1MB = 1024KB, 1GB = 1024MB, 1TB = 1024GB

CPU对存储器的读写

  • 读数据->指定存储单元的地址

    在读写数据时指明哪种操作,读还是写

  • 读写时与外部器件的信息交互:

    存储单元的地址(地址信息);
    器件的选择,读会写的命令(控制信息);
    读或写的数据(数据信息);

总线

在这里插入图片描述

地址总线

  • CPU是通过地址总线来指定存储器单元的.
  • 寻址能力:

一根导线可以传送两种:高电平,低电平,二进制表示为1,0
如:10根地址总线
则为 210 = 1024 最小为0 最大为1023
一个CPU有N个地址总线->地址总线的宽度为N->寻址能力则为2N

在这里插入图片描述

控制总线

  • CPU对外部器件的控制是通过控制总线来进行的.
  • 有多少根控制总线,意味着CPU提供了对外部器件的多少种控制

数据总线

  • CPU与内存或其他器件之间的数据传送是通过数据总线进行的.

  • 数据总线的宽度决定了CPU和外界数据传递的速度.

  • 8根数据总线一次可以传送8个bit(一个字节)


    在这里插入图片描述
  • 16根数据总线一次可以传递16个bit(两个字节)


    在这里插入图片描述
  • 读数据:

    CPU通过地址总线将信息3发出.
    CPU通过控制总线发出读取内存命令.
    存储器将3号单元的数据8通过数据线送入CPU.

  • 写数据

    CPU通过地址总线将地址信息3发出.
    CPU通过控制总线发出写入内存命令.
    CPU通过数据总线将26送入内存的3号单元中.

  • 命令计算机读写数据的汇编指令:

    mov ax,[3]

检测点

  • (1) 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为多少?

    N根的寻址能力为2N 一根地址总线寻址为21=2 10根地址总线就是210=1024byte=1KB 13根就是213=8KB 所以寻址能力为8KB的CPU,那么它的地址总线宽度为13根。
    公式: 8 * 1024 = 2N = 23 * 210 = 2(3+10) => N = 13

  • (2) 1KB的存储器有多少个存储单元.存储单元的编号从多少到多少?

    1024个存储单元,从0开始 0 ~ 1024-1 => 0 ~ 1023

  • (3) 1KB的存储器可以存储多少个bit.多少个Byte.

    1KB = 1024多少个Byte * 1KB * 8bit = 8192bit = 1024Byte

  • (4) 1GB、1MB、1KB分别是多少Byte.

    1KB=1024Byte
    1MB=1024 * 1024Byte
    1GB=1024 * 1024 * 1024Byte

  • (5) 8080、8088、 80286、 80386 的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为多少(KB)多少(MB)、多少 (MB)、多少 (GB)。

    一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。
    16根 216 = 64K
    20根 220 = 1MB
    24根 224 = 16MB
    32根 232 = 4GB

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

    8根数据总线一次可以传送8位二进制数据(即一个字节)。
    8080 8bit = 1B
    8088 8bit = 1B
    8086 16bit = 2B
    80286 16bit = 2B
    80386 32bit = 4B

  • (7) 从内存中读取1024字节的数据,8086至少要读 多少次,80386至少要读多少次?

    8086的数据总线宽度为16根 一次最多可传送16个bit数据, 1024字节有1024 * 8个bit数据,所以需要读 1024 * 8/16 = 512次
    80386的数据总线宽度为32根 一次最多可传送32个bit数据, 1024字节有1024 * 8个bit数据,所以需要读 1024 * 8/32 = 256次

  • (8) 在存储器中,数据和程序以什么形式存放?

    在存储器中指令和数据没有任何区别,都是二进制信息。

内存空间地址

在这里插入图片描述
  • 所有的物理存储器被看做一个由若干存储器组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,叫一段地址空间.CPU在这段地址空间中读写数据,实际上就是在对应的物理存储器中读写数据.
  • 内存地址空间大小受CPU地址总线宽度的限制.8086CPU的地址总线宽度为20.可以传送 2020 个不同的地址信息(大小从0 ~ 2020 - 1)
  • 不同的计算机的内存地址空间的分配情况是不同的.
  • 对CPU来说,系统中的所有存储器的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制,这个逻辑存储器即是内存地址空间.

寄存器

  • 在CPU上

    运算器进行信息处理;
    寄存器进行信息存储;
    控制器控制各种器件进行工作;
    内部总线连接各种器件,在它们之前进行数据传送;

  • 不同的CPU,寄存器的个数,结构是不同的,每个寄存器都有一个名称,这些寄存器是:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW.

通用寄存器

  • 8086CPU的所有寄存器都是16位的.可以存放两个字节.AX,BX,CX,DX这4个寄存器通常来存放一般性数据,成为通用寄存器.


    image
  • 8086CPU的上一代CPU中的寄存器为8位,为了向上兼容,8086的4个通用寄存器可以拆分成两个独立使用的8位寄存器

    AX => AH AL
    BX => BH BL
    CX => CH CL
    DX => DH DL

    在这里插入图片描述
    在这里插入图片描述

字在寄存器中的存储

  • 8086CPU可以一次性处理两种尺寸的数据

    字节:Byte 一个字节由8个bit组成,可以存放8位寄存器中.
    字:word 一个字由两个字节组成,分别称为高位字节,低位字节.


    在这里插入图片描述

几条汇编指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 问题2.1

    指令执行后AX中的数据是多少?
    因为AX为16位寄存器,只能存放4位十六进制的数据,所以最高的位的1不能放在AX中保存,ax中的数据为:044CH

在这里插入图片描述
  • 问题2.2

    指令执行后AX中的数据为多少?
    程序段中的最后一条指令 add al,93H ,执行前 al中的数据为C5H,相加所得的值为:158H,但是al为8位寄存器,只能存放两位十六进制的数据,所以最高为的1 丢失,ax中的数据为:0058H
    注意:此时的al是作为一个独立的8位寄存器来使用,和ah没有关系,CPU在执行这条命令时认为ah和al是两个不相关的寄存器
    如果执行add ax,93H,低8位的进位会存储在ah中,CPU在执行这条指令认为只有一个16位寄存器ax,进行的是16位运算.
    在进行数据传送或者运算时,要注意指令的两个操作对象的位数应该是一致的 如

    mov ax,bx  
    mov bx,cx
    mov ax,18H
    mov al,18H
    add ax,bx
    add ax,20000
    

    错误的指令为
    cpp mov ax,bl ;在8位寄存器和16位寄存器中传送数据 mov bh,ax ;在16位寄存器和8位寄存器中传送数据 mov al,20000 ;8位寄存器最大可放的值为255的数据 add al.100H ;将一个高于8位的数据加到一个8位的寄存器中

检测点

  • (1) 写出每条汇编指令执行后相关寄存器中的值。
    mov ax,62627   AX=?         ;转换为十六进制:F4A3H   
    mov ah,31H     AX=?         ;将高8位值覆盖:31A3H  
    mov al,23H     AX=?         ;将低8位值覆盖:3123H   
    add ax,ax      AX=?         ;值相加:6246H  
    mov bx,826CH   BX=?         ;赋值:826CH   
    mov cx,ax      CX=?         ;ax赋值给cx:6246H  
    mov ax,bx      AX=?         826CH 
    add ax,bx      AX=?         04D8H 
    mov al,bh      AX=?         0482H 
    mov ah,bl      AX=?         6C82H 
    add ah,ah      AX=?         D882H 
    add al,6       AX=?         D888H 
    add al,al      AX=?         D810H 
    mov ax,cx      AX=?         6246H
    

相关文章

  • 汇编语言探索(一)

    · 汇编语言 汇编语言的意义:汇编语言的产生是为了取代麻烦的机器语言。汇编语言的组成:有以下3类指令组成(汇编语言...

  • 2018-01-26

    计算机汇编语言 汇编语言(AssemblyLanguage) 是面向机器的设...

  • 汇编语言 学习笔记(三)

    汇编语言学习笔记 四、汇编语言程序格式 语句基本格式 汇编语言程序中的语句由 4 项组成,格式如下: 名字(nam...

  • 汇编语言

    汇编语言

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

  • 逆向 - 汇编 - 第一天

    reference 汇编语言与机器语言 高级语言 --(编译)-->汇编语言 --(编译)-->机器语言---->...

  • 逆向学习--汇编语言一

    一. 汇编语言 1. 汇编语言,用符号代替机器语言的,也被称为符号语言。在汇编语言中,用助记符(Mnemonic...

  • 使用系统汇编调用防止调试

    汇编语言防护

  • iOS逆向之初识别汇编

    汇编语言是使用助记符代替机器语言。 汇编语言的种类,目前讨论比较多的汇编语言有 • 8086汇编(8086处理器是...

  • 汇编入门一

    汇编语言与其它语言的关系 汇编语言的特点 对于不同型号的计算机,有着不同的结构的汇编语言,汇编指令是机器指令的助记...

网友评论

    本文标题:汇编语言

    本文链接:https://www.haomeiwen.com/subject/jihlgctx.html