資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。

ビットを一部だけ操作したい anchor.png Edit

0x1Fなどの8ビットや16ビットのデータ。あるいはフラグなどのレジスタ。時々、その数値全体ではなく、ビット単位で操作したい場合があります。

Page Top

特定のビットを強制的に1にしたい anchor.png Edit

1にしたいビットだけ1にした値をORしてやる。

MOV   AL,00000000B
OR    AL,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 と同じ。(意味がない)
Page Top

特定のビットを強制的に0にしたい anchor.png Edit

上記のORと理屈はまったく同じ。 0にしたいビットだけ0にした値をANDしてやる。

MOV   AL,10110110B
AND   AL,11101111B

結果は 10100110B となる。つまり、5番目のビットだけが0になり、他には影響しない。

同じく対象のビットが元々0だったら変化はないことになる

Page Top

特定のビットを強制的に反転したい anchor.png Edit

反転させたい部分だけ1にした値をXORしてやる。

MOV   AL,10110110B
XOR   AL,00010000B  ←元の値の5ビット目だけ、もし1なら0、もし0なら1になる。
Page Top

MS-DOSで動くcom形式のソフトを作りたい anchor.png Edit

下記を雛形にして書いてゆけば良い

;------------------------------------------------
;--------------  MS-DOS用定義  -----------------
[BITS 16]
[OPTIMIZE 1]
[OPTION 1]
[INSTRSET "8086"]
[FORMAT "BIN"]
ORG 0x100
;------------------------------------------------
;--- ↑はとりあえずはMS-DOSのcomを作る時の
;---   おまじない程度の理解にしておいて・・・
;------------------------------------------------


;ここにアセンブラを書いていく


;------------------------------------------------------
 ;MS-DOS終了
INT 0x20
;------------------------------------------------------

Front page   Edit Freeze 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: 2414, today: 1, yesterday: 0
Last-modified: 2012-10-22 (Mon) 21:57:57 (GMT) (2820d) by