汇编语言程序设计学习笔记(一)
主题:第一章基础知识(第1-4节)
内容:
第一章概述
本篇我们将学习计算机所使用的机器语言方面的知识,这部分内容虽然比较简易,但是也是学好汇编语言程序的必备知识。
第一节进位记数制与不同基数的数之间的转换
1、基本概念
1)基数:所谓基数,就是表数的数码个数,我们熟悉的十进制数是以10为基数的。
二进制数是基数为2的记数制,以1和0表示不同状态。
二进制数是真正的机器数,能为计算机读懂真正的语言。
2)权:基数的N次方就是相应数码的N阶权,如314=10
⨯0,相应的10的N次幂就是314的N阶权。
二⨯+410
3⨯2+110
进制数用2N表示N阶权。
3)B、D、H:习惯上二进制数后跟一个字母B,十进制数后跟D,十六进制后跟字母H,用于人们区别不同进制的数。
2、二进制数与十进制数之间的转换
1)十进制数转换为二进制数的方法:降幂法和除法,其中降幂法需要熟悉以下几个数字,27=128,28=256,210=1024,等等;除法最常用,除法本质是基数按权展开公式的逆运用,需要注意的是:除法得到的第一个余数代表二进制的最低位数码,不要弄反,另外对于小数
转换的除法实际上乘2求整的过程,第一个整数是小数点后第一位数码。
2)二进制数转化为十进制数的方法:利用基数按权展开公式可以转换。
3、十六进制数及其与二进制、十进制数的转换
1)十六进制数的引进:二进制数的识记对于人们是很不方便的,因此需要一种和二进制数转换容易并且方便人们识记的进制数,这样十六进制数和八进制数就引入了。
2)十六进制H和二进制B之间的转换方法:十六进制数的数码以4位二进制数表示,并且由于基数是16=24,可以方便的实现两种数制转换。
H→B,每位十六进制数转换为4位二进制数,并替换掉原来十六进制进制数即可,如35BFH转换成二进制数为0011010110111111B。
B→H,每4位二进制数转换为1位十六进制数,并替换掉原来二进制数即可,如二进制数1010000110011100B转换成十六进制数为A19CH。
3)十六进制数和十进制数之间的转换方法:和二进制数和十进制数间的转换方法一致,只是把基数从2换到16.
第二节二进制数和十六进制数的运算
1、二进制数运算:
1)加法规则:0+0=0;0+1=1;1+0=1;1+1=0(进位1)
2)乘法规则:0⨯0=0;0 ⨯1=0;1 ⨯0=0;1 ⨯1=1
2、十六进制数的运算:
十六进制的运算可以采用先把该十六进制数转换为十进制数,经过计算后再把结果转换为十六进制的方法,但是这样做比较繁琐。
其实只要按照逢十六进一的规则,直接用十六进制数来计算也是很方便的。
1)十六进制加法:当两个一位数之和S小于16时,与十进制数同样处理,如果两个一位数之和大于或等于16时,则应该用S-16及进位1来取代S。
例:05C3H+3D25H=42E8H
2)十六进制的减法:也与十进制数类似,够减时可直接相减,不够减时服从向高位借1为16的规则。
例:3D25H-05C3H=3762H
3)十六进制的乘法:可用十进制数的乘法规则来计算,但结果必须用十六进制数来表示。
第三节计算机中数和字符的表示
1、原码、反码和补码:
1)二进制数的原码:就是二进制数本身,反码是原码按位取反的结果
2)补码的概念的引入:计算机为什么要使用补码记数?我们知道几何上角A的补角就是(180-A),比如角A=150,那么它的补角就是30,我们记数不仅可通过通过A=150知道,而且也可以通过
(180-30)知道,而且后面的表示往往是更为方便的。
计算机中数码都不是用原码来表示的,而是用它的补码表示
3)求补码的方法:数X的补码=2N-[X]原码,其中2N就相当于上例中的三角和180,N是机器字长。
或者还可以求得X的反码再加一的方法实现。
4)求原码值:假如从计算机中得到一个二进制数,那么它一定是补码形式,可以用3)中的方法的逆过程求的这个数的原码值,即:2N-[x]补码=X的原码
或{[x]补码-1}反码=X的原码
5)正数的补码=它的原码=它的反码,负数的补码使用上述方法求得
6)符号扩展问题,计算机中常会用到符号扩展问题,比如机器字长从8位到16位,16位到32位,那么计算机符号扩展的原则是:正数高位补0
负数高位补1
7)补码表数的范围:N位补码范围是:
-2N-1~2N-1-1
对于8位补码情况,最高位0,低7位表数,最大值为:0111 1111,即27-1=127,最小数为-128,为1000 0000。
2、补码的加减法运算法则
1)两个公式:
[X]补码−
−→
−求补运算[X]补码(1)
−
−求补运算[-X]补码−
−
−→
[X+Y]补码=[X]补码+[Y]补码(2)
[X-Y]补码=[X]补码+[-Y]补码
2)区别补码和求补运算两个概念,如+5的补码就是0000 0101,但是+5的求补运算则是:0000 0101→1111 1010→1111 1011 比如32+(-25)=7,按上面公式计算:
[32+(-25)]补码=[32]补码+[(-25)]补码,利用上面公式(1),可以得到[-25]补码={[25]补码}求补,而25补码就是它本身。
如果把正数求补运算还理解成正数补码就是它本身的话,就会得到[-25]
的错位结论。
实际上 25的补码是:0001 1001 补码=[25]补码
25补码的求补运算是:1110 0110→1110 0111
所以32+(-25)=0010 0000+1110 0111=0000 111=7
3)熟悉ASCⅡ码的字符表示
第四节几种基本的逻辑运算
1、与运算
符号及真值表:∧,A∧B只有一种情况为真,即A,B都真时为真,其他情况为假。
2、或运运算
符号及真值表:∨,A∨B在A.B中有一个为真时即为真,A,B都假时才为假。
3、非运算
符号:---A
4、异或运算
符号及真值表:∀,A∀B在A,B取值相异时为真,相同时为假。
本周要求掌握的内容如下:
基本概念:基数、权、数制、数码的机器表示方式、补码的加减法运算法则、逻辑运算。
基本理论:数制间的转换方法,数码的各种码制间的转换方法,会用补码进行加减运算,熟悉四种逻辑运算真值表。
练习:
1、用降幂法和除法将下列十进制数字转换为二进制数:
(1)369 (2)4095 (3)2.54
2、将下列十六进制数转化为二进制数和十进制数:
(1)FA (2)5B (3)FFFE
3、将下列二进制数转化为十六进制数和十进制数:
(1)101101 (2)10000000 (3)11111111
4、用8位二进制补码计算下列题目,结果用十六进制数表示:
(1)(-85)+76 (2)85+(-76)(3)85-76
5、下列字符的ASCⅡ码是多少,A,a,回车(CR),换行(LF)?。