指令详解
2011-03-25 23:57
375 查看
1、test指令
测试指令
格式:TEST DEST,SRC
功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数。
例1:
TEST DWORD PTR [BX],80000000H
TEST AL,CL
TEST指令常用于测试操作数中某位是否为1,而且不会影响目的操作数。如果测试某位的状态,对某位进行逻辑与1的运算,其它位逻辑与0,然后判断标志位。运算结果为0,ZF=1,表示被测试位为0;否则ZF=0,表示被测试位为1。
例2: TEST AL,80H;测试AL中最高位
JNZ NEXT;如果最高位为1,转到标志NEXT处。
TEST指令影响标志位为SF,ZF,PF,并且使OF=CF=0。
2、cmp指令
比较指令
格式:CMP DEST,SRC
功能:目的操作数减源操作数,结果不回送。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。
CMP指令影响标志位为OF,SF,ZF,AF,PF,CF。
例 3.29
CMP CX,3
CMP WORD PTR [SI],3
CMP AX,BLOCK
执行比较指令后,对状态标志位影响见表3.2。对于两个数的比较(AX-BX)有以下3种情况。
表CMP指令对标志位的影响
· 两个正数比较,使用SF标志位判断。
SF=0,则AX≥BX,若ZF=1,则AX=BX
SF=1,则AX<BX
· 两个无符号数比较,使用CF标志位判断。
CF=0,则AX≥BX,若ZF=1,则AX=BX
CF=1,则AX<BX
· 两个负数比较,使用SF标志位判断。
SF=0,则AX≥BX,若ZF=1,则AX=BX
SF=1,则AX<BX
· 两个异符号数比较。
如果OF=0,仍可用SF标志判断大小。
如果OF=1,说明结果的符号位发生错误,所以
SF=0,则AX<BX
SF=1,则AX>BX
综上所述:两个异号数比较
当OF=0,SF=0,则AX>BX
SF=1,则AX<BX
当OF=1,SF=0,则AX<BX
SF=1,则AX>BX
用逻辑表达式表示为:
若OF∨-SF=0,则AX>BX
若OF∨-SF=1,则AX<BX
测试指令
格式:TEST DEST,SRC
功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数。
例1:
TEST DWORD PTR [BX],80000000H
TEST AL,CL
TEST指令常用于测试操作数中某位是否为1,而且不会影响目的操作数。如果测试某位的状态,对某位进行逻辑与1的运算,其它位逻辑与0,然后判断标志位。运算结果为0,ZF=1,表示被测试位为0;否则ZF=0,表示被测试位为1。
例2: TEST AL,80H;测试AL中最高位
JNZ NEXT;如果最高位为1,转到标志NEXT处。
TEST指令影响标志位为SF,ZF,PF,并且使OF=CF=0。
2、cmp指令
比较指令
格式:CMP DEST,SRC
功能:目的操作数减源操作数,结果不回送。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。
CMP指令影响标志位为OF,SF,ZF,AF,PF,CF。
例 3.29
CMP CX,3
CMP WORD PTR [SI],3
CMP AX,BLOCK
执行比较指令后,对状态标志位影响见表3.2。对于两个数的比较(AX-BX)有以下3种情况。
表CMP指令对标志位的影响
· 两个正数比较,使用SF标志位判断。
SF=0,则AX≥BX,若ZF=1,则AX=BX
SF=1,则AX<BX
· 两个无符号数比较,使用CF标志位判断。
CF=0,则AX≥BX,若ZF=1,则AX=BX
CF=1,则AX<BX
· 两个负数比较,使用SF标志位判断。
SF=0,则AX≥BX,若ZF=1,则AX=BX
SF=1,则AX<BX
· 两个异符号数比较。
如果OF=0,仍可用SF标志判断大小。
如果OF=1,说明结果的符号位发生错误,所以
SF=0,则AX<BX
SF=1,则AX>BX
综上所述:两个异号数比较
当OF=0,SF=0,则AX>BX
SF=1,则AX<BX
当OF=1,SF=0,则AX<BX
SF=1,则AX>BX
用逻辑表达式表示为:
若OF∨-SF=0,则AX>BX
若OF∨-SF=1,则AX<BX
相关文章推荐
- 银联IC卡读卡流程详解--读卡器与卡交互指令
- angularjs指令详解
- ARM 汇编伪指令宏的用法详解(MACRO-MEND)
- cmake指令详解
- Linux文本比较指令(diff,cmp)详解
- 单片机 时间周期、机器周期、指令周期详解
- angularJs指令详解
- CentOS下rpm指令和yum指令详解
- angularjs指令中的compile与link函数详解
- git diff 指令详解
- 《AngularJS》5个实例详解Directive(指令)机制
- 汇编cmp比较指令详解
- Nginx RTMP 模块 nginx-rtmp-module 指令详解
- armsd 指令详解
- #ifdef预编译指令详解
- Apache系列—httpd.conf文件指令详解
- AngularJS 指令的 Scope 作用域的详解
- DNS查询指令:host 、nslookup 、dig 详解
- grep指令详解
- linux 路由表设置 之 route 指令详解