资源预览内容
第1页 / 共64页
第2页 / 共64页
第3页 / 共64页
第4页 / 共64页
第5页 / 共64页
第6页 / 共64页
第7页 / 共64页
第8页 / 共64页
第9页 / 共64页
第10页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第1章 基础知识,1.1 数与数制 1.2 内存储器的管理方式 1.3 寄存器 1.4 微型计算机的硬件结构,1.1 数 与 数 制,微型计算机亦称为微电脑,它仅能识别由0和1组成的机器语言和二进制数。由于十六进制表示的数更简短直观,与二进制数转换也很方便,所以,十六进制在计算机中也被广泛使用。,1.1.1 位与字节 微型计算机中使用二进制数表示和存储信息,位(bit)是微型计算机存储信息的最小单位。一个位有两种状态,分别为0状态与1状态,可以表示二进制数的0和1。 8位二进制数称为一个字节(byte,缩写为B),微型计算机中表示字母、符号的二进制编码的长度就是一个字节。例如,字母“A”与星号“*”的二进制编码,分别为01000001与00101010。,计算机怎么知道01000001代表字母“A”呢?它是以这样的原理设计和工作的:当你从键盘上键入“A”时,系统会从键盘上收到一个二进制数,将这一二进制数设定成01000001,存放于存储器的一个存储单元内。通过程序中的指令你可以在存储器中随意地移动此二进制数,而当程序中的指令把它送往屏幕或从打印机输出时,应为字母“A”。计算机就是以这样的约定来工作并以此来编制程序的。,210等于1024,表示1K。例如,含有512 KB的存储器,是指计算机的存储容量为 51210248位或5121024个字节。 由于PC机以及其兼容机型所用的微处理器是16位的CPU,因此它能在存储器单元和寄存器中存取一个16位的二进制数。16个位(2个字节)称为一个字(word)。字中的各位自右向左从0开始编号至15,,如下面是表示字母“PC”的字: 字的位编号: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 字的位内容: 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1,1.1.2 ASCII码 为了标准化,微型计算机采用ASCII (American Standard Code for Information Interchange)码。使用标准码可以简化不同微型计算机之间的数据传输问题。IBM PC所使用的8位延伸ASCII 码可以提供256个字符。ASCII 码的特点如下: (1) 数字的ASCII 码按照09顺序逐渐增大; (2) 数字的ASCII 码小于字母的ASCII 码;,(3) 字母的ASCII 码按26个字母顺序逐渐增大; (4) 大写字母的ASCII码小于小写字母的ASCII码。 第8章会告诉你如何在屏幕上显示所有的256个ASCII码字符。附录A是ASCII码表。,1.1.3 二进制数及运算 由于微型计算机只能区分0与1,所以微型计算机使用二进制数。位(bit)就是二进制数(Binary Digit)的缩写。 一个十进制数241=2102+4101+1100,10称为基数,102、101、100称为各位的“位权”。同理,一个二进制数1101=123+122+021+1 20,2称为基数,23、22、21、20 亦称为各位的“位权”。以8位二进制数为例,当每一位均为1时,各位的“位权”为:,字节位的位置值(位权):128 64 32 16 8 4 2 1 字节位的值: 1 1 1 1 1 1 1 1 8位二进制数的“位权”从右至左依次为1,2,4,128,所有“位权”的和为1+2+4+128=255或(28-1)。 前面的0100001可以表示字母“A”,但是,0100001也可以表示数值65(十进制),所以在选用数据时必须确认0100001究竟是表示数值65还是字母“A”,区分方法如下:,(1) 如果程序中所定义的数据项是作为算术运算用的,则01000001表示的是二进制数值,等于十进制的65。 (2) 如果程序中所定义的数据项是作为说明字符使用的,则01000001表示的是字母“A”。 当你开始写程序时,由于你必须定义每一个数据项的用途,所以将会发现此种区别是十分明显和重要的。 二进制数并不只限用于8位。由于个人微型计算机的微处理器8086是16位的CPU,所以它可以处理16位的二进制数,16位二进制数的范围是065 535(即216-1)。而32位的CPU允许使用32位,其范围是04 294 967 295(即232-)。,1. 二进制的算术运算 微型计算机只能执行二进制数的算术运算。因此,一个汇编语言程序设计员必须熟悉二进制数的格式与二进制数的运算规则。 二进制加法: 0+0=0 1+0=1 1+1=10 (有进位) 1+1+1=11 (有进位),例如,练习做01000001与00101010的加法,此处它们分别代表十进制数65与42。 二进制 01000001 + 00101010 01101011 十进制 65 +42 107,将二进制和为的权相加,核对此二进制数的和确实是等于107。下面再练习另外一个例子。 二进制 00111100 + 00110101 01110001 十进制 60 + 53 113,2. 负数 在微型计算机中数的正负号是用0和1表示的,0表示正号,1表示负号,并用最左边(最高)的位表示数的正负号。前面所提到的二进制数,其最左边(最高)的位都是零,所以均为正值。而负的二进制数,其最左边(最高)的位必须为1,且负数是以2的补码来表示的。二进制负数补码的求法是:将二进制负数的绝对值,各位取反(0变1,1变0)再加1。例如,下面以-65为例。,-65的绝对值+65: 01000001 各位取反: 10111110 加1: 10111111(等于-65的补码) 若直接将10111111的各位上1的“位权”值加起来,将发现其结果并不是-65。事实上,在计算机内如果一个二进制数其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。若要得到一个负二进制数的绝对值(称为真值),只要重复上述方法,即各位取反,再加1就可得到真值。,例如: 二进制值: 10111111 (-65的补码) 各位取反:01000000 加1: 01000001 (+65的补码) 微型计算机中的数都是用补码表示和运算的。采用补码的好处是加法和减法都可以统一为加运算。例如,将+65的补码与-65的补码相加,其结果将等于零。,01000001 (+65的补码) +10111111 (-65的补码) (1)00000000 8个位均为0,而最左边的进位1将自动丢弃。若有进位进入正负号位(最左面),且此正负号位又有进位产生的话,即双高位都有进位,则结果是正确的。 微型计算机中二进制数的减法,是用加法实现的。方法是:将减数(补码)再求2的补码,即各位取反再加上1,然后将此结果与被减数相加。例如:65-42=65+(-42),-42的绝对值二进制数表示为00101010,所以,(-42)2的补码表示为11010110。,65 +(-42) 23 01000001 + 11010110 (1)00010111 其结果等于23是正确的。此次仍然有进位进入正负号位,而且也有最高位的进位产生。,若你对2的补码表示还不十分清楚,试考虑下面的问题。对于二进制数00000001,试加上何值才能使它等于00000000。就十进制而言,答案是-1。在二进制中,我们可以试用11111111: 00000001 +11111111 (1)00000000,丢失进位1,结果为0正确,即可得知二进制数11111111是-1的2的补码,另有:,0 - (+1) -1,00000000 -00000001 11111111,00000000 +11111111 11111111,下面是二进制数补码按递减顺序排列的情况。 +3 00000011 +2 00000010 +1 00000001 0 00000000 -1 11111111 -2 11111110 -3 11111101,1.1.4 十六进制数及运算 假设现在你想要观察存储器中某些存储单元的内容,想知道由相邻四个字节(也即两个字)所组成的二进制数值。由于四个字节是32个位的二进制数,如果用二进制数表示,显然位数太多,出现了难读、难写、难记的问题,现在分析如下: 二进制:0101 1001 0011 0101 1011 1001 1100 1110 十进制: 5 9 3 5 11 9 12 14,由于有些数需要用到两个数字,如11,12,14,所以我们扩展数字系统,使得10=A,11=B,12=C,13=D,14=E,15=F。利用此种缩写方法,上述四个字节的内容就可以简洁地表示为: 59 35 B9 CE 这种数字系统使用了“数字”0到9、A到F,由于共有16个数字,所以我们称它为十六进制表示法。表1-1列出了从0到15的二进制、十进制以及十六进制的表示法。,表1-1 二进制、十进制和十六进制表示法,汇编语言使用了十六进制的格式。经过汇编的目标程序也是以十六进制表示所有的地址、机器指令码以及常数。在使用DOS DEBUG帮助调试程序时,同样也是使用十六进制格式表示所有地址和存储单元内容的。 下面是一些十六进制算术运算例子。在十六进制中,是逢十六进位的。 6 5 F F 10 FF + 4 + 8 + 1 + F + 10 + 1 A D 10 1E 20 100,(1) 十六进制的20等于十进制的32,十六进制的100等于十进制的256,而十六进制的1000则等于十进制的4096。 (2) 本书有关数的表示,通常是采用十六进制,例如,4BH,其中,H表示十六进制,或加前缀说明写成Hex 4B;在二进制中写成Binary 01001011或01001011B;十进制中则写成75。以十进制表示时,通常前面不加前缀说明,后面也不加后缀说明。注意:在DEBUG状态下数、地址都默认为是十六进制,而不允许加后缀说明。,1.2 内存储器的管理方式,8086/8088汇编语言对内存储器的管理是按段进行的,段(Segment)是存储器中的一块区域,它的最大长度为64 KB(1 KB等于10248)。段的起始位置可以出现在存储器中的任一节边界位置(Paragraph Boundary)上,节边界位置是实际地址能被16整除的位置,例如,20000H,445F0H等,最后一位总是0H。,一般的程序均含有下列三个主要段。 1. 指令段(Code Segment) 指令段内含有将要被执行的机器指令。一般来说,第一条可执行的指令通常位于指令段的起始位置。指令段寄存器(CS)则指示出指令段的起始位置。 2. 数据段(Data Segment) 数据段内含有已定义的数据栏、常数、以及程序中所需要的工作区(即存放中间结果和结果的区域)。数据段寄存器(DS)指示出数据段的起始位置。,3. 堆栈段(Stack Segment) 在堆栈段内含有两种返回位置(即返回地址),一种是程序返回系统的位置(地址),另一种则为被调用的子程序返回其主程序所需要的位置(地址)。堆栈段寄存器(SS)指示出堆栈段的起始位置。 另外,还有一个段寄存器,称为附加段寄存器(ES),它具有特殊的用途。 图1-1是SS、DS与CS寄存器的示意图,段与寄存器一般是以此顺序,但不一定非要按此顺序。,图1-1 段与寄存器,图1-1中的三个寄存器分
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号