資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。
3: 2007-03-24 (土) 17:12:06 ソース バックアップ No.3 を復元して編集 現: 2024-01-06 (土) 22:37:41 ソース 編集
Line 3: Line 3:
0x1Fなどの8ビットや16ビットのデータ。あるいはフラグなどのレジスタ。時々、その数値全体ではなく、ビット単位で操作したい場合があります。 0x1Fなどの8ビットや16ビットのデータ。あるいはフラグなどのレジスタ。時々、その数値全体ではなく、ビット単位で操作したい場合があります。
-***特定のビットだけを1なり0なりにしたい。 [#ccf582da]+***特定のビットを強制的に1にしたい [#ccf582da]
 +1にしたいビットだけ1にした値をORしてやる。
 MOV  AL,00000000B  MOV  AL,00000000B
 OR    AL,00001000B  OR    AL,00001000B
-たとえばこうすると、結果は00001000Bとなる。+たとえばこうすると、結果は00001000Bとなる。ORする数値(この例では00001000B)は1にしたい部分だけを1にすればそこだけ強制的に1になる。 
 + MOV    AL,00000000B 
 + OR    AL,01001001B  ←こうすると7ビット目、4ビット目、1ビット目だけ1になる 
 +''もし指定のビットが元々1だったら変化はない'' 
 + 意味はないが実験 
 + MOV    AL,00000000B 
 + OR    AL,00000000B  ←演算はされるが結果は無変化。(意味がない) 
 +  
 + MOV    AL,00000000B 
 + OR    AL,11111111B  ←演算はされるが結果は MOV AL,0xFF と同じ。(意味がない)
 + 
-この方法は、ALの他のビットがいろいろでも同じ。+ 
 + 
 + 
 +***特定のビットを強制的に0にしたい [#ccf582da] 
 + 
 +上記のORと理屈はまったく同じ。 
 +0にしたいビットだけ0にした値をANDしてやる。
 MOV  AL,10110110B  MOV  AL,10110110B
- OR    AL,00001000B+ AND  AL,11101111B
-結果は 10111110B となる。つまり、5番目のビットだけが1になり、他には影響しない。+結果は 10100110B となる。つまり、5番目のビットだけが0になり、他には影響しない。
 +''同じく対象のビットが元々0だったら変化はないことになる''
 +
 +
 +***特定のビットを強制的に反転したい [#ccf582da]
 +
 +反転させたい部分だけ1にした値をXORしてやる。
 +
 + MOV  AL,10110110B
 + XOR  AL,00010000B  ←元の値の5ビット目だけ、もし1なら0、もし0なら1になる。
Line 42: Line 68:
 ;---  おまじない程度の理解にしておいて・・・  ;---  おまじない程度の理解にしておいて・・・
 ;------------------------------------------------  ;------------------------------------------------
- +  
 + 
 ;ここにアセンブラを書いていく  ;ここにアセンブラを書いていく
- +  
 + 
 ;------------------------------------------------------  ;------------------------------------------------------
  ;MS-DOS終了   ;MS-DOS終了
 INT 0x20  INT 0x20
 ;------------------------------------------------------  ;------------------------------------------------------


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 2413, today: 1, yesterday: 0