汇编中 cmp 求解汇编中CMP比较的意思

\u6c47\u7f16\u8bed\u8a00\u4e2dCMP\u662f\u4ec0\u4e48\u610f\u601d\uff1f

cmp\u662f\u6bd4\u8f83\u6307\u4ee4\uff0c cmp\u7684\u529f\u80fd\u76f8\u5f53\u4e8e\u51cf\u6cd5\u6307\u4ee4\uff0c\u53ea\u662f\u4e0d\u4fdd\u5b58\u7ed3\u679c\u3002cmp\u6307\u4ee4\u6267\u884c\u540e\uff0c\u5c06\u5bf9\u6807\u5fd7\u5bc4\u5b58\u5668\u4ea7\u751f\u5f71\u54cd\u3002\u5176\u4ed6\u76f8\u5173\u6307\u4ee4\u901a\u8fc7\u8bc6\u522b\u8fd9\u4e9b\u88ab\u5f71\u54cd\u7684\u6807\u5fd7\u5bc4\u5b58\u5668\u4f4d\u6765\u5f97\u77e5\u6bd4\u8f83\u7ed3\u679c\u3002
\u6bd4\u5982\uff1a
mov ax,8
mov bx,3
cmp ax,bx
\u6267\u884c\u540e\uff1aax=8,ZF=0,PF=1,SF=0,CF=0,OF=0.
\u901a\u8fc7cmp\u6307\u4ee4\u6267\u884c\u540e\uff0c\u76f8\u5173\u6807\u5fd7\u4f4d\u7684\u503c\u5c31\u53ef\u4ee5\u770b\u51fa\u6bd4\u8f83\u7684\u7ed3\u679c\u3002
cmp ax,bx\u7684\u903b\u8f91\u542b\u4e49\u662f\u6bd4\u8f83ax,bx\u4e2d\u7684\u503c\u3002\u5982\u679c\u6267\u884c\u540e\uff1a
ZF=1\u5219AX=BX
ZF=0\u5219AX\uff01=BX
SF=1\u5219AX<BX
SF=0\u5219AX>=BX
SF=0\u5e76ZF=0\u5219AX>BX
SF=1\u6216ZF=1\u5219AX<=BX
CPU\u5728\u6267\u884ccmp\u6307\u4ee4\u7684\u65f6\u5019\uff0c\u4e5f\u5305\u542b\u4e24\u79cd\u542b\u4e49\uff1a\u8fdb\u884c\u65e0\u7b26\u53f7\u8fd0\u7b97\u548c\u8fdb\u884c\u6709\u7b26\u53f7\u6570\u8fd0\u7b97\u3002
cmp ah,bh
\u5982\u679cah=bh\u5219ah-bh=0\u6240\u4ee5ZF=1
\u5982\u679cah\u2260bh\u5219ah-bh\u22600\u6240\u4ee5ZF=0
\u6240\u4ee5\u6211\u4eec\u6839\u636ecmp\u6307\u4ee4\u6267\u884c\u540eZF\u7684\u503c\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u4e24\u4e2a\u6570\u636e\u662f\u5426\u76f8\u7b49\u3002\u5982\u679cah<bh\u5219\u53ef\u80fd\u53d1\u751f\u4ec0\u4e48\u60c5\u51b5\u5462\uff1f
\u5bf9\u4e8e\u6709\u7b26\u53f7\u6570\u8fd0\u7b97\uff0c\u5728ah<bh\u60c5\u51b5\u4e0b\uff0cah-bh\u663e\u7136\u53ef\u80fd\u5f15\u8d77SF=1\u65e2\u7ed3\u679c\u4e3a\u8d1f\u6bd4\u5982\uff1a
ah=1\uff0cbh=2\u5219ah-bh=0FFH\uff0c0FFH\u4e3a-1\u7684\u8865\u7801\uff0c\u56e0\u4e3a\u7ed3\u679c\u4e3a\u8d1f\uff0c\u6240\u4ee5SF=1\u3002
ah=0FEH\uff0cbx=OFFH\uff1b\u5219ax-bx=-2-(-1)=OFFH,\u56e0\u4e3a\u7ed3\u679c\u4e3a\u8d1f\uff0c\u6240\u4ee5SF=1\u3002

