<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Macos on pemako</title>
    <link>http://pemako.cn/tags/macos/</link>
    <description>Recent content in Macos on pemako</description>
    <image>
      <title>pemako</title>
      <url>http://pemako.cn/images/papermod-cover.png</url>
      <link>http://pemako.cn/images/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.146.6</generator>
    <language>en</language>
    <lastBuildDate>Thu, 09 Apr 2026 20:00:00 +0800</lastBuildDate>
    <atom:link href="http://pemako.cn/tags/macos/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>macOS 汇编</title>
      <link>http://pemako.cn/posts/macos-assembly/</link>
      <pubDate>Thu, 09 Apr 2026 20:00:00 +0800</pubDate>
      <guid>http://pemako.cn/posts/macos-assembly/</guid>
      <description>&lt;h3 id=&#34;十进制与二进制的相互转换&#34;&gt;十进制与二进制的相互转换&lt;/h3&gt;
&lt;h4 id=&#34;十进制转为二进制分为整数部分和小数部分&#34;&gt;十进制转为二进制，分为整数部分和小数部分&lt;/h4&gt;
&lt;p&gt;整数部分采用除 2 倒取余法: 用2去除十进制整数，可以得到一个商和余数；在用2去除商，又会得到一个商和余数，如此进行，知道商为0时为止，然后把先的到的余数作为二进制的低位有效位，后得到的余数作为二进制数的高位有效位，依次排列起来。&lt;/p&gt;
&lt;p&gt;小数部分采用乘2取整法，具体做法：用2乘十进制小数，可以得到积，将积中的整数部分取出，在用2乘余下的小数部分，又得到一个积，在将积中的整数部分取出，如此进行，直到积中的小数部分为0，此时0或1为二进制的最后一位，或者达到所要求的精度为止，然后把取出的整数部分按顺序排列起来，先取得整数作为二进制小数的最高位有效位，后取的整数作为低位有效位。&lt;/p&gt;
&lt;h4 id=&#34;二进制转为十进制&#34;&gt;二进制转为十进制&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;按权相加法&lt;/strong&gt;，即将二进制每位上的数乘以权，然后相加之和即是十进制数&lt;/p&gt;
&lt;h3 id=&#34;预备知识&#34;&gt;预备知识&lt;/h3&gt;
&lt;p&gt;由于计算机的硬件决定，&lt;strong&gt;任何存储于计算机中的数据，其本质都是以二进制码存储&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;根据冯·诺依曼提出的经典计算机体系结构框架，一台计算机由运算器、控制器、存储器、输入和输出设备组成。其中运算器&lt;strong&gt;只有加法运算器&lt;/strong&gt;，没有减法运算器（据说一开始是有的，后来由于减法运算器硬件开销太大，被废了）。&lt;/p&gt;
&lt;p&gt;所以计算机中没办法直接做减法的，它的减法是通过加法实现的。现实世界中所有的减法也可以当成加法的，减去一个数可以看作加上这个数的相反数，但前提是要先有负数的概念，这就是为什么不得不引入一个符号位。&lt;strong&gt;符号位在内存中存放的最左边一位，如果该位为0，则说明该数为正；若为1，则说明该数为负。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而且从硬件的角度上看，只有正数加负数才算减法，正数与正数相加，负数与负数相加，其实都可以通过加法器直接相加。&lt;/p&gt;
&lt;p&gt;原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。&lt;/p&gt;
&lt;h3 id=&#34;原码&#34;&gt;原码&lt;/h3&gt;
&lt;p&gt;原码：&lt;strong&gt;是最简单的机器数表示法，用最高位表示符号位，其他位存放该数的二进制的绝对值&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;以带符号位的四位二进制数为例：1010，最高位为1表示这是一个负数，其它三位010，即0&lt;em&gt;2^2+1&lt;/em&gt;2^1+0*2^0=2，所以1010表示十进制数-2。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;正数&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;负数&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0000&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-0&lt;/td&gt;
          &lt;td&gt;1000&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0001&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-1&lt;/td&gt;
          &lt;td&gt;1001&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;0010&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-2&lt;/td&gt;
          &lt;td&gt;1010&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td&gt;0011&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-3&lt;/td&gt;
          &lt;td&gt;1011&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4&lt;/td&gt;
          &lt;td&gt;0100&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-4&lt;/td&gt;
          &lt;td&gt;1100&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5&lt;/td&gt;
          &lt;td&gt;0101&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-5&lt;/td&gt;
          &lt;td&gt;1101&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;6&lt;/td&gt;
          &lt;td&gt;0110&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-6&lt;/td&gt;
          &lt;td&gt;1110&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;7&lt;/td&gt;
          &lt;td&gt;0111&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-7&lt;/td&gt;
          &lt;td&gt;1111&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;原码的表示法很简单，虽然出现了+0和-0，但是直观易懂。于是开始运算 &amp;mdash;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;0001 + 0010 = 0011,  1+2=3;
0000 + 1000= 1000, +0+(-0)=-0;
0001 + 1001=1010, 1+(-1)=-2&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
