汇编语言 介绍
什么是汇编语言?
每台个人计算机都有一个微处理器,用于管理计算机的算术、逻辑和控制活动。
每个处理器系列都有自己的一组指令,用于处理各种操作,例如从键盘获取输入、在屏幕上显示信息以及执行各种其他作业。这些指令集称为“机器语言指令”。
处理器只理解机器语言指令,即 1 和 0 的字符串。
然而,机器语言太晦涩和复杂,无法用于软件开发。因此,低级汇编语言是为特定的处理器系列设计的,这些处理器以符号代码和更容易理解的形式表示各种指令。
汇编语言的优点
理解汇编语言会让人意识到:
- 程序如何与操作系统、处理器和BIOS交互;
- 如何在内存和其他外部设备中表示数据;
- 处理器如何访问和执行指令;
- 指令如何访问和处理数据;
- 程序如何访问外部设备。
使用汇编语言的其他优点是:
- 它需要更少的内存和执行时间;
- 它以一种更简单的方式允许特定于硬件的复杂作业;
- 它适用于时间紧迫的工作;
- 它最适合编写中断服务例程和其他内存驻留程序。
PC 硬件的基本特性
PC 的主要内部硬件由处理器、内存和寄存器组成。寄存器是保存数据和地址的处理器组件。为了执行程序,系统将其从外部设备复制到内部存储器中。处理器执行程序指令。
计算机存储的基本单位是位;它可以是 ON(1) 或 OFF(0),在大多数现代计算机上,一组 8 个相关位组成一个字节。
因此,奇偶校验位用于使字节中的位数为奇数。如果奇偶校验为偶数,则系统假设存在奇偶校验错误(虽然很少),这可能是由于硬件故障或电气干扰引起的。
处理器支持以下数据大小-
- 字: 2字节(16位)数据项
- 双字:4字节(32位)数据项
- 四字:8字节(64位)数据项
- 段落:16字节(128位)区域
- 千字节:1024字节
- 兆字节:1,048,576字节
二进制数字系统
每个数字系统都使用位置符号,即写入数字的每个位置都有不同的位置值。每个位置都是基数的幂,对于二进制数系统,它是 2,这些幂从 0 开始,然后增加 1。
下表显示了 8 位二进制数的位置值,其中所有位都设置为 ON。
位值 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
位置值以 2 为底的幂 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
位数 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
二进制数的值基于 1 位的存在及其位置值。因此,给定二进制数的值为-1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255
这是一样的: 28 - 1
十六进制数系统
十六进制数字系统以 16 为基数。该系统中的数字范围为 0 到 15。按照惯例,字母 A 到 F 用于表示十进制值 10 到 15 对应的十六进制数字。
计算中的十六进制数用于缩写冗长的二进制表示。基本上,十六进制数字系统通过将每个字节除以一半并表示每个半字节的值来表示二进制数据。
下面提供了十进制、二进制和十六进制的对照表:
十进制 | 二进制 | 十六进制 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
要将二进制数转换为等效的十六进制数,请从右侧开始将其分成每组 4 个连续组,并将这些组写在十六进制数的相应数字上。
比如 − 二进制数字 1000 1100 1101 0001 相当于十六进制 - 8CD1
要将十六进制数字转换为二进制,只需将每个十六进制数字写入其 4 位二进制等效数字。
比如 − 十六进制数 FAD8 相当于二进制数 - 1111 1010 1101 1000
二进制算术
下表说明了二进制加法的四个简单规则:
(i) | (ii) | (iii) | (iv) |
---|---|---|---|
1 | |||
0 | 1 | 1 | 1 |
+0 | +0 | +1 | +1 |
=0 | =1 | =10 | =11 |
规则(iii)和(iv)显示 1 位进位到下一个左位置。
实例
十进制 | 二进制 |
---|---|
60 | 00111100 |
+42 | 00101010 |
102 | 01100110 |
负二进制值用 二进制补码 表示。根据此规则,将二进制数转换为其负值是将其位值取反并加 1。
比如,
数字 53 | 00110101 |
反转位 | 11001010 |
加 1 | 00000001 |
数字 -53 | 11001011 |
要从另一个值中减去一个值,请将要减去的数字 转换为二进制补码格式,然后将这些数字相加。
比如,
从 53 减去 42
数字 53 | 00110101 |
数字 42 | 00101010 |
反转 42 的位 | 11010101 |
加 1 | 00000001 |
数字 -42 | 11010110 |
53 - 42 = 11 | 00001011 |
最后 1 位的溢出丢失。
在内存中寻址数据
处理器控制指令执行的过程称为 获取-解码-执行周期 或 执行周期。
它包含三个连续步骤:
- 从内存中获取指令
- 解码或识别指令
- 执行指令
处理器可以一次访问一个或多个字节的内存。让我们考虑一个十六进制数字 0725H。此数字将需要两个字节的内存。高位字节或最高有效字节为 07,低位字节为 25。
处理器以反向字节顺序存储数据,即,低位字节存储在低位存储器地址中,高位字节存储在高位存储器地址中。因此,如果处理器将值 0725H 从寄存器传送到内存,它将首先将 25 传送到低位存储器地址,将 07 传送到下一个存储器地址。
当处理器从内存中获取数字数据以进行寄存器注册时,它将再次反转字节。
有两种内存地址:
- 绝对地址 - 具体位置的直接引用。
- 段地址(或偏移量) - 具有偏移量值的内存段的起始地址。