虚幻期待 發表於 2021-11-1 22:46:00

汇编语言指令大全(详细)

<div class="blog-content-box">
      <div class="article-header-box">
      <div class="article-header">
            <div class="article-title-box">
                <h1 class="title-article" id="articleContentId"></h1>
            </div>
            <div class="article-info-box">
                <div class="article-bar-top">
                  <img class="article-type-img lazyload" alt="" data-src="https://csdnimg.cn/release/blogv2/dist/pc/img/original.png">
                  <div class="bar-content">
                  gxg1978
                  <span class="time">2013-05-09 11:31:43</span>
                  <img class="article-read-img article-heard-img lazyload" alt="" data-src="https://csdnimg.cn/release/blogv2/dist/pc/img/articleReadEyes.png">
                  <span class="read-count">18149</span>
                  
                        <img class="article-collect-img article-heard-img un-collect-status isdefault lazyload" style="display: inline-block" alt="" data-src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollect.png">
                        <img class="article-collect-img article-heard-img collect-status isactive lazyload" style="display: none" alt="" data-src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive.png">
                        <span class="name">收藏</span>
                        <span class="get-collection">
                            366
                        </span>
                  
                  </div>
                </div>
                <div class="blog-tags-box">
                  <div class="tags-box artic-tag-box">
                            <span class="label">分类专栏:</span>
                              汇编
                            <span class="label">文章标签:</span>
                              汇编语言
                              指针
                              指令
                  </div>
                </div>
                <div class="slide-content-box">
                  <div class="article-copyright">
                        <div class="creativecommons">
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        </div>
                        <div class="article-source-link">
                            本文链接:https://blog.csdn.net/linlibest/article/details/8904624
                        </div>
                  </div>
                </div>
                <div class="operating">
<pre><code>                汇编语言指令大全
</code></pre>
<p></p>
<pre><code class="language-swift"><span class="hljs-number">8080</span>汇编手册数据传输指令
<span class="hljs-operator">──────────────────────────────</span>
它们在存贮器和寄存器<span class="hljs-operator">、</span>寄存器和输入输出端口之间传送数据<span class="hljs-operator">。</span>
<span class="hljs-number">1</span><span class="hljs-operator">。</span> 通用数据传送指令<span class="hljs-operator">。</span>
<span class="hljs-type">MOV</span> 传送字或字节<span class="hljs-operator">。</span>
<span class="hljs-type">MOVSX</span> 先符号扩展,再传送<span class="hljs-operator">。</span>
<span class="hljs-type">MOVZX</span> 先零扩展,再传送<span class="hljs-operator">。</span>
<span class="hljs-type">PUSH</span> 把字压入堆栈<span class="hljs-operator">。</span>
<span class="hljs-type">POP</span> 把字弹出堆栈<span class="hljs-operator">。</span>
<span class="hljs-type">PUSHA</span> 把<span class="hljs-type">AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈</span><span class="hljs-operator">。</span>
<span class="hljs-type">POPA</span> 把<span class="hljs-type">DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈</span><span class="hljs-operator">。</span>
<span class="hljs-type">PUSHAD</span> 把<span class="hljs-type">EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈</span><span class="hljs-operator">。</span>
<span class="hljs-type">POPAD</span> 把<span class="hljs-type">EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈</span><span class="hljs-operator">。</span>
<span class="hljs-type">BSWAP</span> 交换<span class="hljs-number">32</span>位寄存器里字节的顺序
<span class="hljs-type">XCHG</span> 交换字或字节<span class="hljs-operator">。</span>( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
<span class="hljs-type">CMPXCHG</span> 比较并交换操作数<span class="hljs-operator">。</span>( 第二个操作数必须为累加器<span class="hljs-type">AL</span><span class="hljs-operator">/</span><span class="hljs-type">AX</span><span class="hljs-operator">/</span><span class="hljs-type">EAX</span> )
<span class="hljs-type">XADD</span> 先交换再累加<span class="hljs-operator">。</span>( 结果在第一个操作数里 )
<span class="hljs-type">XLAT</span> 字节查表转换<span class="hljs-operator">。</span>
<span class="hljs-operator">──</span> <span class="hljs-type">BX</span> 指向一张 <span class="hljs-number">256</span> 字节的表的起点, <span class="hljs-type">AL</span> 为表的索引值 (<span class="hljs-number">0</span><span class="hljs-operator">-</span><span class="hljs-number">255</span>,即
<span class="hljs-number">0</span><span class="hljs-operator">-</span><span class="hljs-type">FFH</span>); 返回 <span class="hljs-type">AL</span> 为查表结果<span class="hljs-operator">。</span> ( [<span class="hljs-type">BX</span><span class="hljs-operator">+</span><span class="hljs-type">AL</span>]-&gt;<span class="hljs-type">AL</span> )
<span class="hljs-number">2</span><span class="hljs-operator">。</span> 输入输出端口传送指令<span class="hljs-operator">。</span>
<span class="hljs-type">IN</span> <span class="hljs-type">I</span><span class="hljs-operator">/</span><span class="hljs-type">O端口输入</span><span class="hljs-operator">。</span> ( 语法: <span class="hljs-type">IN</span> 累加器, {端口号<span class="hljs-operator">│</span><span class="hljs-type">DX</span>} )
<span class="hljs-type">OUT</span> <span class="hljs-type">I</span><span class="hljs-operator">/</span><span class="hljs-type">O端口输出</span><span class="hljs-operator">。</span> ( 语法: <span class="hljs-type">OUT</span> {端口号<span class="hljs-operator">│</span><span class="hljs-type">DX</span>},累加器 )
输入输出端口由立即方式指定时, 其范围是 <span class="hljs-number">0</span><span class="hljs-operator">-</span><span class="hljs-number">255</span>; 由寄存器 <span class="hljs-type">DX</span> 指定时,
其范围是 <span class="hljs-number">0</span><span class="hljs-operator">-</span><span class="hljs-number">65535</span><span class="hljs-operator">。</span>
<span class="hljs-number">3</span><span class="hljs-operator">。</span> 目的地址传送指令<span class="hljs-operator">。</span>
<span class="hljs-type">LEA</span> 装入有效地址<span class="hljs-operator">。</span>
例: <span class="hljs-type">LEA</span> <span class="hljs-type">DX,string</span> ;把偏移地址存到<span class="hljs-type">DX</span><span class="hljs-operator">。</span>
<span class="hljs-type">LDS</span> 传送目标指针,把指针内容装入<span class="hljs-type">DS</span><span class="hljs-operator">。</span>
例: <span class="hljs-type">LDS</span> <span class="hljs-type">SI,string</span> ;把段地址:偏移地址存到<span class="hljs-type">DS</span>:<span class="hljs-type">SI</span><span class="hljs-operator">。</span>
<span class="hljs-type">LES</span> 传送目标指针,把指针内容装入<span class="hljs-type">ES</span><span class="hljs-operator">。</span>
例: <span class="hljs-type">LES</span> <span class="hljs-type">DI,string</span> ;把段地址:偏移地址存到<span class="hljs-type">ES</span>:<span class="hljs-type">DI</span><span class="hljs-operator">。</span>
<span class="hljs-type">LFS</span> 传送目标指针,把指针内容装入<span class="hljs-type">FS</span><span class="hljs-operator">。</span>
例: <span class="hljs-type">LFS</span> <span class="hljs-type">DI,string</span> ;把段地址:偏移地址存到<span class="hljs-type">FS</span>:<span class="hljs-type">DI</span><span class="hljs-operator">。</span>
<span class="hljs-type">LGS</span> 传送目标指针,把指针内容装入<span class="hljs-type">GS</span><span class="hljs-operator">。</span>
例: <span class="hljs-type">LGS</span> <span class="hljs-type">DI,string</span> ;把段地址:偏移地址存到<span class="hljs-type">GS</span>:<span class="hljs-type">DI</span><span class="hljs-operator">。</span>
<span class="hljs-type">LSS</span> 传送目标指针,把指针内容装入<span class="hljs-type">SS</span><span class="hljs-operator">。</span>
例: <span class="hljs-type">LSS</span> <span class="hljs-type">DI,string</span> ;把段地址:偏移地址存到<span class="hljs-type">SS</span>:<span class="hljs-type">DI</span><span class="hljs-operator">。</span>
<span class="hljs-number">4</span><span class="hljs-operator">。</span> 标志传送指令<span class="hljs-operator">。</span>
<span class="hljs-type">LAHF</span> 标志寄存器传送,把标志装入<span class="hljs-type">AH</span><span class="hljs-operator">。</span>
<span class="hljs-type">SAHF</span> 标志寄存器传送,把<span class="hljs-type">AH内容装入标志寄存器</span><span class="hljs-operator">。</span>
<span class="hljs-type">PUSHF</span> 标志入栈<span class="hljs-operator">。</span>
<span class="hljs-type">POPF</span> 标志出栈<span class="hljs-operator">。</span>
<span class="hljs-type">PUSHD</span> <span class="hljs-number">32</span>位标志入栈<span class="hljs-operator">。</span>
<span class="hljs-type">POPD</span> <span class="hljs-number">32</span>位标志出栈<span class="hljs-operator">。</span>
二<span class="hljs-operator">、</span>算术运算指令
<span class="hljs-operator">──────────────────────────────</span>
<span class="hljs-type">ADD</span> 加法<span class="hljs-operator">。</span>
<span class="hljs-type">ADC</span> 带进位加法<span class="hljs-operator">。</span>
<span class="hljs-type">INC</span> 加 <span class="hljs-number">1</span><span class="hljs-operator">。</span>
<span class="hljs-type">AAA</span> 加法的<span class="hljs-type">ASCII码调整</span><span class="hljs-operator">。</span>
<span class="hljs-type">DAA</span> 加法的十进制调整<span class="hljs-operator">。</span>
<span class="hljs-type">SUB</span> 减法<span class="hljs-operator">。</span>
<span class="hljs-type">SBB</span> 带借位减法<span class="hljs-operator">。</span>
<span class="hljs-type">DEC</span> 减 <span class="hljs-number">1</span><span class="hljs-operator">。</span>
<span class="hljs-type">NEC</span> 求反(以 <span class="hljs-number">0</span> 减之)<span class="hljs-operator">。</span>
<span class="hljs-type">CMP</span> 比较<span class="hljs-operator">。</span>(两操作数作减法,仅修改标志位,不回送结果)<span class="hljs-operator">。</span>
<span class="hljs-type">AAS</span> 减法的<span class="hljs-type">ASCII码调整</span><span class="hljs-operator">。</span>
<span class="hljs-type">DAS</span> 减法的十进制调整<span class="hljs-operator">。</span>
<span class="hljs-type">MUL</span> 无符号乘法<span class="hljs-operator">。</span>
<span class="hljs-type">IMUL</span> 整数乘法<span class="hljs-operator">。</span>
以上两条,结果回送<span class="hljs-type">AH和AL</span>(字节运算),或<span class="hljs-type">DX和AX</span>(字运算),
<span class="hljs-type">AAM</span> 乘法的<span class="hljs-type">ASCII码调整</span><span class="hljs-operator">。</span>
<span class="hljs-type">DIV</span> 无符号除法<span class="hljs-operator">。</span>
<span class="hljs-type">IDIV</span> 整数除法<span class="hljs-operator">。</span>
以上两条,结果回送:
商回送<span class="hljs-type">AL,余数回送AH,</span> (字节运算);
或 商回送<span class="hljs-type">AX,余数回送DX,</span> (字运算)<span class="hljs-operator">。</span>
<span class="hljs-type">AAD</span> 除法的<span class="hljs-type">ASCII码调整</span><span class="hljs-operator">。</span>
<span class="hljs-type">CBW</span> 字节转换为字<span class="hljs-operator">。</span> (把<span class="hljs-type">AL中字节的符号扩展到AH中去</span>)
<span class="hljs-type">CWD</span> 字转换为双字<span class="hljs-operator">。</span> (把<span class="hljs-type">AX中的字的符号扩展到DX中去</span>)
<span class="hljs-type">CWDE</span> 字转换为双字<span class="hljs-operator">。</span> (把<span class="hljs-type">AX中的字符号扩展到EAX中去</span>)
<span class="hljs-type">CDQ</span> 双字扩展<span class="hljs-operator">。</span> (把<span class="hljs-type">EAX中的字的符号扩展到EDX中去</span>)
三<span class="hljs-operator">、</span>逻辑运算指令
<span class="hljs-operator">────────────────────────────</span>
<span class="hljs-type">AND</span> 与运算<span class="hljs-operator">。</span>
<span class="hljs-type">OR</span> 或运算<span class="hljs-operator">。</span>
<span class="hljs-type">XOR</span> 异或运算<span class="hljs-operator">。</span>
<span class="hljs-type">NOT</span> 取反<span class="hljs-operator">。</span>
<span class="hljs-type">TEST</span> 测试<span class="hljs-operator">。</span>(两操作数作与运算,仅修改标志位,不回送结果)<span class="hljs-operator">。</span>
<span class="hljs-type">SHL</span> 逻辑左移<span class="hljs-operator">。</span>
<span class="hljs-type">SAL</span> 算术左移<span class="hljs-operator">。</span>(<span class="hljs-operator">=</span><span class="hljs-type">SHL</span>)
<span class="hljs-type">SHR</span> 逻辑右移<span class="hljs-operator">。</span>
<span class="hljs-type">SAR</span> 算术右移<span class="hljs-operator">。</span>(<span class="hljs-operator">=</span><span class="hljs-type">SHR</span>)
<span class="hljs-type">ROL</span> 循环左移<span class="hljs-operator">。</span>
<span class="hljs-type">ROR</span> 循环右移<span class="hljs-operator">。</span>
<span class="hljs-type">RCL</span> 通过进位的循环左移<span class="hljs-operator">。</span>
<span class="hljs-type">RCR</span> 通过进位的循环右移<span class="hljs-operator">。</span>
以上八种移位指令,其移位次数可达<span class="hljs-number">255</span>次<span class="hljs-operator">。</span>
移位一次时, 可直接用操作码<span class="hljs-operator">。</span> 如 <span class="hljs-type">SHL</span> <span class="hljs-type">AX,1</span><span class="hljs-operator">。</span>
移位<span class="hljs-operator">&gt;</span><span class="hljs-number">1</span>次时, 则由寄存器<span class="hljs-type">CL给出移位次数</span><span class="hljs-operator">。</span>
如 <span class="hljs-type">MOV</span> <span class="hljs-type">CL,04</span>
<span class="hljs-type">SHL</span> <span class="hljs-type">AX,CL</span>
四<span class="hljs-operator">、</span>串指令
<span class="hljs-operator">───────────────────────────</span>
<span class="hljs-type">DS</span>:<span class="hljs-type">SI</span> 源串段寄存器 :源串变址<span class="hljs-operator">。</span>
<span class="hljs-type">ES</span>:<span class="hljs-type">DI</span> 目标串段寄存器:目标串变址<span class="hljs-operator">。</span>
<span class="hljs-type">CX</span> 重复次数计数器<span class="hljs-operator">。</span>
<span class="hljs-type">AL</span><span class="hljs-operator">/</span><span class="hljs-type">AX</span> 扫描值<span class="hljs-operator">。</span>
<span class="hljs-type">D标志</span> <span class="hljs-number">0</span>表示重复操作中<span class="hljs-type">SI和DI应自动增量</span>; <span class="hljs-number">1</span>表示应自动减量<span class="hljs-operator">。</span>
<span class="hljs-type">Z标志</span> 用来控制扫描或比较操作的结束<span class="hljs-operator">。</span>
<span class="hljs-type">MOVS</span> 串传送<span class="hljs-operator">。</span>
( <span class="hljs-type">MOVSB</span> 传送字符<span class="hljs-operator">。</span> <span class="hljs-type">MOVSW</span> 传送字<span class="hljs-operator">。</span> <span class="hljs-type">MOVSD</span> 传送双字<span class="hljs-operator">。</span> )
<span class="hljs-type">CMPS</span> 串比较<span class="hljs-operator">。</span>
( <span class="hljs-type">CMPSB</span> 比较字符<span class="hljs-operator">。</span> <span class="hljs-type">CMPSW</span> 比较字<span class="hljs-operator">。</span> )
<span class="hljs-type">SCAS</span> 串扫描<span class="hljs-operator">。</span>
把<span class="hljs-type">AL或AX的内容与目标串作比较,比较结果反映在标志位</span><span class="hljs-operator">。</span>
<span class="hljs-type">LODS</span> 装入串<span class="hljs-operator">。</span>
把源串中的元素(字或字节)逐一装入<span class="hljs-type">AL或AX中</span><span class="hljs-operator">。</span>
( <span class="hljs-type">LODSB</span> 传送字符<span class="hljs-operator">。</span> <span class="hljs-type">LODSW</span> 传送字<span class="hljs-operator">。</span> <span class="hljs-type">LODSD</span> 传送双字<span class="hljs-operator">。</span> )
<span class="hljs-type">STOS</span> 保存串<span class="hljs-operator">。</span>
是<span class="hljs-type">LODS的逆过程</span><span class="hljs-operator">。</span>
<span class="hljs-type">REP</span> 当<span class="hljs-type">CX</span><span class="hljs-operator">/</span><span class="hljs-type">ECX</span>&lt;&gt;<span class="hljs-number">0</span>时重复<span class="hljs-operator">。</span>
<span class="hljs-type">REPE</span><span class="hljs-operator">/</span><span class="hljs-type">REPZ</span> 当<span class="hljs-type">ZF</span><span class="hljs-operator">=</span><span class="hljs-number">1</span>或比较结果相等,且<span class="hljs-type">CX</span><span class="hljs-operator">/</span><span class="hljs-type">ECX</span>&lt;&gt;<span class="hljs-number">0</span>时重复<span class="hljs-operator">。</span>
<span class="hljs-type">REPNE</span><span class="hljs-operator">/</span><span class="hljs-type">REPNZ</span> 当<span class="hljs-type">ZF</span><span class="hljs-operator">=</span><span class="hljs-number">0</span>或比较结果不相等,且<span class="hljs-type">CX</span><span class="hljs-operator">/</span><span class="hljs-type">ECX</span>&lt;&gt;<span class="hljs-number">0</span>时重复<span class="hljs-operator">。</span>
<span class="hljs-type">REPC</span> 当<span class="hljs-type">CF</span><span class="hljs-operator">=</span><span class="hljs-number">1</span>且<span class="hljs-type">CX</span><span class="hljs-operator">/</span><span class="hljs-type">ECX</span>&lt;&gt;<span class="hljs-number">0</span>时重复<span class="hljs-operator">。</span>
<span class="hljs-type">REPNC</span> 当<span class="hljs-type">CF</span><span class="hljs-operator">=</span><span class="hljs-number">0</span>且<span class="hljs-type">CX</span><span class="hljs-operator">/</span><span class="hljs-type">ECX</span>&lt;&gt;<span class="hljs-number">0</span>时重复<span class="hljs-operator">。</span>
五<span class="hljs-operator">、</span>程序转移指令
<span class="hljs-operator">──────────────────────────</span>
<span class="hljs-number">1</span><span class="hljs-operator">&gt;</span>无条件转移指令 (长转移)
<span class="hljs-type">JMP</span> 无条件转移指令
<span class="hljs-type">CALL</span> 过程调用
<span class="hljs-type">RET</span><span class="hljs-operator">/</span><span class="hljs-type">RETF过程返回</span><span class="hljs-operator">。</span>
<span class="hljs-number">2</span><span class="hljs-operator">&gt;</span>条件转移指令 (短转移,<span class="hljs-operator">-</span><span class="hljs-number">128</span>到<span class="hljs-operator">+</span><span class="hljs-number">127</span>的距离内)
( 当且仅当(<span class="hljs-type">SF</span> <span class="hljs-type">XOR</span> <span class="hljs-type">OF</span>)<span class="hljs-operator">=</span><span class="hljs-number">1</span>时,<span class="hljs-type">OP1</span> <span class="hljs-type">JA</span><span class="hljs-operator">/</span><span class="hljs-type">JNBE</span> 不小于或不等于时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JAE</span><span class="hljs-operator">/</span><span class="hljs-type">JNB</span> 大于或等于转移<span class="hljs-operator">。</span>
<span class="hljs-type">JB</span><span class="hljs-operator">/</span><span class="hljs-type">JNAE</span> 小于转移<span class="hljs-operator">。</span>
<span class="hljs-type">JBE</span><span class="hljs-operator">/</span><span class="hljs-type">JNA</span> 小于或等于转移<span class="hljs-operator">。</span>
以上四条,测试无符号整数运算的结果(标志<span class="hljs-type">C和Z</span>)<span class="hljs-operator">。</span>
<span class="hljs-type">JG</span><span class="hljs-operator">/</span><span class="hljs-type">JNLE</span> 大于转移<span class="hljs-operator">。</span>
<span class="hljs-type">JGE</span><span class="hljs-operator">/</span><span class="hljs-type">JNL</span> 大于或等于转移<span class="hljs-operator">。</span>
<span class="hljs-type">JL</span><span class="hljs-operator">/</span><span class="hljs-type">JNGE</span> 小于转移<span class="hljs-operator">。</span>
<span class="hljs-type">JLE</span><span class="hljs-operator">/</span><span class="hljs-type">JNG</span> 小于或等于转移<span class="hljs-operator">。</span>
以上四条,测试带符号整数运算的结果(标志<span class="hljs-type">S,O和Z</span>)<span class="hljs-operator">。</span>
<span class="hljs-type">JE</span><span class="hljs-operator">/</span><span class="hljs-type">JZ</span> 等于转移<span class="hljs-operator">。</span>
<span class="hljs-type">JNE</span><span class="hljs-operator">/</span><span class="hljs-type">JNZ</span> 不等于时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JC</span> 有进位时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JNC</span> 无进位时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JNO</span> 不溢出时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JNP</span><span class="hljs-operator">/</span><span class="hljs-type">JPO</span> 奇偶性为奇数时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JNS</span> 符号位为 <span class="hljs-string">"0"</span> 时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JO</span> 溢出转移<span class="hljs-operator">。</span>
<span class="hljs-type">JP</span><span class="hljs-operator">/</span><span class="hljs-type">JPE</span> 奇偶性为偶数时转移<span class="hljs-operator">。</span>
<span class="hljs-type">JS</span> 符号位为 <span class="hljs-string">"1"</span> 时转移<span class="hljs-operator">。</span>
<span class="hljs-number">3</span><span class="hljs-operator">&gt;</span>循环控制指令(短转移)
<span class="hljs-type">LOOP</span> <span class="hljs-type">CX不为零时循环</span><span class="hljs-operator">。</span>
<span class="hljs-type">LOOPE</span><span class="hljs-operator">/</span><span class="hljs-type">LOOPZ</span> <span class="hljs-type">CX不为零且标志Z</span><span class="hljs-operator">=</span><span class="hljs-number">1</span>时循环<span class="hljs-operator">。</span>
<span class="hljs-type">LOOPNE</span><span class="hljs-operator">/</span><span class="hljs-type">LOOPNZ</span> <span class="hljs-type">CX不为零且标志Z</span><span class="hljs-operator">=</span><span class="hljs-number">0</span>时循环<span class="hljs-operator">。</span>
<span class="hljs-type">JCXZ</span> <span class="hljs-type">CX为零时转移</span><span class="hljs-operator">。</span>
<span class="hljs-type">JECXZ</span> <span class="hljs-type">ECX为零时转移</span><span class="hljs-operator">。</span>
<span class="hljs-number">4</span><span class="hljs-operator">&gt;</span>中断指令
<span class="hljs-type">INT</span> 中断指令
<span class="hljs-type">INTO</span> 溢出中断
<span class="hljs-type">IRET</span> 中断返回
<span class="hljs-number">5</span><span class="hljs-operator">&gt;</span>处理器控制指令
<span class="hljs-type">HLT</span> 处理器暂停, 直到出现中断或复位信号才继续<span class="hljs-operator">。</span>
<span class="hljs-type">WAIT</span> 当芯片引线<span class="hljs-type">TEST为高电平时使CPU进入等待状态</span><span class="hljs-operator">。</span>
<span class="hljs-type">ESC</span> 转换到外处理器<span class="hljs-operator">。</span>
<span class="hljs-type">LOCK</span> 封锁总线<span class="hljs-operator">。</span>
<span class="hljs-type">NOP</span> 空操作<span class="hljs-operator">。</span>
<span class="hljs-type">STC</span> 置进位标志位<span class="hljs-operator">。</span>
<span class="hljs-type">CLC</span> 清进位标志位<span class="hljs-operator">。</span>
<span class="hljs-type">CMC</span> 进位标志取反<span class="hljs-operator">。</span>
<span class="hljs-type">STD</span> 置方向标志位<span class="hljs-operator">。</span>
<span class="hljs-type">CLD</span> 清方向标志位<span class="hljs-operator">。</span>
<span class="hljs-type">STI</span> 置中断允许位<span class="hljs-operator">。</span>
<span class="hljs-type">CLI</span> 清中断允许位<span class="hljs-operator">。</span>
六<span class="hljs-operator">、</span>伪指令
<span class="hljs-operator">───────────────────────────</span>
<span class="hljs-type">DW</span> 定义字(<span class="hljs-number">2</span>字节)<span class="hljs-operator">。</span>
<span class="hljs-type">PROC</span> 定义过程<span class="hljs-operator">。</span>
<span class="hljs-type">ENDP</span> 过程结束<span class="hljs-operator">。</span>
<span class="hljs-type">SEGMENT</span> 定义段<span class="hljs-operator">。</span>
<span class="hljs-type">ASSUME</span> 建立段寄存器寻址<span class="hljs-operator">。</span>
<span class="hljs-type">ENDS</span> 段结束<span class="hljs-operator">。</span>
<span class="hljs-type">END</span> 程序结束<span class="hljs-operator">。</span>
<p>一.机械码,又称机器码.<br>
ultraedit打开,编辑exe文件时你会看到<br>
许许多多的由<span class="hljs-number">0</span>,<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">6</span>,<span class="hljs-number">7</span>,<span class="hljs-number">8</span>,<span class="hljs-number">9</span>,<span class="hljs-type">A</span>,<span class="hljs-type">B</span>,<span class="hljs-type">C</span>,<span class="hljs-type">D</span>,<span class="hljs-type">E</span>,<span class="hljs-type">F组成的数码</span>,这些数码<br>
就是机器码.<br>
修改程序时必须通过修改机器码来修改exe文件.</p>
<p>二.需要熟练掌握的全部汇编知识(只有这么多)<br>
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了<br>
cmp a,b 比较a与b<br>
mov a,b 把b的值送给a<br>
ret 返回主程序<br>
nop 无作用,英文“no operation”的简写,意思是“<span class="hljs-keyword">do</span> nothing”(机器码<span class="hljs-number">90</span>)<span class="hljs-operator">***</span>机器码的含义参看上面<br>
(解释:ultraedit打开编辑exe文件时你看到<span class="hljs-number">90</span>,等同于汇编语句nop)<br>
call 调用子程序<br>
je 或jz 若相等则跳(机器码<span class="hljs-number">74</span> 或0F84)<br>
jne或jnz 若不相等则跳(机器码<span class="hljs-number">75</span>或0F85)<br>
jmp 无条件跳(机器码<span class="hljs-type">EB</span>)<br>
jb 若小于则跳<br>
ja 若大于则跳<br>
jg 若大于则跳<br>
jge 若大于等于则跳<br>
jl 若小于则跳<br>
jle 若小于等于则跳<br>
pop 出栈<br>
push 压栈</p>
<p>三.常见修改(机器码)<br>
<span class="hljs-number">74</span><span class="hljs-operator">=&gt;</span><span class="hljs-number">75</span> <span class="hljs-number">74</span><span class="hljs-operator">=&gt;</span><span class="hljs-number">90</span> <span class="hljs-number">74</span><span class="hljs-operator">=&gt;</span><span class="hljs-type">EB</span><br>
<span class="hljs-number">75</span><span class="hljs-operator">=&gt;</span><span class="hljs-number">74</span> <span class="hljs-number">75</span><span class="hljs-operator">=&gt;</span><span class="hljs-number">90</span> <span class="hljs-number">75</span><span class="hljs-operator">=&gt;</span><span class="hljs-type">EB</span></p>
<p>jnz-&gt;nop<br>
<span class="hljs-number">75</span>-&gt;<span class="hljs-number">90</span>(相应的机器码修改)</p>
<p>jnz -&gt; jmp<br>
<span class="hljs-number">75</span> -&gt; <span class="hljs-type">EB</span>(相应的机器码修改)</p>
<p>jnz -&gt; jz<br>
<span class="hljs-number">75</span>-&gt;<span class="hljs-number">74</span> (正常) 0F <span class="hljs-number">85</span> -&gt; 0F <span class="hljs-number">84</span>(特殊情况下,有时,相应的机器码修改)</p>
<p>四.两种不同情况的不同修改方法<br>
<span class="hljs-number">1</span>.修改为jmp<br>
je(jne,jz,jnz) <span class="hljs-operator">=&gt;</span>jmp相应的机器码<span class="hljs-type">EB</span> (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息</p>
<p>xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能<span class="hljs-operator">...</span>,<span class="hljs-string">"Function Not Avaible in Demo"</span> 或 <span class="hljs-string">"Command Not Avaible"</span> 或 <span class="hljs-string">"Can't save in Shareware/Demo"</span>等 (我们希望把它跳过,不让它出现)<br>
<span class="hljs-operator">。。。</span><br>
<span class="hljs-operator">。。。</span><br>
xxxxxxxxxxxx 正确路线所在</p>
<p><span class="hljs-number">2</span>.修改为nop<br>
je(jne,jz,jnz) <span class="hljs-operator">=&gt;</span>nop相应的机器码<span class="hljs-number">90</span> (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处</p>
<p>xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)<br>
<span class="hljs-operator">。。。</span><br>
<span class="hljs-operator">。。。</span><br>
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器<span class="hljs-operator">、</span>寄存器和输入输出端口之间传送数据.</p>
</code></pre></div></div></div></div></div><br><br>
来源:https://www.cnblogs.com/easy51/p/15496591.html
頁: [1]
查看完整版本: 汇编语言指令大全(详细)