匯編-加減法指令


算術運算、邏輯運算與移位操作指令

加法運算類指令

加法指令

普通加法指令 \(ADD\) 影響 \(6\) 個標志位

帶進位加法指令 \(ADC\) 影響 \(6\) 個標志位

\(1\) 指令 \(INC\) 影響 \(5\) 個標志位 不會影響 \(CF\)

使用 \(ADC\) 之前要先把 \(CF\) 清零

\(INC\) 的操作數不可以是段寄存器立即數

求內存數據段中 \(M1\)\(M2\) 為首的 兩個 \(20\) 字節數之和,並將結果寫入 \(M2\) 為首的區域中

按照字節運算

	LEA SI, M1
	LEA DI, M2
    MOV CX, 20
	CLC   ; 使CF = 0
    
NEXT: MOV  AL, [SI]
      ADC [DI], AL
      INC SI
      INC DI
      DEC CX
      JNZ NEXT
     
      HLT

按照字運算

	LEA SI, M1
	LEA DI, M2
    MOV CX, 10
	CLC   ; 使CF = 0
    
NEXT: MOV  AX, [SI]
      ADC [DI], AX
      ADD SI, 2
      ADD DI, 2
      DEC CX
      JNZ NEXT
     
      HLT

減法運算類指令

\(SUB :\) 對標志位的影響與 \(ADD\) 相同

\(SBB :\) 對標志位的影響與 \(INC\)​ 相同 對操作數的要求及對標志位的影響與 \(SUB\) 相同

\(SUB : \ OPRD1 \ - \ OPRD2 \ - \ CF \ ----> \ OPRD1\)

\(DEC\) 對操作數的要求及對標志位的影響與 \(INC\) 相同

應用程序例

; 程序功能: 延時(定時)
		MOV BL, 2
NEXT1:  MOV CX, 0FFFFH ; 0是為了讓計算機識別這是一個16進制數字
NEXT2:  DEC CX
		JNZ NEXT2 ;ZF=0 轉NEXT2
		DEC BL   
		JNZ NEXT1 ; ZF=0 轉NEXT1
		HLT   ;暫停執行

\(NEG\) 指令

\(NEG \ OPRD\) $$8/16位寄存器或存儲器操作數$$

\(0 \ - \ OPRD \ ----> \ OPRD\)

因此這個指令又叫求補指令

執行\(NEG\)指令之后,一般情況下都會使得 \(CF\)\(1\) ,除非給定的操作數為零才會使 \(CF\)\(0\)

當指定的操作數的值為 \(80H(-128)\) 或者 \(8000H(-32768)\) ,則執行 \(NEG\) 指令后 結果不變,但 \(OF\) 置一,其他情況下 \(OF\) 均置零

\(CMP\) 指令

\(CMP \ OPRD1, OPRD2\)

操作 \(OPRD1 \ - \ OPRD2\)

指令執行的結果不影響目標操作數,僅影響標志位

常用於比較兩個數字的大小

  • 兩個無符號數的比較

    \(CMP \ AX, BX\)

    \(AX \ge BX\)\(CF = 0\)

    \(AX < BX\)\(CF = 1\)

    \(AX = BX\)\(CF = 0, ZF = 1\)

  • 兩個帶符號數的比較

    \(CMP \ AX, BX\)

    兩個數字的大小由 \(OF\)\(SF\) 共同決定

    \(OF\)\(SF\) 狀態相同 \(AX \ge BX\)

    \(OF\)\(SF\) 狀態不同 \(AX < BX\)

    \((異或相同 \ 不同)\)

    \(CMP\) 指令示例

    		LEA BX, MAX
    		LEA SI, BUF
    		MOV CL, 20
    		MOV AL, [SI]
    NEXT :  INC SI
    		CMP AL, [SI]
    		JNC GOON		; CF=0轉移
    		XCHG [SI], AL
    GOON:   DEC CL
    		JNZ NEXT
    		MOV [BX], AL
    		HLT
    

    程序功能\(20\) 個數字中尋找最大值並放入 \(MAX\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM