第一章 基础知识.docx
- 文档编号:9852217
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:25
- 大小:616.79KB
第一章 基础知识.docx
《第一章 基础知识.docx》由会员分享,可在线阅读,更多相关《第一章 基础知识.docx(25页珍藏版)》请在冰豆网上搜索。
第一章基础知识
第一章概述
程序设计语言是开发计算机各种软件的工具,它经历了由低级语言到汇编语言再到高级语言的的发展过程。
其中,汇编语言是一种能够充分利用计算机硬件特性的低级语言,它与计算机的结构有着非常紧密的联系。
虽然高级语言能够实现绝大部分机器语言可以实现的功能,但汇编语言还是经常被用来改进计算机软件和硬件控制系统的工作效率以及用于高级语言的程序调试,为计算机系统提供高速、高效的代码,所以学习和掌握汇编语言程序设计的内部细节对于计算机的学习是非常有益的。
1.1汇编语言概述
自从第一台计算机ENIAC于1946年诞生以来,计算机的发展经历了电子管、晶体管、集成电路和超大规模集成电路四代,目前正朝着智能化的第五代计算机发展。
计算机的应用已渗透到社会和生活的各个领域,人们与计算机进行交流的“语言”也经历了机器语言、汇编语言、高级语言的三个重要阶段的发展,正朝着“自然语言”的方向发展。
1.1.1机器语言
机器语言是一种计算机能直接识别和执行的用二进制代码表示的机器指令的集合。
它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。
机器语言具有直接执行和速度快等特点。
不同型号的计算机其机器语言是不相通的,按照某种型号计算机的机器指令系统编制的程序,不能在另一种型号的计算机上执行。
用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。
手工编写程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。
因此,使用机器语言编写程序是一件十分繁琐的工作,花费的时间往往是程序实际运行时间的几十倍或几百倍。
而且编出的程序全是些0和1的指令代码,直观性差,还容易出错。
现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再去学习机器语言了。
1.1.2汇编语言
汇编语言是用助记符表示指令功能的计算机语言。
用汇编语言编写的程序被称为汇编语言源程序,汇编语言源程序无法被计算机直接执行,还必须用专门的系统程序将它翻译成机器代码,计算机才能识别并执行,而这一翻译过程被称为汇编。
与机器语言相比,汇编语言具有以下的几个特点:
第一,它使用符号来表示操作码和地址码,这种符号便于记忆,称之为记忆码。
第二,汇编过程中自动处理存储单元的分配,毋需程序员做存储分配工作。
第三,程序员可以直接书写十进制数。
汇编语言实现了对机器语言的抽象。
首先表现在将机器语言的每一条指令符号化,指令码代之以记忆符号,地址码代之以符号地址,使得其含义显现在符号上而不再隐藏在编码中,可让人望"文"生义。
其次表现在汇编语言摆脱了具体计算机的限制,可在不同指令集的计算机上运行,只要该计算机配上汇编程序即可。
1.1.3高级语言
虽然汇编语言用符号替代机器指令,从一定程度上简化了程序的编写、阅读和调试,但是没有经过汇编语言训练的程序设计人员,编写汇编语言程序还是十分困难的,不利于计算机的推广与应用。
于是,人们尝试设计一种脱离具体的计算机,面向过程、更符合人类思维和更容易被人们所理解和学习的语言,从而演化出高级语言。
20世纪50年代末,第一个用于科学计算的高级语言——FORTRAN语言诞生了,随后各种高级语言如雨后春笋般涌现出来。
目前,世界上使用的高级语言多达数百种,其中具有代表性的高级语言有C语言、C++、VisualBasic、Delphi等常用高级语言。
由于计算机只能识别由0、1代码组成的机器语言程序,所以各种高级语言的源程序也必须经过相应的编译程序或解释程序翻译成目标程序,才能被计算机所识别并执行。
1.1.4三种语言的特点比较
机器语言是由0、1代码组成的面向机器的语言。
机器语言程序的编写、阅读和调试都十分困难,但它是计算机可直接识别并执行的语言程序,内存占用少,执行的速度快。
汇编语言是一种用符号替代机器指令的低级语言。
与机器语言相比,汇编语言易于理解和记忆,汇编语言程序也易于编写、阅读与调试。
由于其语句与机器指令语句一一对应,所以具有内存占用少、执行速度快等特点,并且能直接控制计算机的硬件设备,充分发挥计算机的硬件功能。
从本质上讲,汇编语言仍然是面向机器的语言,这就要求程序设计者要熟悉计算机的内部结构,掌握计算机的指令系统以及对应的伪指令,这就给学习汇编语言带来了困难。
另外,汇编语言的指令语句与程序设计者所要完成的任务有很大的差别。
由于汇编语言的指令语句只能实现简单的操作,如寄存器数据的移位、寄存器与内存之间数据的传送、数据的算术逻辑运算等,远非程序设计者所要完成的任务。
例如,要做1+2的操作并将结果在屏幕上显示出来,必须使用一系列汇编指令并进行DOS功能调用,而高级语言只需要一条指令即可完成该操作。
高级语言是一种类似于自然语言和数学描述语言的程序设计语言。
其主要特点是:
面向过程、脱离具体的机器。
高级语言易于编写、阅读和调试,且可移植性好。
但是高级语言源程序必须经过编译后才能翻译成计算机可识别、执行的目标程序,所以不能产生有效的机器语言代码,致使其占用内存空间大,程序运行速度较慢。
1.2计算机中数据和字符的表示
计算机只能识别0、1代码,进入计算机的任何信息都必须转换成0、1代码。
本节说明计算机如何利用0、1代码表示现实当中的各种数值、字符等内容。
1.2.1数制
在汇编语言设计中,经常要用到的数制有二进制、十进制以及十六进制。
1.二进制
计算机中为便于存储及计算的物理实现,采用二进制。
二进制数的基数为0和1,各个数值的权为2i-1(i为数值所在位置,如小数点左边第一位为个位,i=1,小数点右边为0位,i=0),并且二进制遵循“逢二进一、退一当二”的运算规则。
二进制数anan-1····a1.b0b1····bm可表示为:
an×2(n-1)+an-1×2(n-2)+····a1×2(1-1)+b0×2(0-1)+b1×2(-1-1)+····bm×2(-m-1)
其中,ai,bj非0即1。
2.十进制
在人们的生活中,已经习惯使用十进制。
十进制的基数有十个,即0~9十个数,各个数值的权为10i-1(i为数值所在位置),并且十进制遵循“逢十进一、退一当十”的运算规则。
十进制数anan-1····a1.b0b1····bm可表示为:
an×10(n-1)+an-1×10(n-2)+····a1×10(1-1)+b0×10(0-1)+b1×10(-1-1)+····bm×10(-m-1)
其中,ai,bj为0~9中任意的一个数。
3.十六进制数
由于二进制数书写较长、容易出错,因此常用易于与二进制数转换的十六进制数来描述二进制。
十六进制数的基数有16个,即0~9、A~F,各个数值的权为16i-1(i为数值所在位置),并且遵循“逢十六进一,退一当十六”的运算规则。
十六进制数anan-1····a1.b0b1····bm可表示为:
an×16(n-1)+an-1×16(n-2)+····a1×16(1-1)+b0×16(0-1)+b1×16(-1-1)+····bm×16(-m-1)
其中,ai,bj为0~9或A~F中的任意一个数。
注意:
汇编语言中通常用B或b结尾表示该数据为二进制数;用字母H或h结尾表示该数据为十六进制数;用字母D或d结尾表示该数据为十进制数。
如果数据结尾没有跟任何字符,则默认该数据为十进制数。
如10101100B、1223D、1100、0ABCDH,分别为二进制、十进制、十进制和十六进制数。
其中,十六进制数如果数值的开头为A~F,则必须在前面加0,否则汇编程序认为该数值为一个标号,从而会导致在编译过程中出错。
4.不同进制数之间的转换
不同进制之间的转换主要有:
二进制或十六进制转换为十进制、十进制转换成二进制、二进制转换为十六进制以及十六进制转换为二进制。
二进制或十六进制转换为十进制口诀:
将各个数值乘以其相应的权,最后相加所得到的和即为等值的十进制数。
十进制转二进制口诀:
十进制整数部分不断除以2,取余,最后从下往上;小数部分不断乘以2,取整,最后从上往下;小数点位置不变。
二进制转十六进制口诀:
从小数点向两边分,每四位一组,左边不够四位在前面补0,右边不够四位在后面补0,最后将每组二进制数转换为相应的十六进制数值即可,小数点位置不变。
十六进制转二进制口诀:
每位十六进制数值转换为四位相应的二进制数,小数点位置不变。
说明:
十进制数转换为十六进制数可以先将十进制数转换为二进制数,再将二进制数转换为十六进制数。
例1-1将126.25D转换为二进制。
解:
根据十进制转换为二进制数口诀,将整数部分126不断除2,取余数;小数部分不断乘2,取整。
运算过程如下:
整数部分转换结果为1111110B,小数部分转换结果0.01B,所以126.25D=1111110.01B。
例1-2将0ABCD.3678H转换为二进制。
解:
十六进制转换成二进制只需要将十六进制的每个数值转换为对应的4位二进制数值即可。
转换过程如下:
不同进制之间的数值对应关系如表1-1所示。
表1-1不同进制数值对应关系表
十进制
二进制
十六进制
BCD码
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1.2.2计算机中的数据单位
计算机中用到的信息单位主要有位、字节、字、双字、千字节、兆字节和千兆字节等,它们一般用于表示计算机内存或外存的存储容量。
1.位(bit)
位是计算机中最小的信息单位,用于表示一位二进制数的两种状态“0”和“1”。
例如开关的“通”与“断”,电平的“高”与“低”等状态,均可以方便地使用0/1代码进行表示。
2.字节(byte)
字节是计算机的基本存储单位,一个字节为8位二进制数,计算机中存储单元的地址一般以字节为基本单位进行编址。
3.字(word)
两个字节称为一个字,即16位二进制数组合成一个字。
4.双字(doubleword)
两个字称为一个双字,即32位二进制数组合成一个双字。
说明:
字和字长是有一定的区别。
计算机中的字是一种信息单位,是不变的量,即两个字节为一个字。
而字长指的是CPU一次能够处理的数据长度,是一种可变化的量。
例如8086的字长为16位,80386的字长为32位,也就是说8086CPU一次能够处理的数据为16位,80386CPU一次处理的数据长度达到了32位,但是它们的字均为16位。
随着计算机技术的发展,处理信息量的增加以及存储容量的加大,计算机中还采用了千字节(KB)、兆字节(MB)、千兆字节(GB)等单位。
它们的关系是:
1KB=1024B
1MB=210KB=1048576B
1GB=210MB=1073741824B
1.2.3编码
在计算机中,各种字符只能用若干位二进制码的组合表示,这就称为二进制编码。
由于字节为计算机的基本存储单位,所以常用8个二进制位表达一个字符。
1.BCD码(BinaryCodedDecimal)
一位十进制数用四位二进制编码来表示,这就是所谓的“二进制编码的十进制数”。
常用的是8421BCD码,它用4位二进制编码的0000~1001分别来代表十进制的0~9这十个基数,见表1-1。
注意:
BCD码共有10个编码,分别对应十进制的10个基数0~9,所以1010~1111这6个二进制编码就不属于BCD码。
BCD码用于表示十进制数是比较直观的,并且只要熟悉了BCD码的10个编码,可以很容易实现十进制数与BCD码之间的转换。
例1-3将十进制数7865.32转换为BCD码。
解:
十进制转换成BCD码只需要根据表1-1将相应的十进制基数转换成对应的BCD码即可。
转换过程如下:
2.ASCII码(AmericanStandardCodeforInformationInterchange)
字母和各种字符也必须按特定的规则用二进制编码才能在计算机中表示。
编码方式有多种,其中最常用的一种编码是ASCII码(美国标准信息交换码),见表1-2。
标准ASCII码用七位二进制编码,故可表示128个字符。
微型机存储单位为8位,表达ASCII码时最高D7位为0;通信时,D7位作为奇偶校验位。
ASCII码表中的前32个和最后1个编码是不可显示的控制字符,用于表示某种操作。
例如:
0DH表示回车CR(CarriageReturn),控制光标时就是使光标回到本行首位;0AH表示换行LF(LineFeed),使光标进入下一行,但列的位置不变;另外07H表示响铃BEL(Bell)。
表1-2标准ASCII码表
ASCII码
字符
ASCII码
字符
ASCII码
字符
ASCII码
字符
00H
NUL
20H
空格
40H
@
60H
`
01H
SOH
21H
!
41H
A
61H
a
02H
STX
22H
"
42H
B
62H
b
03H
ETX
23H
#
43H
C
63H
c
04H
EOT
24H
$
44H
D
64H
d
05H
ENQ
25H
%
45H
E
65H
e
06H
ACK
26H
&
46H
F
66H
f
07H
BEL
27H
`
47H
G
67H
g
08H
BS
28H
(
48H
H
68H
h
09H
HT
29H
)
49H
I
69H
i
0AH
LF
2AH
*
4AH
J
6AH
j
0BH
VT
2BH
+
4BH
K
6BH
k
0CH
FF
2CH
’
4CH
L
6CH
l
0DH
CR
2DH
-
4DH
M
6DH
m
0EH
SO
2EH
.
4EH
N
6EH
n
0FH
SI
2FH
/
4FH
O
6FH
o
10H
DLE
30H
0
50H
P
70H
p
11H
DC1
31H
1
51H
Q
71H
q
12H
DC2
32H
2
52H
R
72H
r
13H
DC3
33H
3
53H
S
73H
s
14H
DC4
34H
4
54H
T
74H
t
15H
NAK
35H
5
55H
U
75H
u
16H
SYN
36H
6
56H
V
76H
v
17H
ETB
37H
7
57H
W
77H
w
18H
CAN
38H
8
58H
X
78H
x
19H
EM
39H
9
59H
Y
79H
y
1AH
SUB
3AH
:
5AH
Z
7AH
z
1BH
ESC
3BH
;
5BH
[
7BH
{
1CH
FS
3CH
<
5CH
\
7CH
|
1DH
GS
3DH
=
5DH
]
7DH
}
1EH
RS
3EH
>
5EH
^
7EH
~
1FH
US
3FH
?
5FH
-
7FH
Del
ASCII码表中,从20H以后的94个编码是可显示和打印的字符,其中包括数值(0~9)、英文字母(A~Z、a~z)及其它的标点符号等。
从表1-2可以看出,数值0~9的ASCII码为30~39H,大写字母A~Z的ASCII码为41H~5AH,而小写字母a~z则是从61H~7AH。
大小写字母之间ASCII码的差值为20H。
如果要将大写字母转换为小写字母,只需要在大写字母的ASCII码基础上加上20H就可以了;反之,小写字母转换为大写字母则在小写字母的ASCII码基础上减20H即可。
注意:
ASCII码中的20H表示空格符号,尽管它显示空白,但也要占据一个字符的位置。
下面给出控制字符的简单含义。
NUL(null) :
空字符SOH(startofhanding):
标题开始
STX(startoftext):
正文开始ETX(endoftext):
正文结束
EOT(endoftransmission):
传输结束ENQ(enquiry):
请求
ACK(acknowledge):
收到通知BEL(bell):
响铃
BS(backspace):
退格HT(horizontaltab):
水平制表符
LF(NLlinefeed,newline):
换行键VT(verticaltab):
垂直制表符
FF(NPformfeed,newpage):
换页键CR(carriagereturn):
回车键
SO(shiftout):
不用切换 SI(shiftin):
启用切换
DLE(datalinkescape):
数据链路转义DC1(devicecontrol1):
设备控制1
DC2(devicecontrol2):
设备控制2 DC3(devicecontrol3):
设备控制3
DC4(devicecontrol4):
设备控制4NAK(negativeacknowledge):
拒绝接收
SYN(synchronousidle):
同步空闲ETB(endoftrans.block):
传输块结束
CAN(cancel):
取消EM(endofmedium):
介质中断
SUB(substitute) :
替补ESC(escape):
溢出
FS(fileseparator):
文件分割符GS(groupseparator):
分组符
RS(recordseparator):
记录分离符US(unitseparator) :
单元分隔符
另外,在PC机中往往还采用扩展的ASCII码,主要表示各种制表用的符号等。
扩展ASCII码最高位D7为1,以与标准ASCII码区别。
1.2.4有符号数的表示法
1.原码
为了在计算机中表示有符号数,正号用0表示,负号用1表示,数值部分不变。
计算机存储时,用最高有效位表示符号,其他位表示数值的大小,这种表示方式就称为原码表示法。
例1-4有符号数的原码表示法。
解:
将数值转换为相应的二进制数,最高位表示符号。
X=+105=01101001B[X]原=01101001B
X=-105=11101001B[X]原=11101001B
X=+0=00000000B[X]原=00000000B
X=-0=10000000B[X]原=10000000B
其中,在用8位表示时,最高位为符号位,后面7位表示数值大小;若用16位表示时,最高位为符号位,后面15位表示数值大小。
原码表示法的特点是简便、直观,人们可以非常方便地计算出其表示的数在十进制中究竟是多少,它的不足之处是0的表示有两种,即+0和-0,这对计算机来说可不是件好事。
比如两个原码表示的数据相加,首先需要判断两数的符号位,以决定到底是做加法还是做减法,然后用它们的绝对值进行计算;还需要判断计算结果的正负情况,最后在最高位上填上正确的符号。
这种做法使数据之间的运算非常麻烦,所以人们又在计算机中采用了反码和补码。
2.反码
反码是在原码的基础上,为简化运算而发展出来的另一种表示带符号二进制数的方法,具体表示方法是:
(1)确定表示数据的二进制位数,通常是8位、16位或32位;
(2)正数的反码与原码相同,最高位用0表示,其余位为数值位;
(3)负数的反码则将最高位(符号位)置1,数值位在原码的基础上依次取反,即0变1,1变0。
例1-5有符号数的反码表示法。
解:
首先将数据转换为原码,如果符号位为0,则反码与原码相同,如果符号位为1,则对原码数值部分取反。
X=+105=01101001B,[X]反=01101001B
X=-105=11101001B,[X]反=10010110B
X=+0=00000000B,[X]反=00000000B
X=-0=10000000B,[X]反=11111111B
3.补码
补码是在反码的基础上做了进一步改进,在解决了+0和-0的表示问题上,并且数据之间的运算也无需考虑符号的问题。
具体表示方法是:
(1)确定表示数据的二进制位数,通常是8位、16位或32位;
(2)正数的补码与原码表示方法相同;
(3)负数的补码则在反码的基础上,再在最低有效位加1。
例1-6有符号数的补码表示法。
解:
在原码的基础上,对负数的数值部分取反后再加1。
X=+105=01101001B,[X]补=01101001B
X=-105=01101001B,[X]补=10010111B
X=+0=00000000B,[X]补=00000000B
X=-0=10000000B,[X]补=00000000B
一般来说,n位补码的表示数据范围为:
-2(n-1)≤N≤2(n-1)-1
注意:
负数的补码表示法中,如果0越多,则该补码表示的数值则越小,1越多,则该补码表示的数值则越大。
对于8位补码表示法,最小的补码为10000000B,即-128,最大的补码为11111111B,即-1。
1.2.5二进制数运算
二进制运算分为算术运算和逻辑运算两种。
1.算术运算
二进制的算术运算类似于十进制,只不过逢二进一,退一当二。
表1-3为二进制运算规则。
表1-3二进制运算规则
加法运算
减法运算
乘法运算
1+0=1
1+1=0(进位1)
0+0=0
0+1=1
1-0=1
1-1=0
0-0=0
0-1=1(借位1)
1×0=0
1×1=1
0×0=0
0×1=0
例1-7四位二进制的算术运算
解:
1011+0101=0000(进位为1)
1011-0101=0110
1011×0101=00110111
2.逻辑运算
逻辑运算包括逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)以及逻辑异或(XOR),其运算规则见表1-4。
表1-4逻辑运算规则表
逻辑与
逻辑或
逻辑非
逻辑异或
1AND0=0
1AND1=1
0AND1=0
0AND0=0
1OR0=1
1OR1=1
0OR1=1
0OR0=0
NOT1=0
NOT0=1
1XOR0=1
1XOR1=0
0XOR1=1
0XOR0=0
例1-8四位二进制的逻辑运算
1011AND0101=0001
1011OR0101=1111
NOT1011=0100
1011XOR0101=1110
1.3Intel系列CPU简介
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 基础知识