汇编学习笔记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 结果一样,运算正确。

原文地址:https://www.cnblogs.com/hailong/p/Assembly1.html