汇编语言程序设计-清华同方程序
####################################################################
2010年5月2日
第一章
基础知识
1.课前思考
(1) 计算机内部是采用什么计数制来表示数和信息的?
答:二进制
(2) 二进制数和十六进制数是如何相互转换的?
答:降幂
(3) 十进制数转换为二进制数有几种方法?
答:降幂
(4) 计算机中如何表示正负数的?
答:最高有效位来表示数的符号,正数为0表示,负数为1表示。
(5) 计算机中的整数有几种表示方法?最常用的是哪一种码制?
答:原码,反码,补码表示码, 最常用的是补码表示码
(6) 基本的逻辑运算包括哪几种运算?为什么说逻辑运算是按位操作的?
答:与AND,或OR,非NOT,异或XOR
逻辑运算本质就是两位二进制之间的运算,最小也是一个字节,逻辑运算是基于位的多位数运算.
(7) 求补的运算规则是什么?
答:[x+y]补=[x]补+[Y]补
[x-y]补=[X]补+[-Y]补
(8) 计算机中是采用什么代码来表示字符的?
答:ascii码
第一节 进位数制
1.1常用的有十进制,二进制,十六进制,八进制计数法等。
十进制基数是10,逢10进1。 范围0-9
二进制基数是2,逢2进1。 范围0-1
八进制基数是8,逢8进行。 范围0-7
十六进制基数是16,逢16进1。 范围0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
由于二制表示数不太方便(代码很长),所以经常采用十六进制表示法,4位二进制数可用1位16进制数来表示
1.2不同基数的数之间的转换
1.2.1二进制和十进制数之间的转换
各位二进制与其对应权值的乘积之和即为与该二进制数相对应的十进制数。
二进制:1 1 1 1 1 1 1 1B B代表二进制
十进制:128 64 32 16 8 4 2 1=255D D代表十进制
十六进制:FFH H代表十六进制
36096D转为二进制,十六进制
笨l办法算十进制转为二制:
0到31的2次方统计如下:
no:0 1
no:1 2
no:2 4
no:3 8
no:4 16
no:5 32
no:6 64
no:7 128
no:8 256
no:9 512
no:10 1024
no:11 2048
no:12 4096
no:13 8192
no:14 16384
no:15 32768
no:16 65536
no:17 131072
no:18 262144
no:19 524288
no:20 1048576
no:21 2097152
no:22 4194304
no:23 8388608
no:24 16777216
no:25 33554432
no:26 67108864
no:27 134217728
no:28 268435456
no:29 536870912
no:30 1073741824
no:31 2147483648
根据上表可以找到比36096D小的数是32768,对应上的数是第15为1
32768
1
36096-32768=3328
接着找比3328小的数11位的2048,对应上11位为1
2048
10001
3328-2048=1280
接着找1280小的数第10位1024,对应上10位为1
1024
100011
1280-1024=256
接着找256第8位为256,对应上第8位为1
10001101
接着后面的位数7-0补0 ,结果如下:
1000110100000000
二进制转十六进制:
以1000110100000000为例:
1000 1101 0000 0000
8 D 0 0
把每四位分开算出对应的十六进制,结果就是8D00
如果是十六进制转二进制,反过来算就OK了。
1.2.3.1 十六进制数转换为十进制数
各位十六进制数与其对应权值的乘积之和即为与该十六进制数相对应的十进制数。
例:8AB4H=8×16^3+10×16^2+11×16^1+4×16^0
=32768+2560+176+4
=35508D
1.3 二进制数和十六进制数的运算
二进制数的运算:
加法规则: 乘法规则:
0 + 0 = 0 0 0 = 0
0 + 1 = 1 0 1 = 0
1 + 0 = 1 1 0 = 0
1 + 1 = 0(进位1) 1 1 = 1
十六进制数的运算:十六进制的加、减、乘、除与十进制类似。
1.3.2 逻辑运算
所有的逻辑运算都是按位操作的。
与运算,AND 总结,见0为0,两1为1
或运算,OR 总结,见1为1,两0为0
非运算,NOT 总结,0绝对值1,1绝对值0
异或运算,XOR 总结,两操作数一样结果为0, 不一样就为1
例:X=00FFH,Y=5555H,Z1=X与Y,Z2=X或Y,Z3=非,Z4=X异或Y,求Z1、Z2、Z3、Z4的值。
解:X = 0000 0000 1111 1111
Y = 0101 0101 0101 0101
Z1= 0000 0000 0101 0101 = 0055H
Z2= 0101 0101 1111 1111 = 55FFH
Z3= 1111 1111 0000 0000 = FF00H
Z4= 0101 0101 1010 1010 = 55AAH
1.4 数和字符的表示
1.4.1 计算机中数的表示
1.4.1.1 补码表示法
计算机中的数和数的符号都是用二进制表示的,这样的数称为机器数。一般用最高有效位来表示数的符号,正数用0表示,负数用1表示。
机器数可用不同的码制来表示,常用的有原码、补码和反码表示法。
原码表示法:符号 + 绝对值
[-0]原=1000 0000 =80H 0的表示不唯一
反码表示法:正数的反码同原码,负数的反码数值位与原码相反
[-0]反=11111111=FFH 0的表示不唯一
补码表示法:多数机器的整数都采用补码表示法。
正数的补码表示:与原码表示相同
负数的补码表示:相应的正数按位求反,末位加1即为该负数的补码表示
求负数补码表示的方法:
(1)写出与该负数相对应的正数的补码
(2)按位求反
(3)末位加一
例:假设机器字长为8位,求-46的补码。
+ 46的补码表示为: 0010 1110
按位求反: 1101 0001
末位加一 1101 0010
所以,[-46]补码 = D2H
符号扩展:是指一个数从位数较少扩展到位数较多,如从8位扩展到16位,或从16位扩展到32位。
对于用补码表示的数,正数的符号扩展在前面补0,负数的符号扩展在前面补1,假设机器字长为16位,[+46]补码 = 002EH,[-46]补
码 = FFD2H
8位二进制数可以表示=256个数,16位二进制数可以表示=65536个数,当它们是补码表示的带符号数时,8位二进制的表数范围是 -128
--+127,
16位二进制的表数范围是 -32768 -- +32767。
1.4.1.3 补码的加、减法
例:假设机器字长为8位,计算25+(-32)
25的补码是0001 1001,-32的补码是1110 0000
0010 0000 32转二进制
1101 1111 按位取反
1110 0000 未位加1
0001 1001+1110 0000=1111 1001
结果相加1111 1001
例:仍假定机器字长为8位,计算32-(-25)
为把减法转换为加法,要对-25求补,实际上就是25的补码0001 1001, 32的补码是0010 0000
0010 0000+0001 1001=0011 1001
1.4.2 计算机中字符的表示
计算机除了处理数之外,还需要处理字符,字符在机器里也是用二进制数表示的。IBM PC机采用目前最常用的美国信息交换标准代码
ASCII(American Standard Code for Information Interchange)来表示。ASCII码用一个字节(8位二进制码)来表示一个字符,其中低7
位为字符的ASCII值,最高位一般用作校验位。
【本章小结】
1. 数制
计算机中的数字电路用电压的高低(或通断)表示两种状态0、1,所以计算机内部的所有信息都是采用二进制计数法。在书写程序时
,常采用二进制的短格式表示法:十六进制。
2. 数制之间的转换
二进制数和十六进制的转换是很直接的。一个二进制数,从低位到高位,每4位用一个数字来表示,就是相应的十六进制数,反之一个
十六进制数中的每一位用4位二进制数表示,就转换成相应的二进制数。
十六进制数的各位数与其对应权值(16i)的乘积之和即为其对应的是十进制数。十进制数转换为十六进制数可使用降幂法和除法。
3. 运算
二进制数的算术运算规则是逢二进一,十六进制数的运算规则是逢十六进一。
基本逻辑运算包括与(AND)、或(OR)、非(NOT)、异或(XOR),0、1代码为逻辑变量。
4. 数和字符的表示
计算机中的数是用二进制来表示,其最高有效位表示数的正负号。整数采用补码表示法。对一个二进制数按位求反后在末位加1的运算
称为求补运算。
补码的加法规则是:[X+Y]补=[X] 补+[Y] 补
补码的减法规则是:[X-Y] 补=[X] 补+[-Y] 补
计算机采用ASCII表示字符,每个字符占用一个字节。
课后习题
1 用降幂法或除法将下列十进制数转换为二进制数和十六进制数:
(1)369 101110001B;171H
(2)10000 10011100010000B; 2710H
(3)4096 1000000000000B; 1000H
(4)32767 111111111111111B; 7FFFH
2 将下列二进制数转换为十六进制数和十进制数:
(1)10 1101 2DH 45D
(2)1000 0000 80H 128D
(3)1111 1111 1111 1111 FFFFH 65535D
(4)1111 1111 FFH 255D
3 将下列十六进制数转换为二进制数和十进制数:
(1)FA 1111 1010B 250D
(2)5B 0101 1011B 91D
(3)FFFE 1111 1111 1111 1110B 65534D
(4)1234 0001 0010 0011 0100B 4660D
4 完成下列十六进制数的运算:
(1)3A+B7 =F1
(2)1234+AF = 12E3
(3)ABCD-FE =AACF
(4)7AB×6F = 35325H
7AB
* 6F
_______
十六 69 96 A5 //要记得逢十六进一
十六 2A 3C 42
_________________________
十六 35325H
另一种方法是转十进制后在计算7AB×6F = 1963*111=217893D=35325H
5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用是十六进制数表示其运算结果。
(1)(―85)+76= 1010 1011 + 0100 1100= 1111 0111 =0F7H
(2)85+(―76) = 0101 0101+ 1011 0100 = 1 0000 1001=109H=按8位存放=9H
(3)85―76 =0101 0101-0100 1100=0000 1001=9H
0101 0101
-0100 1100 //借1当2在减一
—————
0000 1001
(4)85―(―76) =01010101+10110100=0A1H
(5)(―85)―76 =
(6)―85―(―76)
6 下列各数为十六进制表示的8位二进制数,请说明当它们被看作是用补码表示的带符号数时,它们所表示的十进制数是什么?
(1)D8
(2)FF
7 当1. 6题的两数被看作是用补码表示的无符号数时,它们所表示的十进制数是什么?
(1)D8
(2)FF
8 下列各数为十六进制表示的8位二进制数,请说明当它们被看作是用补码表示的数时,它们所表示的十进制数是什么?
(1)4F
(2)2B
(3)73
(4)59
9 当1. 8题的4个数被看作是字符的ASCII码时,它们所表示的字符是什么?
(1)4F
(2)2B
(3)73
(4)59
10 请写出下列字符串的ASCII码。
For example,
This is a number 3692.