8086彙編語言初學者教程(第6部分)html
運算與邏輯指令
算法
大多數運算與邏輯指令影響處理器的狀態標記寄存器。
數組
從上圖能夠看到,這是狀態標記寄存器是一個16位寄存器
每一位稱做一個標誌位,能夠取值 1 或者 0 。
函數
這裏有3組指令.
spa
第一組: ADD, SUB,CMP, AND, TEST, OR, XOR
支持以下操做數:
htm
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
REG(寄存器): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory(內存): [BX], [BX+SI+7], 變量,等等...
immediate(當即數): 5, -24, 3Fh, 10001101b, 等等...
執行以後,結果常常存放在第一個操做數中。CMP和TEST指令隻影響標誌位,並不返回數值(這兩條指令是用來在程序運行中判斷的)上述指令只影響以下標誌位:
CF, ZF, SF, OF, PF, AF.
blog
1 AND 1 = 1只有當兩個操做數都是1時,運算結果纔是1。
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
1 OR 1 = 1若是操做數中有1那麼結果必定是1。
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
1 XOR 1 = 0當兩個操做數不一樣時,結果爲1。
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
第二組: MUL, IMUL, DIV, IDIV
支持以下操做數:
教程
REG
memory
REG(寄存器): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory(內存): [BX], [BX+SI+7], variable, etc...
MUL and IMUL 指令隻影響 CF, OF標誌位。
運算後若是結果超出範圍,這些標記位置1,若是沒有超過
範圍,置0
DIV 和 IDIV 指令對於標誌位無影響
內存
當操做數是 字節時:
AX = AL * 操做數.
當操做數是 字時:
(DX AX) = AX * 操做數.
當操做數是 字節時:
AX = AL * 操做數.
當操做數是 字時:
(DX AX) = AX * 操做數.
當操做數是 字節時:
AL = AX / 操做數
AH = 餘數(取模後的餘數) .
當操做數是字時:
AX = (DX AX) / 操做數
DX = 餘數(取模後的餘數)
當操做數是字節時:
AL = AX / 操做數
AH = 餘數(取模後的餘數)
當操做數是 字時:
AX = (DX AX) / 操做數
DX = 餘數(取模後的餘數) .
第三組: INC, DEC, NOT, NEG
支持以下操做數:
get
REG
memory
REG(寄存器): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory(內存): [BX], [BX+SI+7], variable, etc...
INC, DEC 指令隻影響以下標誌位:
ZF, SF, OF, PF, AF.
NOT 指令不影響任何標誌位!
NEG i指令隻影響以下操做位:
CF, ZF, SF, OF, PF, AF.