微机原理(一)

发布时间 2023-04-17 14:43:43作者: WWHf

微机原理

第一章:基础知识


1.1数制及其转换

1.1.1数制

区别数制度——基数:表示该进位制所用数码或字符个数。

例:

十进制基数为:0、1、2、3、4、5、6、7、8、9

二进制基数为:0、1

汇编语言规定:所有计算机中表示的书必须以0~9作为开头

F6H必须写为0F6H

十进制

按权展开:

\[4539.31=4*10^3+5*10^2+3*10_1+9*10^0+3*10^{-1}+1*10^{-2} \]

特点:

  1. 基数为10即有十个不同的数码或字符。
  2. 逢十进一
  3. 表示方法
  4. ①左下角表明数制\((345.67)_{10}\)

②数字后加符号D(Decimal-十进制)\(345.67D\)

③默认什么也不加\(345.67\)

二进制

二进制及其编码是所有计算机最基本的语言。

按权展开:

\[(1011.11)_2=1*2^3+0*2^2+1*2^1+1*2^0+1*2^{-1}+1*2^{-2} \]

特点:

  1. 基数为2,数码为0、1
  2. 逢二进一
  3. 表示方法:

①左下角表明数制

\[ (1011.11)_2 \]

②数字后加符号B(Binary-二进制)

\[ 1011.11B \]

八进制

按权展开:

\[(345.67)_8=3*8^2+4*8^1+5*8^0+6*8^{-1}+7*8^{-2} \]

特点:

  1. 八个不同的数码即基数为8
  2. 逢八进一
  3. 表示方法:

①左下角表明数制

\[(345.67)_8 \]

②数字后加符号Q(Octal-二进制)便于与0区分采用Q结尾

\[345.67Q \]

十六进制

按权展开:

\[(23CA.59)_{16}=2*16^3+3*16^2+12*16^1+10*16^0+5*16^{-1}+9*16^{-2} \]

特点:

  1. 十六个不同的数码即基数为16

  2. 逢十六进一

  3. 表示方法:

    ①右下角表明数制

\[(4FE.05A)_{16} \]

   ②数字后加符H(Hexadecimal-十六进制)

\[4FE.05AH \]

1.1.2数制转换

二进制-> 十进制

加权直接计算

例:

\((11011.01)_2=1*2^4+1*2^3+0*2^2+1*2^1+1*2^0+0*2^{-1}+1*2^{-2}=16+8+2+1+0.25=27.25\)

十进制->二进制

①整数部分(除2求余)最低位\(\Rightarrow\)最高位

例:\(187D\)

除2 余数
\(187/2=93\) 1 最低位
\(93/2=46\) 1
\(46/2=23\) 0
\(23/2=11\) 1
\(11/2=5\) 1
\(5/2=2\) 1
\(2/2=1\) 0
\(1/2=0\) 1 最高位

\(187D=10111011B\)

二进制起始位为最高位即最左边第一位

②小数部分(乘2求整)最高位\(\Rightarrow\)最低位

例:\(0.71875\)

乘2 取整数
\(0.71875*2=1.4375\) 1 最高位
\(0.4375*2=0.875\) 0
\(0.875*2=1.75\) 1
\(0.75*2=1.5\) 1
\(0.5*2=1\) 1 最低位
二进制->十六进制

四位二进制可以有16种组合,恰好对应0~16,所以可以用一位16进制表示4位二进制。

整数部分:从小数点往左每4位一组,最高位不足4位时补0到4位一组。

小数部分:从小数点往右每4位一组,最低位不足4位时补0到4位一组。

例:\(110100110.110101\)转换为十六进制。

整数部分:

0001 1010 0110
1 A 6

小数部分:

1101 0100
D 4

转换为十六进制为:\(1A6.D4H\)

十六进制->二进制

只需将每一位十六进制对应的4位二进制表示出即可。

例:\(7FD3.5CH\)转换为二进制数。

7 F D 3 5 C
0111 1111 1101 0011 0101 1100

\(0111 1111 1101 0011.0101 1100B\)

十进制->十六进制

整数部分:除16取余,最低位\(\Rightarrow\)最高位

小数部分:乘16取整,最高位\(\Rightarrow\)最低位

例:\(47632.78125\)转换为十六进制。

整数部分:

除16 余数
\(47632/16=2977\) 0 最低位
\(2977/16=186\) 1
\(186/16=11\) 10(A)
\(11/16=0\) 11(B) 最高位

小数部分:

乘16 取整
\(0.78125*16=12.5\) 12(C) 最高位
\(0.5*16=8\) 8 最低位

\(0BA10.C8H\)

十六进制->十进制

按权(16)展开即可

例:\(0BA10.C8H\)转换为16进制。

\(0BA10.C8=B(11)*16^3+A(10)*16^2+1*16^1+0*16^0+C(12)*16^{-1}+8*16^{-2}=47632.78125\)

1.2数的表示

无符号数:所有数码均用来表示数值,没有表示+,-的部分。

符号数:二进制中最高位为符号位,“0”代表正号,“1”代表负号。其余位为数值部分。

机器数:符号数(包括符号位)在机器中的一组二进制数表示形式,称为机器数。

