Sistem bilangan Ff 16. Alfabet heksadesimal

Untuk menulis program di Majelis, Anda perlu memahami sistem bilangan heksadesimal. Tidak ada yang rumit dalam hal ini. Kami menggunakan sistem desimal dalam kehidupan. Saya yakin Anda semua mengetahuinya, jadi saya akan mencoba menjelaskan sistem heksadesimal dengan analogi sistem desimal.

Jadi, dalam sistem desimal, jika kita menambahkan angka nol ke sembarang angka di sebelah kanan, maka angka tersebut akan bertambah 10 kali lipat. Contoh: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000, dst. Dalam sistem ini kami menggunakan angka dari 0 hingga 9, yaitu. sepuluh angka berbeda (sebenarnya, itulah mengapa disebut desimal).

Dalam sistem heksadesimal, kami menggunakan enam belas "digit". Saya khusus menulis kata “digit” dalam tanda kutip, karena... Itu tidak hanya menggunakan angka. Dan sungguh, bagaimana itu bisa terjadi? Biar saya jelaskan: dari 0 sampai 9 kita menghitung dengan cara yang sama seperti dalam desimal, tetapi kemudian akan menjadi seperti ini: A, B, C, D, E, F. Angka F tidaklah sulit hitung, itu akan sama dengan 15 dalam sistem desimal (lihat Tabel 1).

Angka desimal

Angka heksadesimal

Tabel 1. Sistem desimal dan heksadesimal.

Jadi, jika kita menambahkan angka nol di sebelah kanan angka apa pun dalam sistem heksadesimal, maka angka tersebut akan bertambah16 sekali.

Contoh 1: 1x16 = 10; 10x16 = 100; 100 x 16 = 1000, dst.

Apakah Anda dapat membedakan bilangan heksadesimal dan bilangan desimal pada Contoh 1? Dan dari seri ini: 10, 12, 45, 64, 12, 8, 19? Ini bisa berupa heksadesimal atau desimal. Agar komputer tidak kebingungan dan dapat dengan jelas membedakan suatu bilangan dengan bilangan lainnya, maka pada assembler biasanya diberi simbol h atau H setelah bilangan heksadesimal ( H adalah singkatan dari bahasa Inggris. heksadesimal (heksadesimal). Untuk singkatnya, kadang-kadang disebut saja Heksa ) . Dan jangan menaruh apapun setelah desimal. Karena angka 0 sampai 9 pada kedua sistem mempunyai arti yang sama, maka angka yang ditulis 5 dan 5h adalah sama.

Itu. Contoh 1 (lihat di atas) akan lebih tepat ditulis seperti ini: 1 x 16 = 10h; 10 jam x 16 = 100 jam; 100 jam x 16 = 1000 jam. Atau seperti ini: 1 jam x 10 jam = 10 jam; 10 jam x 10 jam = 100 jam; 100 jam x 10 jam = 1000 jam.

Kami akan melihat mengapa sistem heksadesimal diperlukan dalam edisi selanjutnya. Untuk saat ini, untuk contoh program kita yang akan dibahas dibawah ini, kita perlu mengetahui tentang keberadaan bilangan heksadesimal.

Jadi, mari kita rangkum. Sistem bilangan heksadesimal terdiri dari 10 digit (dari 0 hingga 9) dan 6 huruf alfabet latin (A, B, C, D, E, F). Jika kita menambahkan angka nol di sebelah kanan angka apa pun dalam sistem heksadesimal, maka angka tersebut akan bertambah16 sekali. Sangat penting untuk memahami topik ini, karena kami akan terus menggunakannya saat menulis program.

Sekarang sedikit tentang bagaimana saya akan membuat contoh di Majelis. Sangat tidak nyaman untuk menyajikannya dalam format HTML, jadi pertama-tama akan ada kode program itu sendiri dengan baris bernomor, dan segera setelah itu akan ada penjelasan dan catatan.

Sesuatu seperti ini:

garis Kode program
(1) pindah ah,9

Penjelasan:

Pada baris (1) kita melakukan ini, dan pada baris (15) kita melakukan itu.

Permintaan besar: JANGAN menyalin program dari halaman ke clipboard lalu menempelkannya ke Notepad (atau di mana pun)! Ketik ulang secara manual di editor teks. Jika Anda memiliki printer, pilih programnya, cetak fragmen yang dipilih, lalu transfer ke editor dari kertas. Semua contoh harus diketik sendiri! Ini akan mempercepat hafalan operator.

Dan satu hal lagi. Tidak ada perbedaan antara huruf kecil dan huruf besar di assembler. Catatan formulir:

Assembler memandangnya dengan cara yang sama. Anda tentu saja dapat memaksa assembler untuk membedakan antara karakter huruf kecil dan huruf besar, tetapi kami tidak akan melakukannya untuk saat ini. Untuk membuat program lebih mudah dibaca, yang terbaik adalah mengetikkan operator dengan huruf kecil, dan mengawali nama subrutin dan label dengan huruf besar. Tapi itu tergantung siapa yang merasa nyaman.

