学 Win32 汇编[26] - 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP
为什么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相关推荐
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV
MUL: 无符号乘 ;影响 OF.CF 标志位 ;指令格式: ;MUL r/m ;参数是乘数;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX ;如果参数是 r16/m16, 将把 AX ...
- 学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
记得刚学多线程的时候, 碰到一个结构: //Delphi 的语法描述 PContext = ^TContext; _CONTEXT = recordContextFlags: DWORD;Dr0: D ...
- Win32ASM学习[15]:加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP
---------------------------------------------------------------------------------------------------- ...
- 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS
为什么80%的码农都做不了架构师?>>> PTR: 指定要操作的数据尺寸 ; Test12_1.asm .386 .model flat, stdcallinclude win ...
- 学 Win32 汇编[6]: 伪指令 DUP 与数组
为什么80%的码农都做不了架构师?>>> 声明数组实例: ; Test6_1.asm .386 .model flat, stdcallinclude windows.inc ...
- 学 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): 算术 ...
- 【Win32汇编】学习Win32汇编
学习Win32汇编(Windows下的32位汇编) 第一个程序Hello world 控制台输出(新建Console App工程) Debug输出(新建Win32 App工程) 后面代码的头文件在这里 ...
最新文章
- 热烈庆祝“mysql 集群数据库架构成功”
- pythonista3使用教程-pythonista3都能做什么
- 推荐!手把手教你使用Git
- windows下nginx的安装及使用
- linux操作系统好吗_国内可以通过安卓+termux打造出适用手机平板和电脑全平台最好的操作系统...
- admin后台菜单栏的实现
- ImportError: cannot import name ‘Optional‘
- 2018 我所了解的 Vue 知识大全(一)
- TypeScript笔记(1)——环境配置与第一个ts程序
- ServiceStack.Redis连接阿里云redis服务时使用连接池出现的问题
- Django之forms组件使用
- mysql query cache_MySQL Query Cache开启与否的必要性分析
- 饿了么ui 省市区 三级联动框架
- NESSUS简介与安装
- 公有云服务器租赁协议,云服务器
- attempted an unsupported operation 、an unsupported operation was attempted [尝试不支持的操作]错误的三种解决方案
- 【考研】 2021年哈尔滨工业大学计算机考研「初试」经验贴
- fflush函数使用
- Gibbs Sampler
- 群邑智库:2018年1-9月主要央卫视电视剧回顾
热门文章
- 从实习月薪3k到月薪18k测试工程师,我用了两年追上了曾经被给予厚望的自己~
- 中富金石财富班29800效果如何?与专业投资者同行让投资更简单
- android内存压力测试,Android内存压力测试工具(memtester移植)
- Spring Boot学习--starters
- 金蝶kis记账王怎么编制T型账
- wordpress社交系统_WordPress的顶级社交书签插件
- MFC学习 CString内存泄漏的雷区——GetBuffer与ReleaseBuffer
- MessageBeep - Play a System sound
- mysql比较日期月份_MySQL日期比较
- 直播 | 美图云接入层的架构演进