真值:机器数所表示的数值。 一字节表示8位二进制数

原码

二进制数最高位用“0”表示,用“1”表示负数,其余位表示数值。

例:

\([+100]_原=0(110 0100)\)

\([-127]_原=1(1111111)\)

显然8位二进制原码的范围为:\(-127 - +127\)

0的表示:\([+0]_原=0(0000000)\) \([-0]_原=1(0000000)\)

反码

正数反码与原码相同。

负数反码为对应正数的按位取反。

例:

\([+100]_原=[+100]_反=0(1100100)\)

\([-100]_反=1(0011011)\)

0的表示:\([+0]_反=0(0000000)\) \([-0]_反=0(1111111)\)

补码

正数的原码与反码补码均相同。

负数的补码是将其对应正数按位求反加1形成。

例:

\([+100]_原=[+100]_反=[+100]_补=0(1100100)\)

\([-100]_补\)

按位求反:\(1(0011011)=1(16+8+2+1)=1(27D)\) 其中括号外为符号位,括号内为取反后对应的十制数

加1 \(1(27+1)=1(0011100)\)

\([-100]_补=1(0011100)\)

补码范围:\(-128-+127\)

\([-128]_补=1(0000000)\)真值为\((1111111)+1=128D\)

加减法

例:\(X=64,Y=8\),求\(X+Y=?\)

\([X]_补=0(1000000)\) \([Y]_补=0(0001000)\)

\[\begin{array}{r} 0(1000000)B\\ +0(0001000)B\\ \hline 0(1001000) B \end{array} \]

\(X+Y=[X+Y]_补=01001000B=72\)

例:\(X=78,Y=-100\),求\(X+Y=?\)

\([X]_补=0(1001110)\) \([Y]_补=1(0011100)\)

\[\begin{array}{r} 0(1001110)B\\ +1(0011100)B\\ \hline 1(1101010) B \end{array} \]

\([X+Y]_补=1(1101010)B=-106D\)

\(X+Y=1(0010101B+1)=1(0010110)=(-22D)\)

例:\(X=-78,Y=-15\),求\(X-Y=?\)

\([X]_补=1(0110010)\) \([Y]_补=1(1110001)\)

再对\([-Y]_补=0(0001110+1)=0(0001111)\)

\[\begin{array}{r} 1(0110010)B\\ +0(0001111)B\\ \hline 1(1000001) B \end{array} \]

\([X-Y]_补=1(1000001)=-65D\)

\([X-Y]=1(0111110+1)=1(0111111)=-63\)

溢出:运算结果超出补码所表示的范围。

判断溢出:异号相加或同号相减不会溢出;

同号相加或异号相减可能会溢出,运算后若符号位与参加运算的符号相反表明溢出。

BCD码(压缩)

用四位二进制编码表示一位十进制数,从左到右的权为8421。

例:9521D

9 5 2 1
1001 0101 0010 0001

\(9521D=(1001-0101-0010-0001)_{BCD}\)

BCD码计算

运算结果某位大于9或进位时,对其加0110(6)。

例:\(27+82=?\)

\[\begin{array}{r} (0010)(0111)B\\ +(1000)(0010)B\\ \hline (1010)(1001) B \end{array} \]

高四位\((1010)_B=10D>9\)

\[\begin{array}{r} (1010)B\\ +(0110)B\\ \hline (0001)(0000) B \end{array} \]

结果为:\((0001)(0000)(1001)_B=109D\)

例:\(88+89=?\)

\[\begin{array}{r} (1000)(1000)B\\ +(1000)(1001)B\\ \hline (0001)^、(0001)^、(0001) B \end{array} \]

十位个位均出现进位:均需加(0110)B

\[\begin{array}{r} (0001)B\\ +(0110)B\\ \hline (0111) B \end{array} \]

结果为:\((0001)(0111)(0111)_B=177D\)

字符编码

ASCII码由7位二进制编码组成。

用‘ ’把字符括起来,即表示字符的ASCII码。

\(A-Z\)ASCII码为\(41H-5AH\)

\(a-z\)ASCII码为\(61H-71H\)

\(0-9\)ASCII码为\(30H-39H\)

ASCII的最高位即第八位,一般作校验位。

奇校验:包含校验位在内的8位二进制数,1的个数之和必须为奇数。

偶校验:包含校验位在内的8位二进制数,1的个数之和必须为偶数。

浮点数与定点数

定点数:

整数

符号位 HSB ...... LSB 小数点

小数

符号位 小数点 HSB ...... LSB

浮点数

二进制权为2,如1101.101可表示为\(0.1101101*2^4\)\(0.001101101*2^6\)

所以任何一个二进制数可表示为:

\[N=2^E\times M \]

M为尾数表示二进制数的全部有效数字。

\(M_f\)为尾符,代表符号位。

E为阶码指出小数点在数据中的位置。

结构:

Ef ...... Mf ......
阶符 阶码 尾符 尾数

如:0 (1 0 0 0)0 (1 1 0 1 1 0 1)

 阶符   阶码  尾符        尾数

浮点规格化数:M的绝对值小于1大于等于1/2即小数点后第一位必须为1。