Jadi, mari kita beralih ke program pertama kita:

(1) Segmen CSEG

(2)org 100 jam

(4) Mulai:

(6) pindah ah,9

(7) mov dx, pesan offset

(8) dalam 21 jam

(10) dalam 20 jam

(11)

(12) Pesan db "Halo, dunia!$"

(13) CSEG berakhir

(14) akhir Mulai

Untuk menjelaskan semua operator dalam contoh ini, kita memerlukan beberapa edisi. Oleh karena itu, kami hanya akan menghilangkan deskripsi beberapa perintah pada tahap ini. Anggap saja memang begitulah seharusnya. Kami akan melihat operator-operator ini secara rinci dalam waktu dekat. Jadi, baris bernomor (1), (2) dan (13) Anda abaikan saja.

Baris (3), (5), (9) dan (11) dikosongkan. Hal ini dilakukan untuk kejelasan. Assembler hanya akan menghilangkannya.

Sekarang mari kita beralih ke operator lainnya. Kode program diawali dengan baris (4). Ini adalah tanda yang memberitahu assembler ke awal kode. Baris (14) berisi operator akhir Begin ( Mulailah bahasa Inggris awal; akhir akhir). Ini adalah akhir dari program. Secara umum, bukan kata Mulai sesuatu yang lain bisa saja digunakan. Misalnya, Awal:. Dalam hal ini, kami harus mengakhiri program ini Akhir Mulai (14).

Baris (6) (8) menampilkan pesan Hello, world!. Di sini kita harus berbicara secara singkat tentang register prosesor (kita akan membahas topik ini lebih terinci di edisi berikutnya).

Register prosesor adalah memori yang dialokasikan khusus untuk menyimpan suatu nomor.

Misalnya:

Jika kita ingin menjumlahkan dua bilangan, maka dalam matematika kita menulisnya seperti ini:

A, B dan C ini adalah sejenis register (jika kita berbicara tentang komputer) di mana beberapa data dapat disimpan. A=5 dapat dibaca sebagai: Tetapkan A nomor 5 .

Untuk memberikan nilai pada register, ada operator mov di Assembler (dari bahasa Inggris move load). Baris (6) harus dibaca seperti ini: Memuat ke dalam register AH.nomor 9 (dengan kata lain, kami menetapkan AH.nomor 9). Di bawah ini kita akan melihat mengapa hal ini perlu.

Pada baris (7) kita memuat ke dalam register DX alamat pesan untuk keluaran (dalam contoh ini adalah stringHalo dunia!$).

Interupsi akan dibahas secara rinci dalam terbitan berikutnya. Di sini saya akan menyampaikan beberapa patah kata.

Mengganggu MS-DOS itu adalah semacam subrutin (bagian MS-DOS), yang tersimpan secara permanen di memori dan dapat dipanggil kapan saja dari program apa pun.

Mari kita pertimbangkan hal di atas menggunakan contoh (Catatan dalam cetakan kecil):

Program untuk menjumlahkan dua angka

Program Rumah

SEBUAH=5 Nilai 5 kita masukkan ke dalam variabel A

B=8 menjadi variabel B nilainya 8

Memanggil Penambahan Subrutin

sekarang C sama dengan 13

SEBUAH=10 sama saja, hanya angkanya saja yang berbeda

B=25

Memanggil Penambahan Subrutin

sekarang C sama dengan 35

Akhir Program

Penambahan Subrutin

C=A+B

KembaliDariSubrutin kami kembali ke tempat kami menelepon

Subrutin Akhir

Dalam contoh ini, kami memanggil subrutin dua kali Tambahan, yang menambahkan dua angka yang diteruskan ke variabel A dan B . Hasilnya ditempatkan dalam variabel C. Ketika subrutin dipanggil, komputer mengingat dari mana subrutin itu dipanggil, dan kemudian, ketika subrutin selesai dijalankan, komputer kembali ke tempat pemanggilannya. Itu. Anda dapat memanggil subrutin dalam jumlah yang tidak terbatas dari mana saja.

Saat menjalankan baris (8) program Majelis, kita memanggil subrutin (dalam hal ini disebut interupsi), yang menampilkan baris tersebut di layar. Untuk tujuan ini, kami sebenarnya menempatkan nilai-nilai yang diperlukan dalam register. Semua pekerjaan yang diperlukan (mengeluarkan garis, menggerakkan kursor) diambil alih oleh subrutin. Baris ini dapat dibaca seperti ini: panggil interupsi kedua puluh satu ( int dari bahasa Inggris mengganggu mengganggu). Perlu diketahui setelah angka 21 ada huruf H . Ini, seperti yang telah kita ketahui, adalah bilangan heksadesimal (33 dalam desimal). Tentu saja, tidak ada yang menghalangi kami untuk mengganti saluran tersebut int 21 jam hingga int 33. Program ini akan bekerja dengan benar. Ini hanyalah praktik umum di Assembler untuk menunjukkan nomor interupsi dalam heksadesimal.

Pada baris (10), kami, seperti yang sudah Anda duga, memanggil interupsi 20 H . Untuk memanggil interupsi ini, Anda tidak perlu menentukan nilai apa pun di register. Ia hanya melakukan satu tugas: keluar dari program (keluar ke DOS). Akibat interupsi 20 jam, program akan kembali ke tempat peluncurannya (dimuat, dipanggil). Misalnya, di Komandan Norton atau Navigator DOS.

Baris (12) berisi pesan yang akan dikeluarkan. Kata pertama ( pesan pesan) judul pesan. Bisa apa saja (misalnya, kekacauan atau string, dll.). TENTANG Perhatikan baris (7) yang kita muat ke dalam register DX alamat pesan kami.

Kita dapat membuat jalur lain, yang akan kita panggil Kekacauan2. Kemudian, mulai dari baris (9), masukkan perintah berikut:

(10) gerakkan dx, offset Mess2

(13) Pesan db "Halo, dunia!$"

(14) Mess2 db "Ini AKU! $"

dan merakit kembali program kami. Saya harap Anda bisa menebak apa yang akan terjadi

Perhatikan karakter terakhir pada baris tersebut Pesan dan Mess2 - $. Ini menunjuk ke akhir baris. Jika kita menghapusnya, maka 21 H interupsi akan terus menghasilkan keluaran hingga menemukan karakter di suatu tempat di memori $. Di layar kita akan melihat sampah .

Jika Anda memiliki debugger, Anda dapat melihat cara kerja program kami.

Tujuan dari masalah ini bukanlah untuk memahami secara detail dengan masing-masing operator. Ini tidak mungkin, karena kamu belum mempunyai pengetahuan yang cukup. Saya yakin setelah 3-4 rilis Anda akan memahami prinsip dan struktur program Majelis. Mungkin bahasa Majelis tampak sangat rumit bagi Anda, tapi percayalah, ini sekilas.

Tabel 2.4.
Sistem pengkodean heksadesimal Sistem desimal sistem heksadesimal Sistem desimal
0 0 (0000) 10 Sistem desimal
1 1(0001) 11 SEBUAH (1010)
2 2 (0010) 12 B (1011)
3 3 (0011) 13 C (1100)
4 4 (0100) 14 D (1101)
5 5 (0101) 15 E(1110)
6 6 (0110) 16 10 (00010000)
7 7 (0111) 17 11 (00010001)
8 8 (1000) 18 12 (00010010)
9 9 (1001) 19 13 (00010011)

F(1111)

Untuk mengubah bilangan heksadesimal menjadi bilangan desimal, Anda perlu mengalikan nilai digit terendah (nol) dengan satu, nilai digit berikutnya (pertama) dengan 16, digit kedua dengan 256 (16 2), dst. , lalu tambahkan semua produk.

Misalnya, ambil nomor A17F:
Sistem pengkodean heksadesimal A17F=F*16 0 + 7*16 1 + 1*16 2 + A*16 3 = 15*1 + 7*16+1*256+10*4096=41343 sistem heksadesimal A17F=F*16 0 + 7*16 1 + 1*16 2 + A*16 3 = 15*1 + 7*16+1*256+10*4096=41343
0 0 (000) 10 12 (001010)
1 1(001) 11 13 (001011)
2 2 (010) 12 14 (001100)
3 3 (011) 13 15 (001101)
4 4 (100) 14 16 (001110)
5 5 (101) 15 17 (001111)
6 6 (110) 16 20 (010000)
7 7 (111) 17 21 (010001)
8 10 (001000) 18 22 (010010)
9 11 (001001) 19 23 (010011)

Namun setiap spesialis peralatan digital (pengembang, operator, tukang reparasi, pemrogram, dll.) perlu belajar menangani sistem heksadesimal dan biner sebebas sistem desimal biasa, sehingga tidak diperlukan perpindahan dari sistem ke sistem.

Jauh lebih jarang daripada heksadesimal, pengkodean oktal digunakan, yang dibangun berdasarkan prinsip yang sama seperti heksadesimal, tetapi digit biner dibagi menjadi kelompok tiga digit. Setiap kelompok (kode digit) kemudian ditunjuk dengan satu simbol. Setiap bit kode oktal dapat mengambil delapan nilai: 0, 1, 2, 3, 4, 5, 6, 7 (Tabel 2.5).

Selain kode-kode yang dibahas, ada juga yang disebut representasi bilangan biner-desimal. Seperti dalam kode heksadesimal, dalam kode BCD, setiap digit kode berhubungan dengan empat digit biner, namun setiap kelompok empat digit biner tidak dapat mengambil enam belas, tetapi hanya sepuluh nilai yang dikodekan oleh karakter 0, 1, 2, 3, 4 , 5, 6, 7, 8, 9. Artinya, satu tempat desimal sama dengan empat tempat desimal. Hasilnya, penulisan bilangan dalam kode desimal biner tidak berbeda dengan penulisan dalam kode desimal biasa (Tabel 2.6), namun kenyataannya hanyalah kode biner khusus yang setiap digitnya hanya dapat mengambil dua nilai: 0 dan 1. Kode desimal biner terkadang sangat berguna untuk mengatur indikator digital desimal dan papan skor.

Tabel 2.6.
Sistem pengkodean heksadesimal Sistem pengkodean desimal biner sistem heksadesimal Sistem pengkodean desimal biner
0 0 (0000) 10 10 (00010000)
1 1(0001) 11 11 (00010001)
2 2 (0010) 12 12 (00010010)
3 3 (0011) 13 13 (00010011)
4 4 (0100) 14 14 (00010100)
5 5 (0101) 15 15 (00010101)
6 6 (0110) 16 16 (00010110)
7 7 (0111) 17 17 (00010111)
8 8 (1000) 18 18 (00011000)
9 9 (1001) 19 19 (00011001)

Sistem desimal biner

Dalam kode biner, Anda dapat melakukan operasi aritmatika apa pun pada bilangan: penjumlahan, pengurangan, perkalian, pembagian.

Misalnya, menjumlahkan dua bilangan biner 4-bit. Mari kita jumlahkan angka 0111 (desimal 7) dan 1011 (desimal 11). Menambahkan angka-angka ini tidak lebih sulit daripada notasi desimal:

Jika dijumlahkan 0 dan 0 kita mendapat 0, jika dijumlahkan 1 dan 0 kita mendapat 1, jika dijumlahkan 1 dan 1 kita mendapat 0 dan dibawa ke angka berikutnya 1. Hasilnya adalah 10010 (desimal 18). Saat menjumlahkan dua bilangan biner n-bit, hasilnya dapat berupa bilangan n-bit atau (n+1) -bit.

Saat mengurangkan 0 dari 0 kita mendapat 0, saat mengurangkan 0 dari 1 kita mendapat 1, saat mengurangkan 1 dari 1 kita mendapat 0, saat mengurangkan 1 dari 0 kita mendapat 1 dan meminjam 1 pada digit berikutnya. Hasilnya adalah 1011 (desimal 11).

Saat melakukan pengurangan, dimungkinkan untuk mendapatkan angka negatif, jadi Anda harus menggunakannya representasi biner angka negatif.

Untuk secara bersamaan mewakili bilangan biner positif dan biner negatif, yang disebut kode tambahan. Bilangan negatif pada kode ini dinyatakan dengan bilangan yang bila dijumlahkan dengan bilangan positif yang nilainya sama akan menghasilkan nol. Untuk mendapatkan bilangan negatif, Anda perlu mengubah semua bit dari bilangan positif yang sama ke bit yang berlawanan (0 menjadi 1, 1 menjadi 0) dan menambahkan 1 pada hasilnya. Angka 5 dalam kode biner terlihat seperti 0101. Kita ganti bitnya dengan bit yang berlawanan: 1010 dan tambahkan satu: 1011. Kita jumlahkan hasilnya dengan angka asli: 1011 + 0101 = 0000 (abaikan transfer ke digit kelima) .

modulo 2 dua bilangan biner 0111 dan 1011:

Operasi bitwise lainnya pada bilangan biner mencakup fungsi AND dan fungsi OR. Fungsi AND menghasilkan satu hanya jika bit-bit yang bersesuaian dari dua bilangan asli sama-sama satu, jika tidak, hasilnya adalah -0. Fungsi OR menghasilkan satu ketika setidaknya salah satu bit yang sesuai dari bilangan asli adalah 1, jika tidak, hasilnya adalah 0.

0123456789ABCDEF. Mengambil angka 16 sebagai basis, kita memperoleh sistem bilangan heksadesimal. Di sini kita dapat menggunakan 10 digit sistem desimal, menambahkan 6 digit lagi - huruf alfabet Latin (A, B, C, D, E, F): 0, 1, 2, 3, 4, 5, 6, 7 , 8, 9 , A, B, C, D, E, F 10 11 12 13 14 15 Sebanyak 16 karakter berbeda membentuk alfabet sistem bilangan heksadesimal. Anda dapat menulis angka apa pun termasuk semua tanda berikut: A37, 1B45, F302, 1A3C5... - harap diperhatikan: kami menggunakan tanda dari 0 hingga F. Untuk sistem bilangan heksadesimal q=16. Isi.

Geser 32 dari presentasi “Sejarah penghitungan dan sistem bilangan”.

Ukuran arsip dengan presentasi adalah 2292 KB.

Ilmu Komputer kelas 9

"Pemodelan" kelas 9 - Pemodelan sebagai metode kognisi. sistem file komputer. Tes selesai. Ptolemeus membangun model dunia. Model seseorang berupa boneka anak. Paling mudah menggunakan model informasi saat menggambarkan lintasan suatu objek. Ciri-ciri objek yang ada. Deskripsi pohon. Paling mudah menggunakan model informasi. Daftar deputi Duma Negara. Daftar siswa sekolah; tata ruang kelas.

"Sejarah penghitungan dan sistem bilangan" - Dasar dari sistem bilangan. Puluhan. Angka desimal. Penomoran Sirilik Slavia. Penomoran. Bunga teratai. Kedudukan suatu angka dalam suatu bilangan disebut digitnya. Posisi nomor. Pada zaman dahulu, orang berjalan tanpa alas kaki. Sistem bilangan posisi dicirikan oleh basisnya. Pembagian berdasarkan pangkalan. Menulis angka tipe baru. Mengalikan bilangan biner. Konversi angka desimal. Operasi aritmatika.

"Sorting in Spreadsheets" - Menyortir dan mencari data dalam spreadsheet. Pencarian data di ET. Urutan penyortiran bersarang. Departemen. Kondisi pencarian untuk catatan. Tuliskan nama-namanya. Kerja praktek. Urutkan dalam urutan menaik. Urutan garisnya. Menyortir dan mencari data. Gaji dan usia. Layar reflektif. Menyortir data. Pilih contoh database. Menyortir catatan. Perbedaan antara catatan dan bidang. Cara menggunakan filter otomatis.

“Program siklik” - Membuat program. Temukan jumlahnya. Masukkan bilangan bulat. Temukan jumlah bilangan asli tiga digit. Temukan jumlah bilangan asli. Menghitung. Ulangi dengan kondisi pasca. Cetak tabel di layar. Uang muka. Ulangi dengan prasyarat. Jangka pembagi garis. Program siklus. Informatika. Tabulasi fungsi. Konsep siklus. Ulangi dengan parameter. Memasukkan data awal. Tabel konversi dolar. Temukan jumlah angkanya.

"Pemodelan sebagai metode pengetahuan ilmiah" - Tabel tipe "objek-objek-satu". Deskripsi objek. Metode memahami dunia sekitar. Pemecahan masalah. Sumber daya pendidikan. Lima orang. Formalisasi. Tahapan pemodelan. Anak laki-laki. Model hierarki. Deskripsi objek pemodelan. Yura. Ungu. Penunjukan server. Model teknis. Bagan tingkat. Diagram. Jenis. Pemodelan sebagai metode kognisi. Model pada grafik. Masalah diselesaikan dengan menggunakan grafik.

“Apa itu email” - Alamat email. Perutean surat. Surat. Cara kerja email. pengirim surat X. Pertanyaan tentang tampilan email. Tanggal. Menyalin. E-mail. Struktur surat. riwayat email. Pengirim. E-mail.

Sistem bilangan heksadesimal. program pertama kami.

Untuk menulis program di Majelis, Anda perlu memahami sistem bilangan heksadesimal. Tidak ada yang rumit dalam hal ini. Kami menggunakan sistem desimal dalam kehidupan. Saya yakin Anda semua mengetahuinya, jadi saya akan mencoba menjelaskan sistem heksadesimal dengan analogi sistem desimal.

Jadi, dalam sistem desimal, jika kita menambahkan angka nol ke sembarang angka di sebelah kanan, maka angka tersebut akan bertambah 10 kali lipat. Contoh: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000, dst. Dalam sistem ini kami menggunakan angka dari 0 hingga 9, yaitu. sepuluh angka berbeda (sebenarnya, itulah mengapa disebut desimal).

Dalam sistem heksadesimal, kami menggunakan enam belas "digit". Saya khusus menulis kata “digit” dalam tanda kutip, karena... Itu tidak hanya menggunakan angka. Dan sungguh, bagaimana itu bisa terjadi? Biar saya jelaskan: dari 0 sampai 9 kita menghitung dengan cara yang sama seperti dalam desimal, tetapi kemudian akan menjadi seperti ini: A, B, C, D, E, F. Angka F tidaklah sulit hitung, itu akan sama dengan 15 dalam sistem desimal (lihat Tabel 1).

Angka desimal

Angka heksadesimal

Tabel 1. Sistem desimal dan heksadesimal.

Jadi, jika kita menambahkan angka nol di sebelah kanan angka apa pun dalam sistem heksadesimal, maka angka tersebut akan bertambah16 sekali.

Contoh 1: 1x16 = 10; 10x16 = 100; 100 x 16 = 1000, dst.

Apakah Anda dapat membedakan bilangan heksadesimal dan bilangan desimal pada Contoh 1? Dan dari seri ini: 10, 12, 45, 64, 12, 8, 19? Ini bisa berupa heksadesimal atau desimal. Agar komputer tidak kebingungan dan dapat dengan jelas membedakan suatu bilangan dengan bilangan lainnya, maka pada assembler biasanya diberi simbol h atau H setelah bilangan heksadesimal ( H adalah singkatan dari bahasa Inggris. heksadesimal (heksadesimal). Untuk singkatnya, kadang-kadang disebut saja Heksa ) . Dan jangan menaruh apapun setelah desimal. Karena angka 0 sampai 9 pada kedua sistem mempunyai arti yang sama, maka angka yang ditulis 5 dan 5h adalah sama.

Itu. Contoh 1 (lihat di atas) akan lebih tepat ditulis seperti ini: 1 x 16 = 10h; 10 jam x 16 = 100 jam; 100 jam x 16 = 1000 jam. Atau seperti ini: 1 jam x 10 jam = 10 jam; 10 jam x 10 jam = 100 jam; 100 jam x 10 jam = 1000 jam.

