Geser biner dan manipulasi bit
| English | Bahasa Indonesia |
|---|---|
| bit/bɪt/ | bit |
| mask/mæsk/ | masker |
| logical shift/ˈlɒdʒɪkl ʃɪft/ | geser logika |
| sign bit/saɪn bɪt/ | bit tanda |
| arithmetic right shift/ˌærɪθˈmetɪk raɪt ʃɪft/ | geser aritmatika ke kanan |
| cyclic shift/ˈsaɪklɪk ʃɪft/ | geser siklis |
Mengalikan pada chip yang tidak dapat mengalikan
- Prosesor di Game Boy 1989 tidak memiliki instruksi perkalian sama sekali. Setiap skor, setiap koordinat yang membutuhkan penggandaan digandakan dengan menggeser bit-nya satu tempat ke kiri.
- Satu geseran memakan satu tikt clock. Perkalian yang dibangun dari geseran dan penjumlahan adalah bagaimana game-game tersebut berjalan pada beberapa kilobyte dan sejumlah miliwatt.
- Trik yang sama mengendalikan kawat tunggal dalam perangkat tertanam: satu bit register per sensor atau aktuator, diuji dan diset dengan mask.
- Pelajaran ini adalah tiga jenis geseran dan empat operasi mask, sesuai instruksi ujian.
Geseran logika
- Geseran logika menggerakkan setiap bit ke kiri atau kanan sejauh beberapa tempat dan mengisi posisi yang kosong dengan 0.
LSL #1menggeser bit ke kiri dan 0 masuk dari kanan: untuk bilangan tak bertanda itu berarti × 2.LSR #1menggesernya ke kanan dan 0 masuk dari kiri: integer ÷ 2.- Menggeser sebanyak $n$ tempat mengalikan atau membagi dengan $2^{n}$.
00001011(11) setelahLSL #1adalah00010110(22); setelahLSR #1menjadi00000101(5, sisa hilang).

