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

;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.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend main

ADD、ADC
; Test26_2.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend main

SUB、SBB
; Test26_3.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend main

CMP
;CMP 隐含执行 SUB, 但并不改写操作数, 只是影响标志位;;零标志位标识着两个数是否相等, 符号标志位标识着两个数的大小. ;它后面经常跟着跳转指令; Test26_4.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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 说明前者 < 后者)        retmain endpend main

辨析 NEG 与 NOT
; Test26_5.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data?    val sword ?.codemain 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    retmain endpend main

posted on 2010-04-15 17:15 万一 阅读(18685) 评论(0) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、B
  2. 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
  3. 学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、M
  4. 学 Win32 汇编[20]: 洞察标志寄存器
  5. 学 Win32 汇编[25] - 符号扩展指令: CBW、CWDE、CDQ、CWD
  6. jQuery中的$.ajax方法,以及基本的vue指令操作
  7. 深入理解计算机系统(4.1)------Y86指令集体系结构
  8. 冷月手撕408之操作系统(4)-操作系统的运行环境
  9. (lintcode)第1题 A+B问题

随机推荐

  1. js 区分浏览器来源是PC端还是移动端
  2. Android中WebView实现Javascript调用Java
  3. Android点击Home键后fragment重新加载问
  4. android 检测字符串是否为合法域名
  5. AndroidClipSquare安卓实现方形头像裁剪
  6. android 关于读取SD卡或者U盘的一些方法
  7. 【Android笔记】Activity涉及界面全屏的
  8. Android显示GIF动画完整示例(二)
  9. 使用Android Dropbox API检查Dropbox上是
  10. 【边做项目边学Android】手机安全卫士04_