Kami akan melihat mengapa sistem heksadesimal diperlukan dalam edisi selanjutnya. Untuk saat ini, untuk contoh program kita yang akan dibahas dibawah ini, kita perlu mengetahui tentang keberadaan bilangan heksadesimal.

Jadi, mari kita rangkum. Sistem bilangan heksadesimal terdiri dari 10 digit (dari 0 hingga 9) dan 6 huruf alfabet latin (A, B, C, D, E, F). Jika kita menambahkan angka nol di sebelah kanan angka apa pun dalam sistem heksadesimal, maka angka tersebut akan bertambah16 sekali. Sangat penting untuk memahami topik ini, karena kami akan terus menggunakannya saat menulis program.

Sekarang sedikit tentang bagaimana saya akan membuat contoh di Majelis. Sangat tidak nyaman untuk menyajikannya dalam format HTML, jadi pertama-tama akan ada kode program itu sendiri dengan baris bernomor, dan segera setelah itu akan ada penjelasan dan catatan.

Sesuatu seperti ini:

garis Kode program
(1) pindah ah,9

Penjelasan:

Pada baris (1) kita melakukan ini, dan pada baris (15) kita melakukan itu.

Permintaan besar: JANGAN menyalin program dari halaman ke clipboard lalu menempelkannya ke Notepad (atau di mana pun)! Ketik ulang secara manual di editor teks. Jika Anda memiliki printer, pilih programnya, cetak fragmen yang dipilih, lalu transfer ke editor dari kertas. Semua contoh harus diketik sendiri! Ini akan mempercepat hafalan operator.

Dan satu hal lagi. Tidak ada perbedaan antara huruf kecil dan huruf besar di assembler. Catatan formulir:

Assembler memandangnya dengan cara yang sama. Anda tentu saja dapat memaksa assembler untuk membedakan antara karakter huruf kecil dan huruf besar, tetapi kami tidak akan melakukannya untuk saat ini. Untuk membuat program lebih mudah dibaca, yang terbaik adalah mengetikkan operator dengan huruf kecil, dan mengawali nama subrutin dan label dengan huruf besar. Tapi itu tergantung siapa yang merasa nyaman.

Jadi, mari kita beralih ke program pertama kita:

(1) Segmen CSEG

(2)org 100 jam

(4) Mulai:

(6) pindah ah,9

(7) mov dx, pesan offset

(8) dalam 21 jam

(10) dalam 20 jam

(11)

(12) Pesan db "Halo, dunia!$"

(13) CSEG berakhir

(14) akhir Mulai

Untuk menjelaskan semua operator dalam contoh ini, kita memerlukan beberapa edisi. Oleh karena itu, kami hanya akan menghilangkan deskripsi beberapa perintah pada tahap ini. Anggap saja memang begitulah seharusnya. Kami akan melihat operator-operator ini secara rinci dalam waktu dekat. Jadi, baris bernomor (1), (2) dan (13) Anda abaikan saja.

Baris (3), (5), (9) dan (11) dikosongkan. Hal ini dilakukan untuk kejelasan. Assembler hanya akan menghilangkannya.

Sekarang mari kita beralih ke operator lainnya. Kode program diawali dengan baris (4). Ini adalah tanda yang memberitahu assembler ke awal kode. Baris (14) berisi operator akhir Begin ( Mulailah bahasa Inggris awal; akhir akhir). Ini adalah akhir dari program. Secara umum, bukan kata Mulai sesuatu yang lain bisa saja digunakan. Misalnya, Awal:. Dalam hal ini, kami harus mengakhiri program ini Akhir Mulai (14).

Baris (6) (8) menampilkan pesan Hello, world!. Di sini kita harus berbicara secara singkat tentang register prosesor (kita akan membahas topik ini lebih terinci di edisi berikutnya).

Register prosesor adalah memori yang dialokasikan khusus untuk menyimpan suatu nomor.

Misalnya:

Jika kita ingin menjumlahkan dua bilangan, maka dalam matematika kita menulisnya seperti ini:

A, B dan C ini adalah sejenis register (jika kita berbicara tentang komputer) di mana beberapa data dapat disimpan. A=5 dapat dibaca sebagai: Tetapkan A nomor 5 .

Untuk memberikan nilai pada register, ada operator mov di Assembler (dari bahasa Inggris move load). Baris (6) harus dibaca seperti ini: Memuat ke dalam register AH.nomor 9 (dengan kata lain, kami menetapkan AH.nomor 9). Di bawah ini kita akan melihat mengapa hal ini perlu.

Pada baris (7) kita memuat ke dalam register DX alamat pesan untuk keluaran (dalam contoh ini adalah stringHalo dunia!$).

Interupsi akan dibahas secara rinci dalam terbitan berikutnya. Di sini saya akan menyampaikan beberapa patah kata.

Mengganggu MS-DOS itu adalah semacam subrutin (bagian MS-DOS), yang tersimpan secara permanen di memori dan dapat dipanggil kapan saja dari program apa pun.

Mari kita pertimbangkan hal di atas menggunakan contoh (Catatan dalam cetakan kecil):