\u6269\u5c55\u8d44\u6599\uff1a
\u6c47\u7f16\u8bed\u8a00\u7684\u5e38\u7528\u6307\u4ee4\u96c6\u5982\u4e0b\uff1a
\u6570\u636e\u4f20\u9001\u6307\u4ee4\u96c6
MOV
\u529f\u80fd: \u628a\u6e90\u64cd\u4f5c\u6570\u9001\u7ed9\u76ee\u7684\u64cd\u4f5c\u6570
\u8bed\u6cd5: MOV \u76ee\u7684\u64cd\u4f5c\u6570,\u6e90\u64cd\u4f5c\u6570
\u683c\u5f0f: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
XCHG
\u529f\u80fd: \u4ea4\u6362\u4e24\u4e2a\u64cd\u4f5c\u6570\u7684\u6570\u636e
\u8bed\u6cd5: XCHG
\u683c\u5f0f: XCHG r1,r2 XCHG m,r XCHG r,m
PUSH,POP
\u529f\u80fd: \u628a\u64cd\u4f5c\u6570\u538b\u5165\u6216\u53d6\u51fa\u5806\u6808
\u8bed\u6cd5: PUSH\u64cd\u4f5c\u6570POP \u64cd\u4f5c\u6570
\u683c\u5f0f: PUSH r PUSH M PUSH data POP r POP m
PUSHF,POPF,PUSHA,POPA
\u529f\u80fd:\u5806\u6808\u6307\u4ee4\u7fa4
\u683c\u5f0f: PUSHF POPF PUSHA POPA
LEA,LDS,LES
\u529f\u80fd: \u53d6\u5730\u5740\u81f3\u5bc4\u5b58\u5668
\u8bed\u6cd5: LEA r,m LDS r,m LES r,m
XLAT(XLATB)
\u529f\u80fd:\u67e5\u8868\u6307\u4ee4
\u8bed\u6cd5: XLAT XLAT m
\u7b97\u672f\u8fd0\u7b97\u6307\u4ee4
ADD,ADC
\u529f\u80fd: \u52a0\u6cd5\u6307\u4ee4
\u8bed\u6cd5: ADD OP1,OP2 ADC OP1,OP2
\u683c\u5f0f: ADD r1,r2 ADD r,m ADD m,r ADD r,data
\u5f71\u54cd\u6807\u5fd7: C,P,A,Z,S,O
SUB,SBB
\u529f\u80fd:\u51cf\u6cd5\u6307\u4ee4
\u8bed\u6cd5: SUB OP1,OP2 SBB OP1,OP2
\u683c\u5f0f: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
\u5f71\u54cd\u6807\u5fd7: C,P,A,Z,S,O
INC,DEC
\u529f\u80fd: \u628aOP\u7684\u503c\u52a0\u4e00\u6216\u51cf\u4e00
\u8bed\u6cd5: INC OP DEC OP
\u683c\u5f0f: INC r/m DEC r/m
\u5f71\u54cd\u6807\u5fd7: P,A,Z,S,O
NEG
\u529f\u80fd: \u5c06OP\u7684\u7b26\u53f7\u53cd\u76f8(\u53d6\u4e8c\u8fdb\u5236\u8865\u7801)
\u8bed\u6cd5: NEG OP
\u683c\u5f0f: NEG r/m
\u5f71\u54cd\u6807\u5fd7: C,P,A,Z,S,O
MUL,IMUL
\u529f\u80fd: \u4e58\u6cd5\u6307\u4ee4
\u8bed\u6cd5: MUL OP IMUL OP
\u683c\u5f0f: MUL r/m IMUL r/m
\u5f71\u54cd\u6807\u5fd7: C,P,A,Z,S,O(\u4ec5IMUL\u4f1a\u5f71\u54cdS\u6807\u5fd7)
DIV,IDIV
\u529f\u80fd:\u9664\u6cd5\u6307\u4ee4
\u8bed\u6cd5: DIV OP IDIV OP
\u683c\u5f0f: DIV r/m IDIV r/m
CBW,CWD
\u529f\u80fd:\u6709\u7b26\u53f7\u6570\u6269\u5c55\u6307\u4ee4
\u8bed\u6cd5: CBW CWD
AAA,AAS,AAM,AAD
\u529f\u80fd: \u975e\u538bBCD\u7801\u8fd0\u7b97\u8c03\u6574\u6307\u4ee4
\u8bed\u6cd5: AAA AAS AAM AAD
\u5f71\u54cd\u6807\u5fd7: A,C(AAA,AAS) S,Z,P(AAM,AAD)
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-CMP\u6307\u4ee4

