`
zzc1684
  • 浏览: 1190561 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 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, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.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


; Test26_2.asm
.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

.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


; Test26_3.asm
.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

.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



;CMP 隐含执行 SUB, 但并不改写操作数, 只是影响标志位;
;零标志位标识着两个数是否相等, 符号标志位标识着两个数的大小. 
;它后面经常跟着跳转指令

; Test26_4.asm
.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

.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


; Test26_5.asm
.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
分享到:
评论

相关推荐

    汇编语言指令系统、伪指令

    SUB、SBB指令、CMP、DEC、NEG 二进制乘法指令 MUL、IMUL 二进制除法指令 DIV、IDIV指令 十进制算术运算 非压缩BCD码调整指令AAA、AAS、AAM、AAD 压缩BCD码调整指令DAA、DAS 位   运算   ...

    常用ARM指令集及汇编.pdf

    ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令...

    汇编语言汇指令集

    汇编语言指令集合 包括了(push,pop , mov ,pusf,popf ,add,adc,inc,sub,sbb,dec,neg,cmp,xchg,xor,daa,das,and,bt,not)指令

    proteus经典实例

    卷的序列号是 C827-3DA7 E:\soft\硬件\proteu7\proteus经典实例1 的目录 2010-05-11 16:49 &lt;DIR&gt; . 2010-05-11 16:49 &lt;DIR&gt; .. 2010-05-11 16:49 0 aa.txt 2008-08-28 22:57 &lt;DIR&gt; MCS-51 examples_1 CLR RAM ...

    8086寻址方式及指令系统

    C.SUB [BX],CL D.SBB AL,DL 16.十进制数字74所对应的压缩型BCD码的形式是( )。 A.74 B.74H C.4AH D.4A 17.十进制数字85所对应的非压缩型BCD码的形式是( )。 A.0085 B.0085H C.0805 D.0805H 18.设...

    VERY-NEG-and-VERY-POS-Lexicons:极端词汇的两个词典

    我们的两个词典,VERY-NEG和VERY-POS: 1-VERY-NEG,由最否定词(MN)和被认为不是最否定词(NMN)的列表组成。 2- VERY-POS由最肯定词(MP)和未归类为最肯定词(NMP)的列表组成 格式 这两个词典都由四列组成:...

    Recommendation-system-based-on-knowledge-graph-embedding:基于知识图嵌入的推荐系统

    以及关联的名称以及索引号,关联也可以有多种,然后该文件夹下还应该有train.txt,valid.txt和test.txt,作为模型训练的依托,其中的neg.txt可要可不要,这个文件并不参与模型的训练过程3.dataset.py文件主要是模型...

    FX2N_带AD-DA功能的(32点16入16出花银子的)百分百OK

    // 20150905 : ADD command: INC INCP DEC DECP // 20150914 : MPP LD&lt;&gt; AND&lt;&gt; OR= OR&gt; OR&lt; OR&gt;= OR // 20150917 : WAND WOR WXOR NEG ROL ROR RCL RCR SQR SWAP // 20151009 : ADD RUN/STOP KEY // 20151214 : ADD...

    gjk C++应用代码(碰撞问题)

    static U32 sIteration = 15; // Stuck in a loop? S32 num_iterations = 0; S32 num_irregularities = 0; //---------------------------------------------------------------------------- GjkCollisionState...

    A-Convolutional-Neural-Network-Cascade-for-Face-Detection:TensorFlow实现“用于面部检测的卷积神经网络级联”,CVPR 2015

    用于人脸检测的卷积神经网络级联 此回购是TensorFlow中重新实现。 开始 准备资料 下载AFLW数据集(正)和COCO数据集(负)进行训练。 可以使用任何其他数据集代替负数的COCO数据集。...硬否定挖掘(将neg_train / ne

    matlabauc代码-PPI_pred:PPI_pred

    Matlab的耳语PPI_pred 所需的库和安装库的终端命令:-numpy:“ sudo pip install numpy” -sklearn:“ sudo pip install sklearn” -matplotlib.pyplot:“ ...要获取蛋白质序列,请在终端...neg_svm_input”,这些过程

    The Art of Assembly Language Programming

    SUB, SBB, DEC, AAS, and DAS 6.5.3 - The CMP Instruction 6.5.4 - The CMPXCHG, and CMPXCHG8B Instructions 6.5.5 - The NEG Instruction 6.5.6 - The Multiplication Instructions: MUL, IMUL, and...

    【汇编语言程序设计】试题及答案合集

    C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置“1”,可以使用(B) A:...

    机器学习--行人检测图片负样本(NEG)

    1000张行人检测的负样本,分辨率为320X240,可用于训练行人检测分类器,本人已使用样本训练出.xml分类器,检测效果良好。另外正样本(POS)如需要请见另一个资源(负样本也很多,正负样本上传容量受限)。

    leetcode285-java-PythonSyntax-Leetcode::pick:java语法和LeetCode解决方案

    neg 来实现出色的溶胶。 单次扫描容易找到数组中 3 个 nums 的最大乘积数组实现中的二分查找 right/left = mid +- 1 所有对角线都相同的二维数组两个项目篮子,找到数组中最大的范围。 切片窗经典池描述删除 X 列以...

    eth-neg-value-tx:以太坊漏洞赏金提交

    假设n超过 32 字节。 在该区块中挖掘的合约可以使用 NUMBER 操作码将n压入堆栈。 由于 NOT 操作码假定堆栈上的所有值都小于 32 字节,因此其结果将为负。 然后我们可以使用这个数字来创建一个负值的交易。 因为 ...

    Matlab编程手写代码基础测试题-Neural-Networks-for-Machine-Learning-matlab:用于机器学习的神经

    learn_perceptron(neg_examples_nobias, pos_examples_nobias, w_init, w_gen_feas) 项目 2 - 学习单词表示 在这个作业中,我们将设计一个神经网络语言模型。 该模型将学习根据前三个单词预测下一个单词。 要加载...

    From C to C++

    //-------- From C to C++ ------------ // A simple C Program! // convert a string to uppercase! #include #define N 200 int main(){ char ms[N]; int i; printf("Input ms: "); gets(ms); for(i=0;ms[i]...

    汇编考试模拟题及答案

    汇编考试题目经典 《汇编语言程序设计》模拟试题 一、单项选择题 1、指令JMP FAR PTR DONE属于( )。  A.段内转移直接寻址 B....C.段间转移直接寻址 D....2、执行下面指令序列后,结果是( )。...C.INC AX D.DEC AX

    汇编语言_期末考试_试题.

    在执行下列指令时,需要使用段寄存器DS的指令是( ) A.STOSW B.ADD AL,CL C.NEG BX D.INC DA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是( ) A.ADD BH,...

Global site tag (gtag.js) - Google Analytics