Program untuk menjumlahkan dua angka

Program Rumah

SEBUAH=5 Nilai 5 kita masukkan ke dalam variabel A

B=8 menjadi variabel B nilainya 8

Memanggil Penambahan Subrutin

sekarang C sama dengan 13

SEBUAH=10 sama saja, hanya angkanya saja yang berbeda

B=25

Memanggil Penambahan Subrutin

sekarang C sama dengan 35

Akhir Program

Penambahan Subrutin

C=A+B

KembaliDariSubrutin kami kembali ke tempat kami menelepon

Subrutin Akhir

Dalam contoh ini, kami memanggil subrutin dua kali Tambahan, yang menambahkan dua angka yang diteruskan ke variabel A dan B . Hasilnya ditempatkan dalam variabel C. Ketika subrutin dipanggil, komputer mengingat dari mana subrutin itu dipanggil, dan kemudian, ketika subrutin selesai dijalankan, komputer kembali ke tempat pemanggilannya. Itu. Anda dapat memanggil subrutin dalam jumlah yang tidak terbatas dari mana saja.

Saat menjalankan baris (8) program Majelis, kita memanggil subrutin (dalam hal ini disebut interupsi), yang menampilkan baris tersebut di layar. Untuk tujuan ini, kami sebenarnya menempatkan nilai-nilai yang diperlukan dalam register. Semua pekerjaan yang diperlukan (mengeluarkan garis, menggerakkan kursor) diambil alih oleh subrutin. Baris ini dapat dibaca seperti ini: panggil interupsi kedua puluh satu ( int dari bahasa Inggris mengganggu mengganggu). Perlu diketahui setelah angka 21 ada huruf H . Ini, seperti yang telah kita ketahui, adalah bilangan heksadesimal (33 dalam desimal). Tentu saja, tidak ada yang menghalangi kami untuk mengganti saluran tersebut int 21 jam hingga int 33. Program ini akan bekerja dengan benar. Ini hanyalah praktik umum di Assembler untuk menunjukkan nomor interupsi dalam heksadesimal.

Pada baris (10), kami, seperti yang sudah Anda duga, memanggil interupsi 20 H . Untuk memanggil interupsi ini, Anda tidak perlu menentukan nilai apa pun di register. Ia hanya melakukan satu tugas: keluar dari program (keluar ke DOS). Akibat interupsi 20 jam, program akan kembali ke tempat peluncurannya (dimuat, dipanggil). Misalnya, di Komandan Norton atau Navigator DOS.

Baris (12) berisi pesan yang akan dikeluarkan. Kata pertama ( pesan pesan) judul pesan. Bisa apa saja (misalnya, kekacauan atau string, dll.). TENTANG Perhatikan baris (7) yang kita muat ke dalam register DX alamat pesan kami.

Kita dapat membuat jalur lain, yang akan kita panggil Kekacauan2. Kemudian, mulai dari baris (9), masukkan perintah berikut:

(10) gerakkan dx, offset Mess2

(13) Pesan db "Halo, dunia!$"

(14) Mess2 db "Ini AKU! $"

dan merakit kembali program kami. Saya harap Anda bisa menebak apa yang akan terjadi

Perhatikan karakter terakhir pada baris tersebut Pesan dan Mess2 - $. Ini menunjuk ke akhir baris. Jika kita menghapusnya, maka 21 H interupsi akan terus menghasilkan keluaran hingga menemukan karakter di suatu tempat di memori $. Di layar kita akan melihat sampah .

Jika Anda memiliki debugger, Anda dapat melihat cara kerja program kami.

Tujuan dari masalah ini bukanlah untuk memahami secara detail dengan masing-masing operator. Ini tidak mungkin, karena kamu belum mempunyai pengetahuan yang cukup. Saya yakin setelah 3-4 rilis Anda akan memahami prinsip dan struktur program Majelis. Mungkin bahasa Majelis tampak sangat rumit bagi Anda, tapi percayalah, ini sekilas.

Sistem bilangan heksadesimal memiliki alfabet yang terdiri dari 16 digit:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d, e, f.

Saat menulis suatu bilangan dalam sistem heksadesimal, huruf A, B, C, D, E, F masing-masing digunakan untuk menulis angka-angka yang melambangkan bilangan 10, 11, 12. 13, 14. 15.

Mengubah bilangan dari heksadesimal ke desimal

Anda dapat mengonversi bilangan heksadesimal apa pun ke desimal menggunakan rumus yang sudah dikenal

Contoh.

    AE07 16 =10∙16 3 +14∙16 2 +0∙16 1 +7∙16 0 =44551 10 .

    100 16 =1∙16 2 +0∙16 1 +0∙16 0 =256 10 .

    58 16 =5∙16 1 +8∙16 0 =.88 10 .

    2A 16 =2∙16 1 +10∙16 0 =42 10.

Konversi bilangan dari sistem desimal ke heksadesimal dilakukan dengan cara yang sama seperti ke biner.

Mengubah bilangan dari heksadesimal ke biner dan sebaliknya