Kiri logika (× 2), kanan logika (÷ 2) dan kanan aritmatika (menjaga bit tanda)
Geser dan mask bit-bit byte
Pilih operator dan perhatikan setiap hasil bit. Geser kiri (<<) moves every bit up one place (×2); a right shift (>>) memindahkannya ke bawah (÷2); AND dengan mask menghapus bit yang tidak diinginkan.
Nilai 8-bit 00001011 (11) digeser kiri sebanyak 1 (LSL #1). Berapakah nilai desimal yang baru?
Geser kiri 1 kali mengalikan dengan 2: $11 \times 2 = 22$ (00010110).
Menggeser bilangan tak bertanda ke kiri sebanyak 3 tempat mengalikannya dengan angka berapa?
Menggeser $n$ tempat mengalikan dengan $2^n$, jadi geser 3 tempat adalah $2^3 = 8$.
Contoh terpecahkan: kapan × 4 berhenti benar
- Bit yang tergeser keluar dari ujung hilang, sehingga perkalian hanya benar selama bit-bit tersebut adalah nol.
LSL #2pada byte dua komplemen11001010menghasilkan00101000. Dua angka 1 yang jatuh dari kiri hilang, bit tanda telah berubah, dan hasilnya tidak lagi empat kali nilai awal.LSL #2pada00001011(11) menghasilkan00101100(44), yang benar, karena hanya nol yang hilang.- Ujian meminta keduanya: pola yang digeser, dan komentar apakah nilainya masih benar.
Geseran kanan aritmatika
- Geseran kanan logika biasa memasukkan 0 ke bit paling atas, yang akan mengubah bilangan dua komplemen negatif menjadi positif.
- Geseran kanan aritmatika menyalin bit tanda ke setiap posisi yang kosong, sehingga bilangan negatif tetap negatif dan geseran tetap membagi dengan 2.
10011110digeser aritmatika ke kanan sebanyak 3 tempat menjadi11110011;01011100menghasilkan00001011.

Geseran kanan logika dan aritmatika pada byte yang sama: hanya bit yang masuk berbeda
Geser kanan aritmatika berbeda dari geser kanan logika karena ia:
Ini mempertahankan bit tanda, sehingga membagi bilangan bertanda negatif dengan pangkat 2 membuatnya tetap negatif.
Geser kanan logika selalu menempatkan 0 di bit tertinggi, sehingga dapat mengubah bilangan bertanda negatif menjadi positif.
Itulah tepat mengapa pembagian bertanda memerlukan geser kanan aritmatika, yang menyalin bit tanda alih-alih.
Geser kanan aritmatika dari 10011110 sebanyak 3 tempat menghasilkan pola 8-bit ____.
Tiga tempat yang kosong di sebelah kiri diisi dengan salinan bit tanda, 1, dan tiga bit terkanan 110 terlempar keluar.
Geseran siklik
- Geseran siklik, atau rotasi, memasukkan kembali bit yang jatuh dari satu ujung ke ujung lainnya, sehingga tidak ada bit yang hilang.
- Geseran kiri siklik 1 pada
10000110menghasilkan00001101: angka 1 di depan muncul kembali di sebelah kanan. - Geseran logika diisi dengan nol, geseran aritmatika diisi dengan bit tanda, geseran siklik diisi dengan bit yang keluar. Itulah seluruh perbedaan antara ketiganya.
Geser kiri siklik 1 tempat diterapkan pada 10000110. Apa hasilnya?
1 teratas meninggalkan sisi kiri dan masuk kembali di sisi kanan, sehingga tidak ada bit yang hilang. 00001100 akan menjadi geser logika.
Contoh terpecahkan: 240 atau minus 16?
- Ambil
11110000. Dibaca sebagai bilangan tak bertanda nilainya 240; dibaca sebagai dua komplemen nilainya −16. LSR #1引入 0 dan menghasilkan01111000= 120, separuh yang benar dari 240.ASR #1menyalin bit tanda dan menghasilkan11111000= −8, separuh yang benar dari −16.- Keduanya tidak salah. Masing-masing membagi dua nilai di bawah satu pembacaan, itulah sebabnya prosesor memerlukan kedua instruksi tersebut.
Manakah pernyataan tentang byte 11110000 yang benar? Pilih semua yang berlaku.
Dua hasil tersebut berbeda hanya pada bit yang masuk dari kiri: 0 untuk geser logika, bit tanda untuk geser aritmatika.
Masking bit
- Perangkat tertanam sering menggunakan satu bit register per sinyal. Mask adalah pola yang dikombinasikan dengan register sehingga hanya bit yang dipilih yang berubah.
- Set bit $n$:
ORdengan mask yang memiliki 1 di posisi $n$. Clear bit $n$:ANDdengan mask yang memiliki 0 di sana dan 1s di tempat lain. - Toggle bit $n$:
XORdengan mask yang memiliki 1 di sana. Test bit $n$:ANDdengan mask itu, laluCMP #0: tidak sama berarti bit tersebut diset.

Set dengan OR, clear dengan AND, toggle dengan XOR, masing-masing menggunakan mask
Cocokkan setiap operasi bit dengan operator bitwise (dan mask) yang melakukannya.
OR menetapkan, AND menghapus, XOR membalik, dan AND + tes non-nol membaca bit — empat gerakan masking.
Untuk SET bit tertentu menjadi 1, Anda menggabungkan register dengan mask menggunakan:
OR dengan mask yang memiliki bit tersebut = 1 memaksa bit menjadi 1 dan menyisakan yang lain tidak berubah.
Contoh terpecahkan: instruksi pada satu byte
- ACC berisi
10101100. Mask dapat ditulis sebagai#ndesimal,Bnbiner atau&nheksadesimal. AND B00001111menghasilkan00001100: hanya empat bit paling rendah yang tersisa.OR #1menghasilkan10101101: bit paling signifikan (LSB) diset dan tidak ada yang lain berpindah.XOR &FFmenghasilkan01010011: setiap bit dibalik.AND B00001000kemudianCMP #0menguji bit 3; hasil00001000tidak nol, sehingga bit 3 telah diset.LSL #2menghasilkan10110000, kehilangan dua bit atas;LSR #3menghasilkan00010101.
Instruksi yang menetapkan bit politan (LSB) dari ACC menjadi 1 dan menyisakan bit lainnya tidak berubah adalah OR ____.
OR dengan mask yang memiliki 1 hanya di tempat terakhir. Desimal #1, biner B00000001 dan heksadesimal &1 adalah mask yang sama.
Urutkan langkah-langkah untuk menguji apakah bit 3 dari ACC disetel.
Mask, bandingkan, lompat. AND menyisakan 00001000 atau 00000000, dan perbandingan dengan nol membedakan keduanya.
Pemantauan dan kontrol, satu bit pada satu waktu
- Pada perangkat pemantauan, satu bit dari register per sensor berarti satu operasi
ANDmemeriksa apakah sensor tertentu menyala. - Pada perangkat kontrol, satu operasi
ORmenyalakan bit kontrol aktuator tanpa mengganggu yang lain, dan satu operasiANDmematikannya. - Proses ini cepat, hampir tidak memerlukan memori, dan satu byte menyimpan delapan status on/off yang independen. Inilah "mengapa" yang ditanyakan dalam ujian.
⟦⟧ Nilai yang sering terlewat
- Geser kiri bernilai × 2 per tempat hanya jika bit yang keluar adalah nol. Sebutkan hal ini ketika angka 1 hilang.
- Geser kanan logis memasukkan 0; geser kanan aritmatika menyalin bit tanda. Pilih berdasarkan apakah bilangan tersebut bertanda.
- Untuk membersihkan bit, mask harus memiliki 0 pada bit tersebut dan 1 di tempat lainnya. Mask semua nol akan membersihkan seluruh register.
XORmelakukan toggle; tidak set. Untuk set gunakanOR, untuk uji gunakanANDdan bandingkan dengan nol.
Anda telah memahaminya
- geser logis diisi dengan 0: kiri × 2 per tempat, kanan ÷ 2, dan 1 yang hilang merusak perhitungan aritmatika
- geser kanan aritmatika menyalin bit tanda; geser siklik melingkarkan kembali bit tersebut
- mask: OR set · AND clear · XOR toggle · AND lalu CMP #0 uji
- satu bit per sensor atau aktuator membuat pemantauan dan kontrol cepat dan ringan; mask ditulis sebagai
#n,Bnatau&n