汇编语言 CMP指令

您所在的位置:网站首页 汇编语言中的reg是什么意思 汇编语言 CMP指令

汇编语言 CMP指令

2024-06-10 15:34| 来源: 网络整理| 查看: 265

CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数。 指令格式:

CMP 目的操作数, 源操作数

标志位 当实际的减法发生时,CMP指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。如果比较的是两个无符号数,则零标志位和进位标志位表示的两个操作数之间的关系如下表所示:

CMP结果ZFCF目的操作数 < 源操作数01目的操作数 > 源操作数00目的操作数 = 源操作数10

如果比较的是两个有符号数,则符号标志位、零标志位和溢出标志位表示的两个操作数之间的关系如下表所示:

CMP结果标志位目的操作数 < 源操作数SF ≠ OF目的操作数 > 源操作数SF = OF目的操作数 = 源操作数ZF = 1

CMP指令是创建条件逻辑结构的重要工具。当在条件跳转指令中使用CMP时,汇编语言的执行结果就和IF语句一样。 以下是目的操作数 < 源操作数的举例:

; ZF CF mov ax, 5 cmp ax, 10 ; 0 1

在这里插入图片描述 以下是目的操作数 = 源操作数的举例:

; ZF CF mov ax, 1000 mov cx, 1000 cmp cx, ax ; 1 0

在这里插入图片描述

以下是目的操作数 > 源操作数的举例:

;ZF CF mov ax, 105 cmp ax, 0 ;0 0

在这里插入图片描述 使用CMP指令统计data 段中数值为8的字节个数,用ax保存统计结果。

; 1.编程 统计data 段中数值为8的字节个数,用ax保存统计结果 assume cs:code, ds:data, ss:stack data segment db 8, 11, 8, 1, 8, 5, 63, 38 data ends stack segment stack db 128 dup(0) stack ends code segment start: mov ax, stack mov ss,ax mov sp, 128 call init_reg call get_eight mov ax, 4C00H int 21H ;============================================ get_eight: mov si,0 mov cx, 8 mov ax, 0 getEight: cmp byte ptr ds:[si], 8 jne nextNumber inc ax nextNumber: inc si loop getEight ret ;=============================================== init_reg: mov bx, data mov ds, bx ret code ends end start

在这里插入图片描述 使用 CMP指令 统计data 段中数值大于8的字节个数,用ax保存统计结果

; 2.编程 统计data 段中数值大于8的字节个数,用ax保存统计结果 assume cs:code, ds:data, ss:stack data segment db 8, 11, 8, 12, 8, 5, 63, 38 data ends stack segment stack db 128 dup(0) stack ends code segment start: mov ax, stack mov ss,ax mov sp, 128 call init_reg call get_eight mov ax, 4C00H int 21H ;============================================ get_eight: mov si,0 mov cx, 8 mov ax, 0 getEight: cmp byte ptr ds:[si], 8 jna nextNumber ; ja > na = bxCF = 0大于等于ax > bxCF = 0 并且 ZF = 0大于ax bl 如果 SF = 0 OF = 1 因为 SF = 0 不等式应该为 al - bl > 0 al > bl 当OF = 1 成立时,那么 al < bl 如果SF = 0 OF = 0 那么 al - bl > 0 得到 al > bl

如果因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正。

如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负。

基于无符号数比较的跳转

助记符说明JB小于跳转JNB不小于跳转JNBE不小于或等于跳转JA大于跳转JNA不大于跳转JNAE不大于或等于跳转

基于相等性的跳转

助记符说明JE相等跳转JNE不相等跳转JCXZCX = 0 跳转JECXZECX = 0 跳转JRCXZRCX = 0 跳转(64模式)

基于有符号数比较的跳转

助记符说明JG大于跳转JL小于跳转JNLE不小于或等于跳转JNGE不大于活等于跳转JGE大于或等于跳转JLE小于或等于跳转JNL不小于跳转JNG不大于跳转

基于进位和零标志位的跳转

助记符说明JC进位跳转(进位标志位置1)JNC无进位跳转(进位标志位清零)JZ为零跳转(零标志位置1)JNZ非零跳转(零标志位清零)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3