文章目录
汇编 计算机基础知识
一、汇编语言基本概念
1.1 机器语言
- 定义:就是用机器指令编写的程序;
- 机器指令:就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作;
- 二进制代码:由二进制数0和1组成的代码。二进制代码是计算机能够直接识别的
- 目标程序:用机器语言编写的程序是计算机唯一能够直接识别并执行的程序,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为目标程序。
- 特点
(1)机器语言与机器硬件密切相关;
(2)用机器语言设计程序非常困难;
(3)用机器语言设计程序能得到时间和空间上的最优代码。
1.2 汇编语言
-
定义:是一种用符号书写的、基本操作与机器指令相对应的、并遵循一定语法规则的计算机语言;
-
引入汇编语言的目的:为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言;
-
汇编源程序:用汇编语言所提供的指令(伪指令)编写的程序;
-
汇编:汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为汇编;
-
汇编程序:这种把汇编源程序翻译成目标程序的语言加工程序;
-
汇编指令:用便于记忆、并能描述指令功能的符号表示机器指令→汇编指令(符号指令);
-
助记符:表示指令操作码的符号,一般用英语单词或缩写。指令的操作数也用符号表示;
-
汇编语言的特点:汇编指令与机器指令一一对应,但相对机器语言易于理解、掌握,当我们用低级语言编写程序时使用汇编语言而不用机器语言。
1.3 高级语言
-
定义:机器语言和汇编语言以外的程序设计语言统称高级语言。
-
特点
(1)更加接近自然语言和惯用的数学表达形式;
(2)与计算机硬件结构无关;
(3)便于使用,便于交流和推广;
(4)高级语言编程效率高,但运行效率低。 -
分类:高级语言可分成编译型和解释型高级语言,分别使用编译程序和解释程序将源程序翻译成机器语言程序,然后交计算机执行。
二、常用进位计数制
2.1 数制的基本概念
-
数制:用一组数字与统一的规则来表示数的方法。
-
常见的几种数制:
(1)十进制:十进制的数符集中有10个符号, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9符合人们的习惯;
(2)二进制:0和1,二进制数是计算机内部采用的,并唯一能够直接被计算机识别的数;便于物理实现,便于运算;
(3)十六进制:16个符号, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E , F 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F便于识别、书写。引入十六进制数的目的是为了描述二进制数。
(4)八进制:8个符号, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7。 -
基数:指这个计数系统中采用多少个数字符号。
-
权:不同的数位所代表的数值。
-
基数与权的表示:如果把用k进制书写的一个整数从右往左依次记作第0位、第1位、…、第n位,则第i位上的数符 a i a_i ai所代表的含义是 a i × k i a_i×k_i ai×ki。在此,我们把k称为一个数制的基数,而把 k i k_i ki称为k进制数第i位的权。
-
计数规则 :对于k进制数,简单地说,就是“逢k进1,借1当k”。
2.2 进制数的书写
-
二进制数
(1)二进制数是最简单的进位计数制,它只有0、1二个数码,计数方法是“逢二进一”。在书写二进制时,为了区别,在数据后面紧跟一个字母B。
(2)例如: ( 1010 ) 2 = 1010 B , ( 0.101 ) 2 = 0.101 B (1010)2=1010B,(0.101)2= 0.101B (1010)2=1010B,(0.101)2=0.101B -
十进制数
(1)尾部加D(d),但通常可以省略。
(2)例如: 23 D = 23 23D=23 23D=23 -
十六进制数
(1)十六进制数是由0 ~ 9和A、B、C、D、E、F(英语大写字母分别代表10~15)这十六个数码组成的,它的进位方式是“逢16进一”,十六进制在程序中的使用频率很高。
(2)数据若以记数符号A、B、C、D、E、F(不区分大小写)打头,在汇编源程序中头部应加0;
(3)书写时,为了区别,在数据后面紧跟字母H;
(4)例如:$(2E)16= 2EH、 0A8F5H $
2.3 进制数的关系
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0000 | 0 | 0 |
1 | 0001 | 1 | 1 |
2 | 0010 | 2 | 2 |
3 | 0011 | 3 | 3 |
4 | 0100 | 4 | 4 |
5 | 0101 | 5 | 5 |
6 | 0110 | 6 | 6 |
7 | 0111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
2.4 数制数的转换
- 十进制数转二进制
(1)整数部分:将整数部分不断除以2,记下每次得到的余数,直到商为零(除2取余);余数倒排,即最后得到的余数排在最高位,第一个余数排在最低位。
(2)小数部分:乘2取整,顺序排列得到的整数。 - 二进制转换成十进制:各位二进制数码乘以与其对应的权之和即为该二进制数相对应的十进制数。
- 十进制数和十六进制数间的相互转换:十进制数转换成十六进制数,方法同十进制数转换成二进制数,只不过“除2取余”变为“除16取余”,“乘2取整” 变为“乘16取整”。
- 二进制数和十六进制数间的相互转换:因为 2 4 = 16 2^4=16 24=16,所以二进制数转换成十六进制数只需将二进制数从小数点开始每4位转成一位十六进制数(整数由右向左,小数相反)。
三、数和字符的表示
3.1 有符号数和无符号数
-
机器字长:指参与运算的数的基本位数,标志着计算精度,一般是字节的整数倍(字节:8位、字:16位、双字:32位等)。
-
小数:定点表示法和浮点表示法。
-
机器数:指把一个数连同其符号在内数值化表示的数。
-
真值:最高位为符号位( 0表示正数, 1表示负数),数值部分称为机器数的真值。
-
无符号数:无符号数最高位表示数值,在计算机中最常用的无符号数是表示地址的数。
-
有有符号数:符号数最高位表示符号。有符号数有不同的编码方式,常用的是补码。
3.2 原码、反码和补码
-
原码
(1)正数原码:符号位为0,数值位照抄;
(2)负数原码:符号位为1,数值位照抄。 -
反码
(1)正数的反码与其原码相同;
(2)负数的反码是对正数逐位取反,符号位保持为1。 -
补码
(1)正数补码:符号位为0,数值位照抄;
(2)负数补码:符号位为1,数值位各位取反后末尾加1。 -
总结
(1)正数的原码、补码相同;
(2)负数的原码、补码不相同,但符号位都是1;
(3)字长为8位,原码的表示数范围为-127 ~ +127,补码的表数范围为-128 ~ +127。 -
注意
(1)在原码中有-0和+0,他们的补码都是00000000,但是在补码中,0只有只有一种表示,那就是+0;
(2)补码10000000唯一的表示-128是一个规定,不需要推算,理由:在原码中10000000表示-0,但是在补码中没有-0,所以为了不让它空缺,规定-128表示。 -
求补运算
(1)定义:对一个二进制数,按各位求反后在末位加1的运算。
(2)特性: [ X ] 补 ⟶ 求 补 [ − X ] 补 ⟶ 求 补 [ X ] 补 [X]_补\stackrel{求补}{\longrightarrow}[-X]_补\stackrel{求补}{\longrightarrow}[X]_补 [X]补⟶求补[−X]补⟶求补[X]补 -
补码的加法和减法
(1)补码的加法规则: [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X+Y]_补=[X]_补+[Y]_补 [X+Y]补=[X]补+[Y]补;
(2)补码的减法规则: [ X − Y ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补=[X]_补+[-Y]_补 [X−Y]补=[X]补+[−Y]补;
(3)由于用补码表示数,使计算机中的加减运算十分简便,它不必判断数的正负,只要符号位参加运算,便能自动地得到正确的结果。因此,CPU当中只有加法器。
3.3 符号扩展
-
扩展:是指一个数从位数较少扩展到位数较多,如有时需要把8位二进制数扩展成16位二进制数,或从16位二进制数扩展成32位二进制数,或从16位二进制数扩展成64位二进制数。
-
符号扩展:将原符号位填入扩展的每一位,以保持其作为有符号数的值不变。
-
注意:
(1)要扩展的数是补码形式的有符号数, 符号扩展后,其结果仍是该数的补码;
(2)对于补码表示的数,其正数的符号扩展是将其符号位0向左扩展(补“0”);
(3)其负数的符号扩展是将其符号位1向左扩展(补“1”)。
3.4 编码
-
编码的目的:除了数值数据外,计算机还可处理人们常用的符号,如字母、标点符号、汉字等。例如从键盘输入的信息或打印输出的信息都是字符方式输入输出的。因此,计算机必须能表示字符。字符在机器里必须用二进制数来表示。将字母、符号等字符也只能采用二进制代码(0、1)的排列组合表示(编码)。(PC机常用的有两种编码:ASCII码和BCD码)
-
BCD编码(主要介绍8421码)
(1)引入BCD编码的目的: 虽然二进制数实现容易,但书写阅读不方便,不符合人们的使用习惯,所以在计算机输入、输出时通常还是采用十进制来表示数,这就需要实现十进制与二进制间的转换。
(2)采用二进制编码来表示十进制数,这种编码方式称为二—十进制编码,简称为BCD。
(3)表示方法:BCD码规定用4位二进制数表示1位十进制数。对多位十进制数,只要把每一位十进制数分别表示为四位二进制数即可。 -
压缩BCD码与非压缩BCD码
(1) 压缩BCD码是用四位二进制数表示一位BCD码,用一个字节表示的两位BCD码,即一个字节存放两个十进制数位,想到压缩BCD码更节省存储空间。
(2)非压缩型BCD码一个字节可存放一个一位十进制数,其中高4位的内容不做规定(也有部分书籍要求为0,二者均可),低4位二进制表示该位十进制数。 -
BCD码对应表
十进制 BCD码 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 -
其他BCD码:BCD码有很多种,常见的有8421码,2421码,5421码,余3码,格雷码等。
-
ASCII码
(1)ASCII码背景:解决字母、符号在计算机内部如何表示,PC机采用目前最常用的美国信息交换标准代码ASCII码。
(2)ASCII码的组成:标准ASCII码用8位二进制数编码,共有128个。(解释:第8位恒为0,因此有 2 7 = 128 2^7=128 27=128 种) -
ASCII码分类
(1)控制字符(不可显示字符):前32个和最后一个,即0 ~ 31和127(共33个);
(2)打印字符(可显示字符):32 ~ 126(共95个)是字符(32为空格);
(3)48 ~ 57为0到9的十个阿拉伯数字;
(4) 65~90为26个大写英文字母;
(5)97~122号为26个小写英文字母;
(6)其余为一些标点符号、运算符号等。 -
ASCII码表
四、算术运算和逻辑运算
4.1 算术运算
-
二进制运算:与十进制运算相同,只不过是逢2进1,借1当2;
加法 减法 乘法 0+0=0 0‐0=0 0×0=0 0+1=1 0‐1=1 0×1=0 1+0=1 1‐0=1 1×0=0 1+1=10 1‐1=0 1×1=1 -
其他进制运算:如十六进制算术运算,与十进制运算相同;
4.2 逻辑运算
-
与运算(AND;∧)
1 ∧ 0 = 0 1∧0=0 1∧0=0
1 ∧ 1 = 1 1∧1=1 1∧1=1
0 ∧ 0 = 0 0∧0=0 0∧0=0
0 ∧ 1 = 0 0∧1=0 0∧1=0 -
或运算(OR;∨)
1 ∨ 0 = 1 1∨0=1 1∨0=1
1 ∨ 1 = 1 1∨1=1 1∨1=1
0 ∨ 0 = 0 0∨0=0 0∨0=0
0 ∨ 1 = 1 0∨1=1 0∨1=1 -
非运算(NOT;~ 或 - )
~ 0 = 1 ~ 0=1 ~0=1
~ 1 = 0 ~1= 0 ~1=0 -
异或运算(XOR;⊕)
1 ⊕ 0 = 1 1⊕0=1 1⊕0=1
1 ⊕ 1 = 0 1⊕1=0 1⊕1=0
0 ⊕ 0 = 0 0⊕0=0 0⊕0=0
0 ⊕ 1 = 1 0⊕1=1 0⊕1=1
注意:逻辑运算是按位运算。