为什么80%的码农都做不了架构师?>>>
;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
; Test26_1.asm
.386
.model flat, stdcallinclude windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procmov eax, 6inc eaxPrintDec eax ;7dec eaxPrintDec eax ;6neg eax ;NEG 就是加个负号PrintDec eax ;-6neg eaxPrintDec eax ;6ret
main endp
end main
ADD、ADC
; Test26_2.asm
.386
.model flat, stdcallinclude windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procmov eax, 5add eax, 1PrintDec eax ;6stc ;CF=1mov eax, 5adc eax, 1 ;ADC 比 ADD 还要多加上 CFPrintDec eax ;7clc ;CF=0mov eax, 5adc eax, 1PrintDec eax ;6ret
main endp
end main
SUB、SBB
; Test26_3.asm
.386
.model flat, stdcallinclude windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procmov eax, 5sub eax, 1PrintDec eax ;4stcmov eax, 5sbb eax, 1 ;SBB 比 SUB 还要多减去 CFPrintDec eax ;3clcmov eax, 5sbb eax, 1PrintDec eax ;4ret
main endp
end main
CMP
;CMP 隐含执行 SUB, 但并不改写操作数, 只是影响标志位;
;零标志位标识着两个数是否相等, 符号标志位标识着两个数的大小.
;它后面经常跟着跳转指令; Test26_4.asm
.386
.model flat, stdcallinclude windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procmov eax, 3cmp eax, 3lahfPrintHex ah ;46 - 01000110b(ZF&#61;1 说明两个数相等)mov eax, 3cmp eax, 2lahfPrintHex ah ;02 - 00000010b(SF&#61;0、ZF&#61;0 说明前者 > 后者)mov eax, 3cmp eax, 4lahfPrintHex ah ;76 - 10010111b(SF&#61;1、ZF&#61;0 说明前者 <后者) ret
main endp
end main
辨析 NEG 与 NOT
; Test26_5.asm
.386
.model flat, stdcallinclude 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;求补运算: 取反&#43;1mov val, 44PrintDec val ;44PrintHex val ;002C - 00000000 00101100bnot valinc valPrintDec val ;-44PrintHex val ;FFD4 - 11111111 11010100bnot valinc valPrintDec val ;44PrintHex val ;002C - 00000000 00101100b;NEG 就相当于: 取反&#43;1mov val, 44neg valPrintDec val ;-44PrintHex val ;FFD4 - 11111111 11010100bneg valPrintDec val ;44PrintHex val ;002C - 00000000 00101100bret
main endp
end main