|
資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。
3: 2007-03-24 (土) 17:12:06 |
現: 2024-01-06 (土) 22:37:41 |
| 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になる。 |
| | | |
| | | |
| ;--- おまじない程度の理解にしておいて・・・ | | ;--- おまじない程度の理解にしておいて・・・ |
| ;------------------------------------------------ | | ;------------------------------------------------ |
- | | + | |
| + | |
| ;ここにアセンブラを書いていく | | ;ここにアセンブラを書いていく |
- | | + | |
| + | |
| ;------------------------------------------------------ | | ;------------------------------------------------------ |
| ;MS-DOS終了 | | ;MS-DOS終了 |
| INT 0x20 | | INT 0x20 |
| ;------------------------------------------------------ | | ;------------------------------------------------------ |
Counter: 2504,
today: 2,
yesterday: 0
|