学习目的:
学习微型计算机的基本组成原理、结构、特点、接口、指令、汇编语言程序设计 ,软件硬件结合,以达到把手伸到计算机内部的目的。
第一章 计算机的基本结构与操作
1.1计算机的数和编码系统
计算机的数制:任何数都可以用一组统一的符号和规则表示。
1.常用数制为:二,十,十六进制。
2.为了防止二义性而进行如下约定:
- 数字后带大写字母D(decimal system)或不带任何符号,则为十进制数
- 带大写字母B(binary system)的为二进制数
- 带大写字母H(Hexadecimal)的为十六进制数
eg:
100,即一百:100B,为四:100H为256
十,二,十六进制数间的关系如下图所示:
3.任何一个J进制的数N都可以表示为按权展开多项式
NJ=∑Ki*Ji
其中:Ki可取0,1,…(J-1)的任一数码符号. Ji------权(即数的基值). J------基数,常用J=2,10,16.
eg:
525.15=5*10^2+2*10^1+5*10^0+1*10^(-1)+5*10^(-2)
1101.11B=1*2^3+1*2^2+0*2^1+1*2^0+1*2^(-1)+1*2^(-2)
4CD.2H=4*16^2+12*16^1+13*16^0+2*16^(-1)
4.数制之间的转换
二进制转化为十六进制:
由小数点开始,往前每四位为一组,与十六进制表相对应即可。
例如:0010 1011 1101 B
1与B 之间为小数点所在位置,往前划分组:(0010)(1011)(1101)
分别与十六进制对应为:2,B,D
所以对应的十六进制为2BDH ps:H表示的是此表达式为十六进制表达
十六进制转化为二进制:
上述过程反过来。每一个十六进制对应4位二进制。
二进制,十六进制转化为十进制:
利用按权展开多项式,相乘相加即可。
eg:
11.11B=1*21+1*20+1*2-1+1*2-2=3.75
11H=1*161+1*160=17
十进制转化为二进制或十六进制:整数----除“基”取余法, 小数----乘“基”取整法
eg:39=27H=100111B
即用基16或2不断地去除待转换的十进制数, 直到商为0,将其余数倒序排列即可.
eg:0.75=0.11B=0.1100B=0.CH
即用基2或16不断地去乘待转换的十进制小数, 将每次所得的整数依次排列, 直到乘积为0或满足精度要求为止.
二.带符号数的表示
1.机器数与真值----连同符号位在一起编码的数机器数;其数值部分加符号为机器数的真值. 机器中的数也应有正负之分,约定一个数的最高位为符号位: 0代表正数,1代表负数.
eg:X1=+91=0101 1011B=5BH ; +101 1011B,即 +91的真值。
eg:X2=-91=1101 1011B=DBH ; -101 1011B 若把机器数的符号位也当作数值的数为无符号数;如无符号数: DBH=219
为了运算方便,带符号数有三种表示法,分别为:原码,反码,补码.
2.原码:按上述表示,正数的符号位为0,负数的符号位为1,数值部分用其绝对值表示。
如:
[+91]原=0101 1011B=5BH
[-91]原=1101 1011B=DBH
注:以A----F开头的数,约定前面加0;即写 成:0DBH
原码表示的数,8位数中,D7位为符号位,其余7位为数值位(为真值的绝对值).
原码表示简单易懂,且与真值转换方便,但内部运算复杂,为简化计算机结构,而引进反码和补码.
3.反码:正数的反码与其原码相同,负数的反码为:保留原码的符号位,其余各位取反。
负数的反码也为他的正数的反码全部取反
如:[+91]反=0101 1011B=5BH
[-91]反=1010 0100B=0A4H
注:一个负数的反码的数值部分并不是其真值的绝对值,要按位取反才能求得真值的绝对值。
4.补码:正数的补码与原码相同,负数的补码在其反码的基础上加一。
负数的补码为它的正数的补码按位求反,且在最低位加1(求反加1)
如: [+91]补=0101 1011B=5BH
[-91]补=1010 0101B=0A5H
注:一个补码表示的数,最高位为0为正数,其余位为其真值;最高位为1为负数,其余位并不表示真值的绝对值,必需再求补,才得其真值的绝对值.
**说明:
微机中,凡是带符号数约定用补码表示(除非特殊声明).
数可用8位或16位或32位(即2位或4位或8位16进制数)表示一个数,这称为字节,字,双字类型.
如:[+4]补=04H为字节表示(两位)
[+4]补=0004H为字表示(四位)
[-4]补=1111 1100B=0FCH为字节表示(8位)
[-4]补=1111 1111 1111 1100B=0FFFCH为字表示(16位)
16位补码实际上是8位补码的符号扩展,即一个二进制数的补码的符号位向左扩展若干位后,仍是该数的补码.
原码扩展是将符号位移至最高位,数值位补0:
如:[+4]原=04H=0004H
[-4]原=84H=8004H 值得注意的是:只有最高位才是符号位,字节为D7位,字为D15位.
5.进行数的转化时候,应该考虑数的表示范围。
- 8位无符号数所能表示的范围为:00H~0FFH,即0~255(0~2^8-1)
- 16位无符号数能表示的范围为:000H~0FFFFH,即0~65535(0~2^16-1)
- 8位补码数所能表示的范围:80H~7FH,即-128~+127(-2^7~+2^7-1)
- 16位补码所能表示的范围:8000H~7FFFH,即 -32768~+32767(-2^15~+2^15-1)
6.无符号数的运算(即8位或16位均表示数值).
- (1).两个无符号数相加----两数相加,其和超过其所表示的范围时,就向更高位产生进位----用CF标志表示.
- (2).两个无符号数相减----被减数大于等于减数,无借位;被减数小于减数有借位,结果为负.
- (3).有进位,有借位,CF=1
7.带符号的运算
- 两数进行运算,结果超出表示范围就会产生溢出;用OF标志表示.
- eg:
67H+5BH=0C2H>127 超出范围,结果为错,所以CF=0,OF=1。
why?
请看5.所述,8位补码所能表示的范围为-128~+127。
结论
- 结果有溢出,结果为错误,无溢出,则为正确。
- 两个带符号数运算,结果为正或负,用符 号位(最高位)判断,即D7=1,为负数;D7=0,为正数.
对带符号数运算,首先关心是否溢出;然后再关心符号位;以判断结果情况.