有过梦想 發表於 2021-5-6 13:14:00

汇编语言学习笔记(二)汇编语言程序设计指南

<p>汇编语言的数据表示<br>
汇编语言主要目的是处理物理级的数据,所以必须要有操作检查寄存器的权利。一般情况下,二进制数被用于描述计算机内存的内容;有时也使用十进制和十六进制数。所以必须熟练掌握数字格式,以便快速地进行数字的格式转换。<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505225822749-1231687878.png" alt="" loading="lazy"></p>
<p>二级制:<br>
计算机以电子电荷集合的形式在内存中保存指令和数据。用数字来表示这些内容就需要系统能够适应开/关(on/off)或真/假(true/false)的概念。<br>
这里有想法的同学,也可以把计算机的真假概念对应到我国古典易经所述的阴阳学,古典有云,太极生两仪,两仪生万物,正因为原始属性上的高度相似,才使得计算机可以发展到覆盖现实生活的方方面面。<br>
位自右向左,从 0 开始顺序增量编号。左边的位称为最高有效位(Most Significant Bit, MSB)右边的位称为最低有效位(LSB, least significant bit)。一个 16 位的二进制数,其 MSB 和 LSB 如下图所示:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505230213602-1814157476.png" alt="" loading="lazy"><br>
两个二进制整数相加时,是位对位处理的,从最低的一对位(右边)开始,依序将每一对位进行加法运算。两个二进制数字相加,有四种结果,如下所示:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505230602785-447271787.png" alt="" loading="lazy"><br>
1 与 1 相加的结果是二进制的 10(等于十进制的 2)。多出来的数字向更高位产生一个进位。如下图所示,两个二进制数 0000 0100 和 0000 0111 相加:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505230629627-1689188180.png" alt="" loading="lazy"></p>
<p>字节(byte)<br>
在X86计算机中,所有数据存储的基本单位都是字节(byte),一个字节有8位。其他的存储单位还有字word(2 个字节),双字(4 个字节)和四字(quadword)(8 个字节)。</p>
<pre><code>下表列出了所有无符号整数可能的取值范围:
![](https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505232500907-1419193310.png)
</code></pre>
<p>大的度量单位对内存和磁盘空间而言,还可以使用大的度量单位:<br>
1 千字节(kilobyte)等于 2^10,或 1024 个字节。<br>
1 兆字节(megabyte)(1MB)等于 2^20,或 1 048 576 字节。<br>
1 吉字节(gigabyte)(1GB)等于 2^30 即 10243,或 1 073 741 824 字节。<br>
1 太字节(terabyte)(1TB)等于 2^40,即 10244,或 1 099 511 627 776 字节。<br>
1 拍字节(petabyte)等于 2^50,或 1 125 899 906 842 624 字节。<br>
1 艾字节(exabyte)等于 2^60,或 1 152 921 504 606 846 976 字节。<br>
1 泽字节(zettabyte)等于 2^70 个字节。<br>
1 尧字节(yottabyte)等于 2^80 个字节。</p>
<p>补码及进制转换<br>
有符号二进制整数有正数和负数。在 x86 处理器中,MSB 表示的是符号位:0 表示正数,1 表示负数。下图展示了 8 位的正数和负数:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505232708004-1900943675.png" alt="" loading="lazy"></p>
<p>补码表示<br>
负整数用补码(two`s-complement)表示时,使用的数学原理是:一个整数的补码是其加法逆元。(如果将一个数与其加法逆元相加,结果为 0)<br>
补码表示法对处理器设计者来说很有用,因为有了它就不需要用两套独立的电路来处理加法和减法。例如,如果表达式为 A-B,则处理器就可以很方便地将其转换为加法表达式:A+(-B)。<br>
将一个二进制整数按位取反(求补)再加 1,就形成了它的补码。以 8 位二进制数 0000 0001 为例,求其补码为 1111 1111,过程如下所示:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505232831827-810014807.png" alt="" loading="lazy"></p>
<p>十六进制数的补码<br>
将一个十六进制整数按位取反并加 1,就生成了它的补码。一个简单的十六进制数字取反方法就是用 15 减去该数字。下面是一些十六进制数求补码的例子:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210505233247109-1350252565.png" alt="" loading="lazy"><br>
有符号二进制数到十进制的转换<br>
用下面的算法计算一个有符号二进制整数的十进制数值:<br>
如果最高位是 1,则该数是补码。再次对其求补,得到其正数值。然后把这个数值看作是一个无符号二进制整数,并求它的十进制数值。<br>
如果最高位是 0,就将其视为无符号二进制整数,并转换为十进制数。<br>
例如,有符号二进制数 1111 0000 的最高有效位是 1,这意味着它是一个负数,首先要求它的补码,然后再将结果转换为十进制。过程如下所示:<br>
<img src="https://img2020.cnblogs.com/blog/2065008/202105/2065008-20210506004057013-1533359174.png" alt="" loading="lazy"><br>
由于初始值(1111 0000)是负数,因此其十进制数值为 -16。<br>
有符号十进制数到二进制的转换<br>
有符号十进制整数转换为二进制的步骤如下:<br>
把十进制整数的绝对值转换为二进制数。<br>
如果初始十进制数是负数,则在第 1 步的基础上,求该二进制数的补码。<br>
比如,十进制数 -43 转换为二进制的过程为:<br>
1) 无符号数 43 的二进制表示为 0010 1011。<br>
2) 由于初始数值是负数,因此,求出 0010 1011 的补码 1101 0101 这就是十进制数 -43 的二进制表示。</p><br><br>
来源:https://www.cnblogs.com/badbear/p/14734696.html
頁: [1]
查看完整版本: 汇编语言学习笔记(二)汇编语言程序设计指南