汇编语⾔CMP指令
CMP(⽐较)指令执⾏从⽬的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数。
指令格式:
CMP ⽬的操作数, 源操作数
标志位 当实际的减法发⽣时,CMP指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。如果⽐较的是两个⽆符号数,则零标志位和进位标志位表⽰的两个操作数之间的关系如下表所⽰:
CMP结果ZF CF
⽬的操作数 < 源操作数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 <=
inc ax
nextNumber:  inc si
loop getEight
ret
;=============================================== init_reg:
mov bx, data
mov ds, bx
ret
code ends
比较指令cmp怎么用
end start

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。