汇编学习笔记1
现在试图学习汇编了。为了加深印象,所以准备在博客园写总结。鄙人非计算机专业出身,编程两年有余,基础却总是不劳,此次学习,就当是补基础了。
有写错的地方,欢迎大家指证。
具体做法是今天看了视频,明天写今天的总结
规则:
卡住记不起来的,以红色表示
学习的途径是中山大学汇编学习视频,昨天看了第一讲,主要是数据的介绍,包含几方面的内容:
1. 数据的表示方法,以不同后缀表示,常用方法是在二进制数后加B,在十进制数后加D,在十六进制数后加H,八进制数后加O。
2. 数据的转换,十进制数转换为2进制数,16进制数,使用余数法。2进制数,16进制数转换为10进制数,采用加权法。2进制数与16进制数转换,名字不记得了,分段展开或收缩。
3. 整数的表示方法,常用有原码,反码,补码。一般正数使用原码,负数采用补码来表示。对有符号整数,最高位表示符号位。
4. 对8位系统,有符号整数的范围为-2^7 ~ 2^7-1,即为-128~127,无符号整数的范围为0~2^8-1,即为0~255。
对16位系统,有符号整数的范围为-2^15~2^15-1,即为-32768~32767,无符号整数的范围为0~2^16-1,即为0~65535。
数据表示:
二进制数: 01001110B
八进制数: 25O
十进制数: 43D
十六进制数: 3E8FH
数据转换:
B->D: 01011101B (加权法)
76543210
0 * 2^7 + 1 * 2^6 + 0 * 2^5 + 1 * 2^4 +... =2^6 + 2^4 + 2^3 + 2^2 + 2^0 = 64 + 16 + 8 + 4 + 1 = 93D
01011101B = 93D
H->D: 3F9H (加权法)
210
3 * 16^2 + F(15) * 16^1 + 9 * 16^0 = 768 + 240 + 144 = 1152D
3F9H = 1152D
D->B: 178D (余数法)
178/2 = 89(0) /2 = 44(1) /2 = 22(0) /2 = 11(0) /2 = 5(1) /2 = 2(1) /2 = 1(0) /2 = 0(1)
178D = 10110010B
D->H: 178D (余数法)
178/16 = 11(2) /16 = 0(11)
178D = (11)(2)H = B2H
B->H: 10010111B (分段)
1001 0111
9 7
10010111B = 97H
H->B: 82CH
8 ->1000 2->0010 C->1100
82CH = 100000101100B
整数表示:(8位)
有符号整数正数采用原码, 如 十进制整数 75D,转换为二进制数为 01001011B,因为是正数,最高位为0,结果为 0100 1011B
负数采用补码,如十进制整数 -75D,75D 转换为二进制整数为 0100 1011B,取反后为 1011 0100B,最后一位补1,为 1011 0101B。于是-75D 表示为 1011 0100B
无符号整数采用原码,如十进制数200D,转换为二进制数为 1100 1100B,于是结果为 1100 1100B
对一个二进制数 补码 后的二进制数 再次补码,结果为原二进制数,如对 1011 0110B取补码,结果为 0100 1010, 再次取补,结果为 1011 0110。
昨天看的似乎也就是这些东西了。。全凭记忆来写,除了红色的部分实在想不起来,查了下资料。
没想到只是总结一下,就写了一个小时。看来,还有待提高才是。
PS: 看了第二讲,在第二讲开头复习的时候,发现果然有些问题没回忆起来。
1. 整数二进制位的扩展
2. 整数的加减法
要将8位二进制整数扩展为16位二进制数时,
如果是无符号整数,在前边补8个0
如果是有符号整数,且是正数,即第7位为0,则在前边补8个0
如果是有符号整数,且是负数,即第7位是1,则在前边补8个1
例: 无符号数280D的8位二进制表示为 1001 1000B,扩展为16位二进制数,在前边补8个0,即为 0000 0000 1001 1000B。
有符号数110D的8位二进制表示为 0110 1110B,扩展为16位二进制数,因为是正数,在前边补8个0,即为 0000 0000 0110 1110B。
有符号数-110D的8位二进制表示为 1001 0010B, 扩展为16位二进制数,因为是负数,在前边补8个1,即为 1111 1111 1001 0010B。 对 1111 1111 1001 0010B 进行取补,得到 0000 0000 0110 1110B, 为110D。
有符号整数的补码加减法
由于补码的补码是自身,二进制数的相减,即为加补码。如 80D - 99D, 80D = 0101 0000B, 99D = 0110 0011B, -99D = 1001 1101B。
80D - 99D = 80D + (-99D) = 0101 0000B + 1001 1101B = 1110 1101B = -19D,与 80D-99D = -19D 结果一样,运算正确。