cmp\u5c31\u662f\u4e3a\u4e86\u8bbe\u7f6e\u63a7\u5236\u4f4d\uff0c\u4e0d\u4f1a\u6539\u53d8\u6570\u503c\uff0c\u5982\u4f60\u5199\u7684\u4ee3\u7801\uff0c \u5c31\u662f \u7528ecx - edx \u5224\u65ad \u8fd9\u4e2a\u7ed3\u679c\u3002
\u5982\u679c\u8bbe\u7f6ezf\u6807\u5fd7\u4f4d\u4e3a0\u5c31\u662fECX\u548cEDX\u76f8\u7b49\u4e86\uff0c\u4e0d\u4f1a\u8df3\u8f6c\uff0c CF=1 \u5219\u8bf4\u660e\u4e86\u6709\u8fdb\u4f4d\u6216\u501f\u4f4d\uff0ccmp\u662f\u8fdb\u884c\u7684\u51cf\u64cd\u4f5c\uff0c\u6545\u53ef\u4ee5\u770b\u51fa\u4e3a\u501f\u4f4d\uff0c\u6240\u4ee5\uff0c\u6b64\u65f6ecx < edx
CF=0 \u5219\u8bf4\u660e\u4e86\u65e0\u501f\u4f4d\uff0c\u4f46\u6b64\u65f6\u8981\u6ce8\u610fZF\u662f\u5426\u4e3a0\uff0c\u82e5\u4e3a0\uff0c\u5219\u8bf4\u660e\u7ed3\u679c\u4e0d\u4e3a0\uff0c\u6545\u6b64\u65f6ecx > edx


jg xxx \u5c31\u662f\u5f53\u5927\u4e8e\u7684\u65f6\u5019\u5c31\u8df3\u8f6c\uff0c\u6240\u4ee5 \u5c31\u662f\u5f53 ecx > edx\u7684\u65f6\u5019 \u5b83\u5c31\u8df3\u5230\u4e00\u4e2axx\u7684\u4f4d\u7f6e\u3002\u3002

cmp(compare)指令进行比较两个操作数的大小。



可以认为是compare(比较)的意思。在进行比较的时候将个数做减法运算,这个运算是影响符号位的,(大数减小数,符号位为+,反则为-)所以执行该指令后你可以通过查询符号位CF是0还是1就可以知道两个数那个大了。

比如cmp ah,al。
及进行ah-al操作,不过不保存结果,只影响标志位。
jnc和jc即根据cf标志位的结果进行跳转。
至于如何影响:如果减数大于被减数,此时有借位。则将cf位置1,否则置0.
你说的找最大值。ah-al>0,则减数不大于被减数。cf置0,jnc(jump if not cf)条件成立,则跳转到l2,ah为两者之中较大的一个。

扩展阅读:java入门网站 ... csp报名官网入口 ... cme交易所官网 ... clip studio paint ... 汇编cmp什么意思 ... 日本smc ... cmc行情网站 ... 汇编cmp指令 ... 汇编cmp跳转 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网