汇编语⾔中cmp指令⽤法笔记与总结
本⽂实例讲述了汇编语⾔中cmp指令⽤法。分享给⼤家供⼤家参考,具体如下:
cmp是⽐较指令,cmp的功能是相当于减法指令,只是不保存结果.cmp指令执⾏后,将对标志寄存器产⽣影响.其他相关指令通过识别这些被影响的标志寄存器来得知⽐较结果.
cmp指令格式: cmp 操作对象1,操作对象2
功能: 计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进⾏设置.⽐如cmp ax,ax 是做ax - ax 的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位.
汇编指令汇总指令执⾏后: zf = 1,pf = 1,sf = 0,cf = 0,of = 0;
下⾯的指令:
mov ax,8
mov bx,3
mov ax,bx
执⾏后: (ax)= 8,zf = 0,pf = 1,sf = 0, cf = 0, of = 0
如果 ax = bx 则 ax - bx = 0 ,所以 : zf = 1
如果 ax != bx 则ax - bx != 0,所以 : zf = 0
如果ax < bx 则ax - bx 将产⽣错位,所以 : cf = 1
如果 ax >= bx 则 ax - bx 将不必借位,所以 : cf = 0
如果ax > bx 则 ax - bx 既不必借位,结果⼜不为0, 所以 : cf = 0 并且 zf = 0
如果 ax <= bx 则ax - bx 既可能借位,结果可能为0,所以 : cf = 1 或 zf =1
检测⽐较结果的条件转移指令
je 等于则转移 zf=1
jne 不等于则转移 zf=0
jb 低于则转移 cf=1
jnb 不低于则转移 cf=0
ja ⾼于则转移 cf=0且zf=0
jna 不⾼于则转移 cf=1或zf=1
e : equal
ne : not equal
b: below
nb : not below
a : above
na : not above
编程: 统计data段中数值⼩于8的字节的个数,⽤ax保存统计结果
mov ax,data
mov ds,ax
mov ax,0 ;初始化累加器
mov bx,0 ;ds:bx指向第⼀个字节
mov cx,8
s : cmp byte ptr [bx] , 8 ;和8进⾏⽐较
jnb next ;如果不⼩于8转到next,继续循环
inc ax ;如果⼩于8就将计数值加1
next:inc bx
loop s
程序执⾏后: ax = 2
还有疑问的可以去查看⼀下指令⼿册,讲解的⽐较细致希望本⽂所述对⼤家汇编语⾔程序设计有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论