-------------------------------------------------------------------------------------------------------------------------------------------------------------------
;INC(Increment): 加一
;DEC(Decrement): 減一
;NEG(Negate):? 求補(求反)
;ADD(Add):? 加
;ADC(Add Carry): 帶進位加
;SUB(Subtract): 減
;SBB(Subtract With Borrow): 帶進位減
;CMP(Compare): 比較
;INC、DEC、NEG 的指令格式
;INC r/m
;ADD、ADC、SUB、SBB、CMP 的指令格式:
;ADD r/m, r/m/i
;它們的結果影響 OF、SF、ZF、AF、PF、CF
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
INC、DEC、NEG
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
.code
main proc
??? mov eax, 6
??? inc eax
??? PrintDec eax ;7
??? dec eax
??? PrintDec eax ;6
??? neg eax????? ;NEG 就是加個負號
??? PrintDec eax ;-6
??? neg eax
??? PrintDec eax ;6
??? ret
main endp
end main
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
ADD、ADC
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
.code
main proc
??? mov eax, 5
??? add eax, 1
??? PrintDec eax ;6
???
??? stc????????? ;CF=1
??? mov eax, 5
??? adc eax, 1?? ;ADC 比 ADD 還要多加上 CF
??? PrintDec eax ;7
???
??? clc????????? ;CF=0
??? mov eax, 5
??? adc eax, 1
??? PrintDec eax ;6
??? ret
main endp
end main
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
SUB、SBB
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
.code
main proc
??? mov eax, 5
??? sub eax, 1
??? PrintDec eax ;4
???
??? stc
??? mov eax, 5
??? sbb eax, 1?? ;SBB 比 SUB 還要多減去 CF
??? PrintDec eax ;3
???
??? clc
??? mov eax, 5
??? sbb eax, 1
??? PrintDec eax ;4
??? ret
main endp
end main
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
CMP
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
.code
main proc
??? mov eax, 3
??? cmp eax, 3
??? lahf
??? PrintHex ah ;46 - 01000110b(ZF=1 說明兩個數相等)
???
??? mov eax, 3
??? cmp eax, 2
??? lahf
??? PrintHex ah ;02 - 00000010b(SF=0、ZF=0 說明前者 > 后者)
???
??? mov eax, 3
??? cmp eax, 4
??? lahf
??? PrintHex ah ;76 - 10010111b(SF=1、ZF=0 說明前者 < 后者)???
??? ret
main endp
end main
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
辨析 NEG 與 NOT
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat, stdcall
include??? windows.inc
include??? kernel32.inc
include??? masm32.inc
include??? debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.data?
??? val sword ?
.code
main proc
??? ;求補運算: 取反+1
??? mov val, 44
??? PrintDec val? ;44
??? PrintHex val? ;002C - 00000000 00101100b
???
??? not val
??? inc val
??? PrintDec val? ;-44
??? PrintHex val? ;FFD4 - 11111111 11010100b
???
??? not val
??? inc val
??? PrintDec val? ;44
??? PrintHex val? ;002C - 00000000 00101100b
???
??? ;NEG 就相當于: 取反+1
??? mov val, 44
??? neg val
??? PrintDec val? ;-44
??? PrintHex val? ;FFD4 - 11111111 11010100b
???
??? neg val
??? PrintDec val? ;44
??? PrintHex val? ;002C - 00000000 00101100b
??? ret
main endp
end main
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
?