汇编基础知识

汇编语言的一般概念

计算机程序设计语言可分为机器语言高级语言汇编语言三类。

机器语言

机器语言就是把控制计算机的命令和各种数 据直接用二进制数码表示的一种程序设计语言。

优点:机器语言最直接地表示了计算机内部的基 本操作,用它编制的程序在计算机中运行的效率 最高。即运行速度最快,程序长度最短。
缺点:用二进制数表示的内容既不便于记忆又难 于阅读。

高级语言

高级语言将计算机内部的操作细节屏蔽起 来,用户不需要知道计算机内部数据的传送和 处理的细节,使用类似于自然语言的一些语句 来编制程序,完成指定的任务。

特点:程序设计简单,但程序效率较机器语言低。

汇编语言

定义

为了便于记忆和阅读,使用字母和符号来 表示机器语言的命令,用十进制数或十六进制 数来表示数据,这样的计算机程序设计语言就 称为汇编语言。

汇编语言程序与机器语言程序的关系

一条汇编语言的语句与一条机器语言指令对应, 汇编语言程序与机器语言程序效率相同。

不同类型计算机有不同的机器指令系统和汇编语言描述

对一台计算机来说,机器语言的执行主要取 决于该计算机的中央处理器CPU。因此熟悉计算 机内部结构主要是指CPU的功能结构。它包括:

CPU中有多少个寄存器及其作用? CPU是如何访问存储器? 输入输出操作的方式有哪些?

学习和使用汇编语言的目的

1. 学习和使用汇编语言可以从根本上认识、理解 计算机的工作过程。
通过用汇编语言编制程序可以更清楚地了解计 算机是如何完成各种复杂的工作。在此基础上, 程序设计人员能更充分地利用机器硬件的全部功 能,发挥机器的长处。
2. 在计算机系统中,某些功能必须用汇编语言程序 来实现。
如:机器自检、系统初始化、实际的输入输出设备的 操作等。
3. 汇编语言程序的效率高于高级语言程序
“效率”有两个方面的含义:程序的目标代码长 度和运行的速度。
在某些要求节省内存空间和提高程序运行速度的 应用场合,如实时过程控制、智能仪器仪表等, 常常用汇编语言来编制程序。

进位计数制及其相互转换

进位计数制

使用一定个数的数码的组合来表示数字,这种 表示方法称为进位计数制。根据所使用的数码的 个数,就产生了不同的进位计数制。

将各个位置上所表示的基本数值称为位权, 简称权。

每个数位上能使用不同数码的个数称为基数。

例:十进制有十个数码0~9,基数为10,二进制基 数为2。

B(Binary)--二进制数
O (Octal)或Q--八进制数
D (Decimal)--十进制数
H (Hexadecimal)--十六进制数
如未使用任何字母,则默认表示是十进制数

各种数制间的相互转换

十进制整数转换为二进制数

1. 减权定位法

  • 从二进制数高位起,依次用待转换的十进制数与各位权值进行比较;
  • 如够减,则该数位系数Ki=1,同时减去该位权值, 余数作为下一次比较的值;
  • 如不够减,则Ki=0。

2. 除基取余法

将十进制数除以基数2,其余数为二进制数的最低位,再用其商除2,其余数为次低位,反复做下去,直到商0。

这种转换方法同样适合于其它进制数之间的转换。(红)

十进制小数转换为二进制数

1. 减权定位法

例:将十进制数0.645转换为二进制数

减权比较 Ki 对应二进制数
0.645-0.5 =0.145 k-1 1
0.145<0.25 k-2 0
0.145-0.125=0.02 k-3 1
0.02<0.0625 k-4 0
0.02<0.03125 k-5 0
0.02-0.015625 k-6 1

所以 0.645D=0.101001B

转换时应根据程序要求的精度或计算机的字长来确 定二进制的位数.(黄框)

2. 乘基取整法

例:将0.8125D转换为二进制数

乘以基数 Ki 整数部分
0.8125×2=1.625 K-1 1
0.625×2=1.25 K-2 1
0.25×2=0.5 K-3 0
0.5×2=1. K-4 1

