⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 比较指令.htm

📁 ARM指令集
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.linuxforum.net/books/mhss/arm/cmp.html -->
<HTML><HEAD><TITLE>Comparison instructions</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Content-Language content=zh-cn>
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY text=#000000 vLink=#002288 link=#0022dd bgColor=#f0f0f0>
<TABLE width="100%" border=0>
  <TBODY>
  <TR>
    <TD align=middle width=100></TD>
    <TD>
      <H1 align=center><FONT color=#800080>比较指令</FONT></H1></TD>
    <TD align=middle width=100></TD></TR></TBODY></TABLE>
<UL>
  <LI><A href="http://www.linuxforum.net/books/mhss/arm/cmp.html#cmn">CMN</A> 
  <LI><A href="http://www.linuxforum.net/books/mhss/arm/cmp.html#cmp">CMP</A> 
  <LI><A href="http://www.linuxforum.net/books/mhss/arm/cmp.html#teq">TEQ</A> 
  <LI><A href="http://www.linuxforum.net/books/mhss/arm/cmp.html#tst">TST</A> 
  </LI></UL>
<P><A 
href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Data">指令格式</A></P>
<P>译注:CMP 和 CMP 是算术指令,TEQ 和 TST 是逻辑指令。把它们归入一类的原因是它们的 S 位总是设置的,就是说,它们总是影响标志位。</P>
<P><A name=cmn></A></P>
<H2>CMN : 比较取负的值</H2>
<P>(<FONT color=#0000ff>C</FONT>o<FONT color=#0000ff>m</FONT>pare <FONT 
color=#0000ff>N</FONT>egative)</P><PRE>  CMN{条件}{P}  &lt;op 1&gt;, &lt;op 2&gt;

                status = op_1 - (- op_2)
</PRE><CODE>CMN</CODE> 同于 <CODE>CMP</CODE>,但它允许你与小负值(操作数 2 
的取负的值)进行比较,比如难于用其他方法实现的用于结束列表的 -1。这样与 -1 比较将使用: <PRE>  CMN     R0, #1                  ; 把 R0 与 -1 进行比较
</PRE>详情参照 <CODE>CMP</CODE> 指令。 
<P>  
<P><A name=cmp></A></P>
<H2>CMP : 比较</H2>
<P>(<FONT color=#0000ff>C</FONT>o<FONT color=#0000ff>mp</FONT>are)</P><PRE> CMP{条件}{P}  &lt;op 1&gt;, &lt;op 2&gt;

                status = op_1 - op_2
</PRE><CODE>CMP</CODE> 
允许把一个寄存器的内容如另一个寄存器的内容或立即值进行比较,更改状态标志来允许进行条件执行。它进行一次减法,但不存储结果,而是正确的更改标志。标志表示的是操作数 
1 比操作数 2 如何(大小等)。如果操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指令将可以执行。<BR>明显的,你不需要显式的指定 
<CODE>S</CODE> 后缀来更改状态标志... 如果你指定了它则被忽略。 
<P>  
<P><A name=teq></A></P>
<H2>TEQ : 测试等价</H2>
<P>(<FONT color=#0000ff>T</FONT>est <FONT color=#0000ff>Eq</FONT>uivalence)</P><PRE>  TEQ{条件}{P}  &lt;op 1&gt;, &lt;op 2&gt;

                Status = op_1 EOR op_2
</PRE><CODE>TEQ</CODE> 类似于 <CODE>TST</CODE>。区别是这里的概念上的计算是 EOR 而不是 
AND。这提供了一种查看两个操作数是否相同而又不影响进位标志(不象 <CODE>CMP </CODE>那样)的方法。加上 <CODE>P</CODE> 后缀的 
<CODE>TEQ</CODE> 还可用于改变 R15 中的标志(在 26-bit 模式中)。详情请参照 <A 
href="http://www.linuxforum.net/books/mhss/arm/psr.html">psr.html</A>,在 32-bit 
模式下如何做请参见<A 
href="http://www.linuxforum.net/books/mhss/arm/psr.html#32bit">这里</A>。 
<P>  
<P><A name=tst></A></P>
<H2>TST : 测试位</H2>
<P>(<FONT color=#0000ff>T</FONT>e<FONT color=#0000ff>st</FONT> bits)</P><PRE>  TST{条件}{P}  &lt;op 1&gt;, &lt;op 2&gt;

                Status = op_1 AND op_2
</PRE><CODE>TST</CODE> 类似于 
<CODE>CMP</CODE>,不产生放置到目的寄存器中的结果。而是在给出的两个操作数上进行操作并把结果反映到状态标志上。使用 
<CODE>TST</CODE> 来检查是否设置了特定的位。操作数 1 是要测试的数据字而操作数 2 是一个位掩码。经过测试后,如果匹配则设置 Zero 
标志,否则清除它。象 <CODE>CMP</CODE><CODE> </CODE>那样,你不需要指定 <CODE>S</CODE> 后缀。 <PRE>  TST     R0, #%1                 ; 测试在 R0 中是否设置了位 0。 
</PRE>
<P> 
<HR SIZE=3>
<A href="http://www.linuxforum.net/books/mhss/arm/index.html">Return to 
assembler index</A> 
<HR SIZE=3>

<ADDRESS>Copyright &copy; 2001 Richard Murray </ADDRESS></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -