資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。
3: 2007-11-27 (Tue) 13:55:43 source Edit Backup No.3 as current. Cur: 2024-01-06 (Sat) 22:37:41 source Edit
Line 1: Line 1:
[[FrontPage]] [[FrontPage]]
-比較を行う+比較を行う。~
比較の結果は各フラグで判定できる 比較の結果は各フラグで判定できる
- CMP    AX,BX           ;AXの内容とBXの内容を比較する+*できること [#p6f6d78f] 
 + CMP    AX,BX             ;レジスタとレジスタを比較する 
 +  
 + CMP    AX,[0x200]        ;レジスタとメモリの内容を比較する 
 +  
 + CMP    AX,0x3F            ;レジスタと即値を比較する 
 +  
 + CMP    [0x200],0x3F      ;メモリの内容と即値を比較する 
 + ;
 +*できないこと [#x91ab0f2]
 + CMP    [0x200],[0x250]    ;メモリの内容同士を直接比較する
 + 
 + CMP    0x3F,0xA8          ;即値同士を直接比較する
 + 
 + CMP    ES,[0x250]        ;セグメントレジスタが絡む比較
 +----
 +-CMPで比較を行っても値はまったく変化しない。FLAGSのレジスタが変化するだけである。
-*結果 [#i071c2c0] +-比較した後は各種ジャンプ命令で条件分岐を行う。詳しくは[[こちら>NASK/条件分岐]]を。
--同じだった!!! +
- MOV    AX,0x20 +
- MOV    BX,0x20 +
- CMP    AX,BX+
-結果、各種フラグがセットされますのでそのすぐ下で条件ジャンプをします。+*ウンチク [#hd8d5049] 
 +以下は知らなくても実用上はあまり問題ではない話。
-*単純な比較 [#b4dedf8a] 
- JZ    xxxxH        ;AXとBXが同じだったらジャンプ! 
- JE    xxxxH        ;AXとBXが同じだったらジャンプ! 
- JNZ    xxxxH        ;AXとBXが違っていたらジャンプ! +CMP命令はSUBと同じ法則でFLAGSを変化させる。いうなれば''値が変化しない引き算''と言える。
- JNE    xxxxH        ;AXとBXが違っていたらジャンプ!+
-*符号なし整数比較 [#a5818235] +具体的には以下のように各フラグが変化する。
-頭のビットを符号としないで比較する。Cの変数でいえばunsignedで宣言した変数のようなもの+
- JA      xxxxH      ;AXのほうが大きかった( AX > BX )らジャンプ! 
- JNBE    xxxxH      ;AXのほうが大きかった( AX > BX )らジャンプ! 
- JB xxxxH      ;BXのほうが大きかった( AX < BX )らジャンプ! 
- JNAE    xxxxH      ;BXのほうが大きかった( AX < BX )らジャンプ! 
- JAE    xxxxH        ;AXがBX以上( AX >= BX )ならジャンプ! + CMP  AX,BX
- JNB    xxxxH        ;AXがBX以上( AX >= BX )ならジャンプ!+
-&nbsp;JBE    xxxxH        ;AXがBX以下( AX &lt;= BX )ならジャンプ! +|        |&gt;|&gt;|&gt;|&gt;|&gt;|>|&gt;|>|&gt;|&gt;|&gt;|&gt;|&gt;|>|CENTER:FLAGS|h 
-&nbsp;JNA    xxxxH        ;AXがBX以下( AX &lt;= BX )ならジャンプ! +|~CMP結果|~ |~NT|~IOPL|~0F|~DF|~IF|~TF|~SF|~ZF|~ |~AF|~ |~PF|~ |~CF| 
- +| AX > BX|-|-|-|-|-|-|-|-|0|-|-|-|-|-|0| 
- +| AX = BX|-|-|-|-|-|-|-|-|1|-|-|-|-|-|0| 
-*符号あり整数比較 [#fad58d64] +| AX < BX|-|-|-|-|-|-|-|-|0|-|-|-|-|-|1|
-頭のビットを符号として比較する。 +
- +
-&nbsp;JG      xxxxH      ;AXのほうが大きかった( AX > BX )らジャンプ! +
-&nbsp;JNLE    xxxxH      ;AXのほうが大きかった( AX > BX )らジャンプ! +
- +
-&nbsp;JL xxxxH      ;BXのほうが大きかった( AX &lt; BX )らジャンプ! +
-&nbsp;JNGE    xxxxH      ;BXのほうが大きかった( AX &lt; BX )らジャンプ! +
- +
-&nbsp;JGE    xxxxH        ;AXがBX以上( AX >= BX )ならジャンプ! +
- JNL    xxxxH        ;AXがBX以上( AX >= BX )ならジャンプ! +
- +
- JLE    xxxxH        ;AXがBX以下( AX <= BX )ならジャンプ! +
- JNG    xxxxH        ;AXがBX以下( AX <= BX )ならジャンプ! +
- +
-*符号とは? [#obc13660] +
-レジスタにセットされた16進数の値を、符号付き変数とするか符合なし変数と捕らえるか。(これは最後はプログラマの判断になる) +
- +
-たとえば、AXレジスタに0xFFをセットしたとする。この0xFFを符号なしと捕らえると、255という値になるが、符号付だと解釈すると-1という扱いになる。 +
- +
-これを意識せずに比較を行うとおかしくなってしまうわけ。 +
- +
-そのため、比較命令はおのおの、符号ありと符号なしに分かれて別々に用意されている。+


Front page   Edit Diff Backup Upload Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 4381, today: 2, yesterday: 2