<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                匯編語言指令大致分為以下幾類 > 一、傳送類指令 > 二、算數運算類指令 > 三、位操作指令 > 四、串操作指令 > 五、控制轉移類指令 > 六、處理器控制類指令 > 七、匯編指令偽指令 * * * * * **一、傳送類指令** **1.數據傳送指令** **(1) MOV 目的操作數,源操作數** `將源操作數送到目的操作數,目的和源的數的長度要相同,否則會長度不匹配` **(2)XCHG 傳送指令** `XCHG 目的操作數,源操作數 //把源和目的操作數交換數值` **2.有效地址傳送指令LEA** ~~~ LEA 目的操作數,源操作數 把源操作數的偏移地址送目的操作數, 源操作數必須是一個內存操作數, 目的操作數必須是16位通用寄存器 ~~~ **3.堆棧指針操作指令** 堆棧是一塊特殊的存儲器區域,這塊區域是以先進后出的方式工作,系統為此提供了特殊的指針SP,和段寄存器SS 主要特點是: (1)堆棧是以字方式操作的 **(2)壓入堆棧**。 ①先修改指針:`SP=SP -2` ②再存入一個字 **(3)彈出堆棧。** ①先彈出一個字 ②再修改指針:`SP=SP +2` **(4)入棧指令PUSH** 格式:PUSH 操作數 該指令為數據入棧指令 即將操作數指定的一個字節的內容傳送至SP所指的棧頂 尋址方式有寄存器尋址(段寄存器SS除外)和存儲器尋址, 不能用立即數作操作數。 該指令不影響標志位。 過程: 首先,堆棧`SP=SP-2` 然后,操作數的高位字節——>存入((SP)+1)單元中 操作數的低位字節——>送入(SP) **(5)出棧指令:POP** POP 操作數 將SP所指的棧頂內容傳送至操作數指定的一個字。 **尋址方式有:** 寄存器尋址(段寄存器SS除外)和存儲器尋址 不能用立即數作操作數。 該指令不影響標志位。 **過程:** 首先堆棧((SP)+1)單元字節——>操作數的高字節位, (SP)單元字節——>操作數的低位字節。 然后`SP=SP-2` **4.輸入輸出指令** **(1)IN 輸入指令** ~~~ IN AL,N ; (N)——>AL IN AX,N ; (N+1:N)——>AX IN AL,63H ; 將端口地址為63H的一個字節內容輸入到AL IN AX,55H ;將兩個相鄰端口地址58H和59H的16位數據輸入到AX ~~~ **(2)OUT 輸出指令** ~~~ OUT N,AL ;(AL)字節——>N端口地址的單元中 OUT N,AX ;(AX)字——>N+1和N端口地址的單元中 OUT 66H,AL ;將AL內容送端口地址66H的單元中 OUT 66H,AX ;將AX內容送66H和67H端口地址的單元中 ~~~ **!注意:** > 在匯編語言中,端口地址小于256(十六進制00H~FFH)時 > 可以直接在指令中寫出端口地址 > 如果端口地址大于256,先將端口地址送入DX寄存器中, > 然后在IN或OUT指令中用DX代表端口地址。 * * * * * **二、算數運算類指令** 參加運算的可以是無符號數或帶符號數,帶符號的數以補碼的形式存放或參與運算 **1.加法指令** **(1)ADD 目的操作數,源操作數** 目的操作數+源操作數——>目的操作數 **(2)ADC帶進位的加法指令** ADC 目的操作數,源操作數 目的操作數+源操作數+CF——>目的操作數 **例子:** ~~~ MOV AH,0 ;0——>AH MOV AL,92H ;92H——>AL ADD AL,86H ;92H+86H=18H——>AL,CF=1 ADC AH,0 ;(AH)+0+CF=0+0+1=1——>AH,即01H=AH ~~~ **(3)INC 加|指令** INC 操作數 //操作數加1,結果送操作數 操作數可以是任意一個8或16位的通用寄存器或存儲單元,不能是立即數 指令中操作數當作無符號數時,主要用于計數器計數或修改指針地址的值。 如: ~~~ INC DI ;(DI)=DI+1 INC CX ;(CX)=CX+1 ~~~ **說明**:除了指令INC對標志位CF不影響外,其它加法指令對標志位的影響如下 > ①CF:兩個數相加,最高有效位有進位時,即字節運算超出無符號輸的范圍 > 0~255,字運算超出無符號數的范圍0~65535時,CF=1,否則CF=0. > 故兩個無符號數相加時,可用CF值來判斷是否超出了無符號數的表示范圍 > 如果CF=1表示此無符號數加法運算結果發生了溢出。 > ②PF:運算結果以二進制數表示時,若"1"的個數為偶數時PF=1,否則PF=0 > ③AF:運算中D3向D4有進位時,AF=1,否則為0 > ④ZF:運算結果為0時,ZF=1;否則ZF=0 > ⑤SF:運算結果最高位為1時,SF=1,否則為0 > ⑥OF:當兩個操作數的符號相同,而相加的結果的符號與操作數的符號相反時 > OF=1,否則OF=0。該標志位用來判斷帶符號數相加的溢出 **例如:** ~~~ ADD AL,30H ;(AH)+30H ——> AL ADD AX,3000H ;(AX)+3000H ——> AX ADD BX,[SI] ;(BX)+((SI))——>BX ~~~ **2.減法指令** **(1)SUB** `SUB 目的操作數,源操作數` 目的操作數=目的操作數-源操作數 **(2)SBB 帶錯位的減法指令** `SBB 目的操作數,源操作數` 目的操作數=目的操作數-源操作數-CF **(3)DEC 減1指令 格式:DEC 操作數** `DEC DI ;DI=(DI)-1` **(4)NEG 求補指令** ~~~ NEG 操作數 //0-操作數的內容后結果回送操作數 MOV DI,05H NEG DI ;DI=0-(DI)=0-05H=0FBH ~~~ **(5)CMP 比較指令** CMP 目的操作數,源操作數 執行時目的操作數與源操作數相減,只根據結果設置標志位 操作數均保持原值不變 **3.類型擴展指令** 為了解決操作數長度的匹配,有時需要把數據類型進行擴展。 主要有把字節擴展成字,把字擴展成雙字 ~~~ CBW:字節擴展成字 CWD:字擴展成雙字 ~~~ **例子:** **正數的擴展** ~~~ MOV AL,52H CBW ;執行指令后,AX=0052H CWD ;執行指令后,DX=0000H,AX=0052H ~~~ **負數的擴展** ~~~ MOV AL,86H CBW ;執行指令后,AX=FF86H CWD ;執行指令后,DX=FFFFH,FF86H ~~~ **4.乘法指令** ~~~ MUL :無符號數乘法 IMUL:帶符號數乘法 ~~~ 目的操作數必須是累加器,不必在指令中寫出。 **例子:** **無符號數乘法** ~~~ MOV AL,05H MOV BL,06H MUL BL //執行結果AX=30=001EH ~~~ **有符號數乘法** ~~~ MOV AL,-5 MOV BL,+6 IMUL BL //AX=-30=FFE2H ~~~ **5.除法指令** **DIV:無符號除法** ~~~ SRC(源操作數)為字節時,AL=AX/SRC的商,AH=AX/SRC的余數 SRC為字時:AX=(DX,AX)/SRC的商,DX=(DX,AX)/SRC的余數 ~~~ 商和余數都是無符號數。 **IDIV:有符號除法** 操作同上類似,目的操作數必須是累加器AX和DX,不必寫出。 * * * * * **三、位操作指令** ~~~ AND 與運算. or 或運算. XOR 異或運算. NOT 取反. TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果). SHL 邏輯左移. SAL 算術左移.(=SHL) SHR 邏輯右移. SAR 算術右移.(=SHR) ROL 循環左移. ROR 循環右移. RCL 通過進位的循環左移. RCR 通過進位的循環右移. 以上八種移位指令,其移位次數可達255次. 移位一次時, 可直接用操作碼. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數. 如 MOV CL,04 SHL AX,CL ~~~ **四、串操作指令** ~~~ DS:SI 源串段寄存器 :源串變址. ES:DI 目標串段寄存器:目標串變址. CX 重復次數計數器. AL/AX 掃描值. D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量. Z標志 用來控制掃描或比較操作的結束. MOVS 串傳送. ( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. ) CMPS 串比較. ( CMPSB 比較字符. CMPSW 比較字. ) SCAS 串掃描. 把AL或AX的內容與目標串作比較,比較結果反映在標志位. LODS 裝入串. 把源串中的元素(字或字節)逐一裝入AL或AX中. ( LODSB 傳送字符. LODSW 傳送字. LODSD 傳送雙字. ) STOS 保存串. 是LODS的逆過程. REP 當CX/ECX<>0時重復.,也就是直到CX=0時結束 REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復. REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復. REPC 當CF=1且CX/ECX<>0時重復. REPNC 當CF=0且CX/ECX<>0時重復. ~~~ **五、控制轉移類指令** **1>無條件轉移指令 (長轉移)** ~~~ JMP 無條件轉移指令 CALL 過程調用 RET/RETF過程返回. ~~~ **2>條件轉移指令 (短轉移,-128到+127的距離內)** ~~~ ( 當且僅當(SF XOR OF)=1時,OP1<OP2 ) JA/JNBE 不小于或不等于時轉移. JAE/JNB 大于或等于轉移. JB/JNAE 小于轉移. JBE/JNA 小于或等于轉移. 以上四條,測試無符號整數運算的結果(標志C和Z). JG/JNLE 大于轉移. JGE/JNL 大于或等于轉移. JL/JNGE 小于轉移. JLE/JNG 小于或等于轉移. 以上四條,測試帶符號整數運算的結果(標志S,O和Z). JE/JZ 等于轉移. JNE/JNZ 不等于時轉移. JC 有進位時轉移. JNC 無進位時轉移. JNO 不溢出時轉移. JNP/JPO 奇偶性為奇數時轉移. JNS 符號位為 "0" 時轉移. JO 溢出轉移. JP/JPE 奇偶性為偶數時轉移. JS 符號位為 "1" 時轉移. ~~~ **3>循環控制指令(短轉移)** ~~~ LOOP CX不為零時循環. LOOPE/LOOPZ CX不為零且標志Z=1時循環. LOOPNE/LOOPNZ CX不為零且標志Z=0時循環. JCXZ CX為零時轉移. JECXZ ECX為零時轉移. ~~~ **4>中斷指令** ~~~ INT 中斷指令 INTO 溢出中斷 IRET 中斷返回 ~~~ **六、處理器控制類指令** 處理器控制類指令只能完成對CPU的簡單控制功能。 共有12條 **對標志位操作** ~~~ CLC(進位位置0指令) CMC(進位位求反指令) STC(進位位置為1指令) CLD(方向標志置1指令) STD(方向標志位置1指令) CLI(中斷標志置0指令) STI(中斷標志置1指令) ~~~ **同步控制** ~~~ WAIT(等待) ESC(交權) LOCK(封鎖總線) ~~~ **其他** ~~~ NOP(無操作) HLT(暫停) ~~~ * * * * * **七、匯編指令偽指令** ~~~ DW 定義字(2字節). PROC 定義過程. ENDP 過程結束. SEGMENT 定義段. ASSUME 建立段寄存器尋址. ENDS 段結束. END 程序結束. ~~~ * * * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看