汇编语言期末总结

汇编语言

基础知识

机器语言

汇编语言的本质可以看作计算机硬件的功能接口。

机器语言是机器指令的集合。

汇编语言的产生

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

汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。

汇编指令的本质是机器指令的助记符

1
2
3
机器指令:1000100111011000
汇编指令:MOV AX,BX
操作:将寄存器BX中的内容送到AX中

指令执行: 汇编指令->编译器->机器码->计算机

汇编语言的组成

  • 汇编指令(机器码的助记符,有对应的机器码
  • 伪指令没有对应机器码,由编译器执行,计算机不执行)
  • 其他符号(如+、-、*、/等,由编译器识别)

指令和数据

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

存储单元

存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号;

CPU对存储器的读写

CPU进行数据读写的信息交互:

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

地址总线

CPU是通过地址总线来指定存储单元的。

地址空间的宽度N决定了寻址空间的大小$2^N$。

数据总线

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

控制总线

控制总线的宽度决定了CPU对外部器件的控制能力

内存地址空间

  • RAM(随机存储器)
  • ROM(只读存储器)

将各类存储器看作一个逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间

寄存器

程序员通过改变寄存器中的内容来实现对CPU的控制,寄存器的功能:进行信息存储,暂存指令、数据、地址。

8086CPU中有14个寄存器,每个寄存器有16位,可以存放两个字节

  • 数据寄存器:AX、BX、CX、DX
  • 地址寄存器:SI、DI、SP、BP
  • 段寄存器:CS、SS、DE、ES
  • 控制寄存器:IP、PSW

通用寄存器(数据寄存器)

4个通用寄存器都可以分为两个独立的8位寄存器:

  • AX:AH(高8位)、AL(低8位)
  • BX:BH、BL
  • CX:CH、CL
  • DX:DH、DL

一个N位寄存器所能存储的数据的最大值是$2^N-1$

字在存储器中的存储

一个字占2个字节,有16位。

0100111000100000 可表示为 4E20H (Hexadecimal,十六进制数据后面加H

汇编指令举例

mov ax, 62627 AX = F4A3H
mov ah, 31H AX = 31A3H
mov al, 23H AX = 3123H
add ax, ax AX = 6246H
mov bx, 826CH BX = 826CH
mov 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

8086CPU给出物理地址的方法

8086CPU有20位地址总线,可传送20位地址,但是CPU内部却只有16位结构。

因此采用一种在内部用两个16位地址合成的方法形成一个20位的物理地址。

物理地址 = 段地址 X 16 + 偏移地址

内存并没有分段,段的划分是来自CPU的。

CPU可以用不同的段地址和偏移地址形成同一个物理地址。

例题

  1. 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为( 00010H )到( 10000FH )

    偏移地址的范围为0~FFFFH,CPU的寻址范围 00010H + 偏移地址

  2. 有一数据存放在内存20000H单元中,先给定段地址为SA,若想用偏移地址寻到此单元。则SA满足的条件是:最小为( 1001H ),最大为( 2000H )

    段的起始地址要为16的倍数,当偏移地址最小时,段地址最大,反之亦然

CS和IP

CS:代码段寄存器

IP:指令段寄存器

CPU将CS:IP指向的内存单元中的内容看作指令

工作流程:

  1. 从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;
  2. IP = IP + 所读取指令的长度,从而指向下一条指令;
  3. 执行指令。 转到步骤 (1),重复这个过程。

mov指令被称为传送指令,无法修改CS、IP的值

8086CPU提供转移指令:

1
2
3
4
5
6
jmp 段地址:偏移地址
jmp 2AE2:3
功能:用指令中给出的段地址修改CS,偏移地址修改IP
jmp 某一合法寄存器
jmp ax(equals mov IP,ax)
功能:用寄存器中的值修改IP