为什么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=1 说明两个数相等)mov eax, 3cmp eax, 2lahfPrintHex ah ;02 - 00000010b(SF=0、ZF=0 说明前者 > 后者)mov eax, 3cmp eax, 4lahfPrintHex ah ;76 - 10010111b(SF=1、ZF=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;求补运算: 取反+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 就相当于: 取反+1mov val, 44neg valPrintDec val  ;-44PrintHex val  ;FFD4 - 11111111 11010100bneg valPrintDec val  ;44PrintHex val  ;002C - 00000000 00101100bret
main endp
end main

转载于:https://my.oschina.net/hermer/blog/320017

学 Win32 汇编[26] - 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP相关推荐

  1. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  2. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  3. 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV

    MUL: 无符号乘 ;影响 OF.CF 标志位 ;指令格式: ;MUL r/m ;参数是乘数;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX ;如果参数是 r16/m16, 将把 AX ...

  4. 学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一

    记得刚学多线程的时候, 碰到一个结构: //Delphi 的语法描述 PContext = ^TContext; _CONTEXT = recordContextFlags: DWORD;Dr0: D ...

  5. Win32ASM学习[15]:加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

    ---------------------------------------------------------------------------------------------------- ...

  6. 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS

    为什么80%的码农都做不了架构师?>>>    PTR: 指定要操作的数据尺寸 ; Test12_1.asm .386 .model flat, stdcallinclude win ...

  7. 学 Win32 汇编[6]: 伪指令 DUP 与数组

    为什么80%的码农都做不了架构师?>>>    声明数组实例: ; Test6_1.asm .386 .model flat, stdcallinclude windows.inc ...

  8. 学 Win32 汇编[24] - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD

    SHL.SHR.SAL.SAR: 移位指令 ;SHL(Shift Left): 逻辑左移 ;SHR(Shift Right): 逻辑右移 ;SAL(Shift Arithmetic Left): 算术 ...

  9. 【Win32汇编】学习Win32汇编

    学习Win32汇编(Windows下的32位汇编) 第一个程序Hello world 控制台输出(新建Console App工程) Debug输出(新建Win32 App工程) 后面代码的头文件在这里 ...

最新文章

  1. 热烈庆祝“mysql 集群数据库架构成功”
  2. pythonista3使用教程-pythonista3都能做什么
  3. 推荐!手把手教你使用Git
  4. windows下nginx的安装及使用
  5. linux操作系统好吗_国内可以通过安卓+termux打造出适用手机平板和电脑全平台最好的操作系统...
  6. admin后台菜单栏的实现
  7. ImportError: cannot import name ‘Optional‘
  8. 2018 我所了解的 Vue 知识大全(一)
  9. TypeScript笔记(1)——环境配置与第一个ts程序
  10. ServiceStack.Redis连接阿里云redis服务时使用连接池出现的问题
  11. Django之forms组件使用
  12. mysql query cache_MySQL Query Cache开启与否的必要性分析
  13. 饿了么ui 省市区 三级联动框架
  14. NESSUS简介与安装
  15. 公有云服务器租赁协议,云服务器
  16. attempted an unsupported operation 、an unsupported operation was attempted [尝试不支持的操作]错误的三种解决方案
  17. 【考研】 2021年哈尔滨工业大学计算机考研「初试」经验贴
  18. fflush函数使用
  19. Gibbs Sampler
  20. 群邑智库:2018年1-9月主要央卫视电视剧回顾

热门文章

  1. 从实习月薪3k到月薪18k测试工程师,我用了两年追上了曾经被给予厚望的自己~
  2. 中富金石财富班29800效果如何?与专业投资者同行让投资更简单
  3. android内存压力测试,Android内存压力测试工具(memtester移植)
  4. Spring Boot学习--starters
  5. 金蝶kis记账王怎么编制T型账
  6. wordpress社交系统_WordPress的顶级社交书签插件
  7. MFC学习 CString内存泄漏的雷区——GetBuffer与ReleaseBuffer
  8. MessageBeep - Play a System sound
  9. mysql比较日期月份_MySQL日期比较
  10. 直播 | 美图云接入层的架构演进