所以 0.8125D=0.1101B

二进制整数转换为十进制数

1. 按权相加法

101000101B
=1×28+1×26+1×22+1×20
=256+64+4+1
=325

2. 逐次乘基相加法

二进制小数转换为十进制数

1. 按权相加法

0.101001B
= 1×2-1+1×2-3+1×2-6
= 0.5+0.125+0.0156
= 0.640625D

2. 逐次除基相加法

二进制与八进制和十六进制间的转换

二进制与八进制和十六进制之间的对应关系:
三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数。

带符号数的表示3

用“+”或“-”表示正负的数叫真值(黄色块)
用“0”或“1”表示正负的数叫机器数

原码表示

二进制数的最高位表示符号,0表示正,1表示负。数值 部分用二进制数绝对值表示

8位二进制数原码的最大数为01111111(+127) 最小数为11111111 (-127)
8位二进制数表示范围:-127≤X≤+127

0的原码有两种表示形式:00000000和10000000(+0和-0)

补码的表示

1. 补码的定义

带符号数X的补码表示[X]定义为:

[X]=M+X (Mod M)

其中模数M根据机器数的位数而定,如位数为8则M=28 用补码表示的机器数,符号位仍然表示数的符号:0为正,1为负。对于正数,补码与原码相同,对于负数需要进行变换。

2. 由真值、原码变换为补码

由于正数的原码与补码相同,下面讨论负数的变换方法。

负数的真值变换为补码的方法:将各位变反(0变1,1变0) 然后在最低位加1.
负数的原码变换为补码:保持符号位不变,其余各位变反, 最低位加1。

例:将-59变换为补码
真值 -00111011 变反 11000100 加1 11000101
原码 10111011 变反 11000100 加1 11000101

所以 [-59]=11000101

3. 补码数的表示范围

当位数为8时,最大补码为01111111=[+127] 最小补码为10000000=[-128]

0的补码只有一个,[0]=00000000,而10000000是[-128]11111111=[-1]

对于16位数,则补码表示范围为-32768~+32767

4. 补码的加减运算

规则:

[X+Y]=[X]+[Y]
[X-Y]=[X]-[Y]=[X]+[-Y]

进位超出:舍去

字符的表示

标准ASCII码为一字节,其中用低七位表示字符编码(见附录 A),用最高位表示奇偶数验位。

标准ASCII码共有128个,可分为两类:
非打印ASCII码,共33个,用于控制操作, 如BEL(响铃07H), DEL(删除7FH),CR(回车,0DH), LF(换行,0AH)。
可打印ASCII码共有95个,如数字符0~9,大小写字母等。

基本逻辑运算

1. “与”运算(AND)

“与”运算也叫逻辑乘,常用 ∧ 或 · 表示。

F=A ∧ B 或 F=A · B

“与”运算是指:仅当逻辑变量A与B都是1时, 运算结果F才为1。其它情况F为0,

即有: 0 ∧ 0 =0 , 0 ∧ 1 = 0 , 1 ∧ 0 = 0 , 1 ∧ 1 =1

2. “或”运算(OR)

“或”运算也叫逻辑加,用∨或+表示。

即有:F=A ∨B F=A +B

“或”运算是指当逻辑变量A与B中,至少有一 个为1时,结果F为1,其他情况F为0。

即有: 0 ∨ 0 = 0 , 0 ∨ 1 = 1 , 1 ∨ 0 = 1 , 1 ∨ 1 = 1

3. “非”运算

如A为1,则A=0,若A为0,则A=1

1 = 0 , 0 = 1

4. “异或”运算(XOR)

通常用 ⊕表示,即 F = A ⊕ B

“异或”运算是指:当A和B相同时(同时为1或同时为 0),运算结果F为0,而不同时,F为1。

运算规则为:1 ⊕ 1 = 0 , 1 ⊕ 0 = 1 , 0 ⊕ 1 = 1 , 0 ⊕ 0 = 0

0%