Anda dapat mengonversi bilangan heksadesimal apa pun ke biner sebagai berikut. Setiap digit bilangan heksadesimal ditulis sebagai bilangan biner empat digit - buku catatan. Setelah ini, angka nol di sebelah kiri dapat dibuang.

2) 2A= 0010 1010 2 = 101010 2 .

3) 58 16 = 0101 1000 2 = 1011000 2 .

Sebaliknya, Anda dapat mengonversi bilangan biner apa pun menjadi heksadesimal dengan cara yang sama. Setiap empat digit biner, dihitung dari kanan ke kiri, ditulis sebagai satu digit heksadesimal. Nomor-nomor ini juga terletak dari kanan ke kiri.

Contoh.

2.101010 2 = 10 1010 2 = 2A.

3. 1011000 2 = 101 1000 2 = 58 16 .

Sistem bilangan oktal

Sistem bilangan oktal memiliki alfabet yang terdiri dari 8 digit:

0, 1, 2, 3, 4, 5, 6, 7.

Konversi bilangan dari sistem desimal ke oktal dan sebaliknya dilakukan dengan cara yang sama seperti konversi ke/dari biner.

Mengubah bilangan dari oktal ke biner dan sebaliknya

Setiap digit bilangan oktal ditulis sebagai bilangan biner tiga digit - tiga serangkai.

Contoh.

2563 8 = 010 101 110 011 2 =10101110011 2 .

1001101 2 = 001 001 101 2 = 115 8 .

Materi metodologi pelajaran laboratorium No.1

Topik pelajaran laboratorium: Sistem bilangan. Mengukur informasi.

Jumlah jam: 2.

Contoh dengan solusi

    Terjemahan dariP -sistem ary ke sistem 10-ary. Misalkan kita perlu mengubah suatu bilangan dalam sistem bilangan tertentu menjadi desimal. Untuk melakukan ini, Anda perlu merepresentasikannya dalam formulir

11100110 2 = 1∙2 7 + 1∙2 6 + 1∙2 5 + 0∙2 4 + 0∙2 3 + 1∙2 2 + 1∙2 1 + 0∙2 0 = 128 + 64 + 32 + 4 + 2 = 230 10 .

2401 5 = 2∙5 3 + 4∙5 2 + 0∙5 1 + 1∙5 0 = 250 + 100 + 0 + 1 = 351.

    Konversi dari sistem 10 digit keP -ichnaya.

2.1 98 10 → X 2.

Kita membagi bilangan tersebut dengan 2. Kemudian kita membagi hasil bagi tidak lengkap dengan 2. Kita lanjutkan sampai hasil bagi tidak lengkap menjadi kurang dari 2, yaitu. sama dengan 1.

    98: 2 = 49. Sisa - 0 .

    49: 2 = 24. Sisa - 1 .

    24: 2 = 12. Sisa - 0 .

    12: 2 = 6. Sisa - 0 .

    6: 2 = 3. Sisa - 0 .

    3: 2 = 1 . 1 .

Sisa -

2.2 Karena hasil bagi parsial terakhir adalah 1, prosesnya selesai. Kita tuliskan semua sisanya dari bawah ke atas, dimulai dengan hasil bagi tidak lengkap terakhir, dan kita mendapatkan bilangan 1100010. Jadi 98 10 = 1100010 2.

2391 10 → X 16.

    Bagilah bilangan tersebut dengan 16. Kemudian bagi hasil bagi parsial dengan 16. Lanjutkan hingga hasil bagi parsial kurang dari 16. 7 .

    149: 16 = 9 . 5 .

2391: 16 = 149. Sisa -

2.3 Karena hasil bagi parsial terakhir (9) kurang dari 16, maka prosesnya selesai. Kita tuliskan, mulai dari hasil bagi tidak lengkap terakhir, semua sisanya dari bawah ke atas dan kita peroleh bilangan 957. Jadi 2391 10 = 957 16.

12165 10 → X 2.

12165 10 = 27605 8 = 010 111 110 000 101 = 10111110000101.

    Jika Anda mengonversi berdasarkan pembagian ke sistem biner, Anda mendapatkan proses yang agak rumit. Anda dapat mengubah bilangan tersebut menjadi oktal terlebih dahulu, lalu mengganti angka oktal dari kanan ke kiri dengan triad.P .

Menentukan basis suatu sistem bilangan

Seorang anak laki-laki menulis tentang dirinya: “Saya mempunyai 24 jari, 5 di masing-masing tangan, dan 12 di kaki saya.” Bagaimana ini bisa terjadi? P Larutan. Penting untuk menentukan basis sistem bilangan P =1∙P. Karena kita tahu hanya ada 10 jari kaki 10, maka 12 P + 2 = 10  P+2 = 10 10 . Dari sini kita mendapatkan persamaannya

  • = 8. Jadi yang dimaksud anak laki-laki itu adalah bilangan dalam sistem oktal. Memang ada 24 8 = 2∙8+4 = 20 10 jari kaki, dan 12 8 = 1∙8+2 = 10 10 jari kaki.

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat