Bagian ini berfokus pada perbandingan bahasa mesin mainframe dengan sistem lain yang populer antara tahun 70-an dan 90-an. Ini terutama x86, 68k, VAX dan ARM. Sistem 390 dan, khususnya, Z dianggap sangat terpisah-pisah - fokus utamanya adalah pada sistem 370.
Sistem 360 pertama mulai dikirimkan ke pelanggan pada tahun 1965, dan sistem 370 yang lebih maju dari tahun 1970. IBM mempertahankan kompatibilitas perangkat lunak dengan sistem ini hingga hari ini! Anehnya, sebelum 390 sistem, dikirim, seperti yang Anda duga sejak 1990, mainframe bekerja dengan alamat 24-bit, yaitu, mereka dapat menangani tidak lebih dari 16 megabyte memori, sama seperti, misalnya, 68000, dirilis pada 1979, atau 65816atau 32016, dirilis pada tahun 1982. VAX secara native mendukung pengalamatan 32-bit. Prosesor 68020 atau 80386 yang populer, yang muncul pada pertengahan 1980-an, juga mendukung alamat 32-bit. Faktanya, 16 MB memori untuk sistem terbaik di paruh kedua tahun 80-an sudah tidak cukup. Namun, sejak tahun 1983, IBM telah memproduksi 370 komputer yang kompatibel yang dapat, sebagai ekstensi, menggunakan 31 digit alamat, yang menghilangkan masalah memori untuk komputer yang lebih baik. Tidak seperti biasanya dan uniknya, ekstensi dan 390 sistem ini menggunakan alamat 31-bit daripada alamat 32-bit penuh. Pada tahun 2000, IBM mengumumkan sistem Z pertama yang menggunakan pengalamatan 64-bit dan data. Sistem Z telah menggunakan chip prosesor sejak 2008. Mereka telah mencoba menggabungkan arsitektur Z sejak 2007 dalam satu chip dengan arsitektur POWER, tapi sejauh ini tidak berhasil. Sejauh ini, hanya Intel yang berhasil menggabungkan CISC dan RISC dalam satu chip - Pentium Pro pada tahun 1995 menjadi chip pertama di jenisnya.

IBM System / 370-145 dengan tape drive 2401 dan printer bukannya layar, 1971. Mungkin mengejutkan bahwa tidak ada tampilan dalam sistem yang sangat mahal ini meskipun fakta bahwa televisi telah diproduksi secara massal selama lebih dari 20 tahun.
Ngomong-ngomong, beberapa pihak berwenang percaya bahwa komputer pribadi serial pertama adalah IBM 5100 , diproduksi sejak tahun 1975, yang dapat menjalankan instruksi system 360 melalui emulator hardware. Versi yang disempurnakan diproduksi hingga pertengahan 1980-an. Wang 2200 adalah yang pertama . Dengan harga (sekitar $ 10.000), komputer pribadi pertama ini jelas tidak untuk digunakan di rumah.

IBM 5100, varian APL
Dengan munculnya arsitektur PC IBM, yang ternyata menentukan arah utama pengembangan teknologi komputasi selama beberapa dekade, pada tahun 1983 IBM mencoba menggabungkan hampir semua teknologi komputer terbaik dalam satu produk PC XT / 370: sistem 370-nya, IBM PC XT, Motorola 68000 dan Intel 8087. XT / 370 ini dapat digunakan sebagai terminal cerdas untuk bekerja dengan mainframe, seperti IBM XT biasa, atau untuk langsung menjalankan perangkat lunak mainframe. Menariknya, XT / 370 menambahkan dukungan untuk menggunakan memori virtual, yang membutuhkan dua 68000. Pada tahun 1984, dengan munculnya PC AT, versi perbaikan dari "mainframe pribadi" AT / 370 dirilis, yang kira-kira dua kali lebih cepat dari XT dalam mode mainframe. / 370. Sejarah sistem semacam itu tidak berakhir di sana, karena produk serupa tahun 90-an telah diproduksi, sesuai dengan 390 sistem.Sejauh yang saya tahu, ini belum dilakukan untuk sistem Z.
IBM menggunakan model bisnis yang agak tidak biasa untuk mainframe-nya, di mana komputer tidak dijual tetapi disewa. Salah satu keuntungan dari model semacam itu adalah bahwa ia menjamin peningkatan peralatan secara konstan, peralatan yang ketinggalan zaman secara otomatis diganti dengan yang diperbarui dari kelas yang sesuai. Model ini juga memiliki kekurangan. Misalnya, kerugian yang sangat terlihat bagi mereka yang mempelajari sejarah teknologi komputer adalah kenyataan bahwa komputer bekas hampir selalu dibuang dan oleh karena itu hampir mustahil untuk menemukannya di museum mana pun.
Terkejut menemukan sistem IBM 4361 langsung di LCM! Tetapi ada alasan untuk percaya bahwa ini mungkin bukan besi asli. Entah kenapa, pengunjung museum tidak memiliki akses ke komputer ini. Juga tidak jelas model mana yang seharusnya disajikan di sana, dan ini terlepas dari fakta bahwa komputer lain di museum diidentifikasi dengan sangat akurat. Di antara 4361 sistem, tiga model 3, 4 dan 5 diketahui, dan model 3 muncul setelah model 4 dan 5. Tetapi sistem di museum mengidentifikasi diri sebagai model 1. Ada kemungkinan bahwa ini adalah prototipe. Namun, staf museum tidak menjawab pertanyaan langsung tentang bantuan identifikasi, dan meskipun fakta bahwa mereka menjawab pertanyaan lain yang seringkali agak sulit dengan cukup cepat. Beberapa fitur waktu eksekusi kode memberikan dasar, meskipun tidak sepenuhnya solid, untuk mengasumsikan bahwa emulator kemungkinan besar terhubung ke jaringan. Di musim panas di museum, sehubungan dengan covid,jelas beralih ke emulator ... Masih ada peluang untuk masuk ke mainframe besi melalui jaringanHNET , tapi saya belum berhasil.
Tetapi apa pun itu, siapa pun dapat terhubung dan mencoba bekerja dengan cara yang sama seperti yang telah dilakukan oleh spesialis bergaji tinggi sejak pertengahan 70-an. Harganya sedemikian rupa sehingga hari ini sulit dipercaya. Misalnya, satu jam waktu komputer menghabiskan lebih dari $ 20 di pertengahan 80-an, dan Anda masih harus membayar ekstra untuk ruang disk! Benar, kita berbicara tentang waktu operasi mainframe, bukan terminal tempat pekerjaan itu pergi. Oleh karena itu, misalnya, saat mengedit teks dari satu jam pekerjaan sebenarnya, jarang butuh waktu bahkan 5 menit untuk membayar. Harga untuk mainframe sendiri juga fantastis. Misalnya, karyawan Intel mengingat bahwa di awal 1980-an mereka hanya diberi satu mainframe untuk dikerjakan. Kinerjanya 10 MIPS, dan harganya sekitar $ 20 juta pada saat itu, yang tiga kali lebih berat dari hari ini! Menarik,bahwa Intel lebih menyukai komputer seperti itu daripada sistem VAX yang lebih murah. Sekarang bahkanRaspberry Pi adalah seukuran pil dan dihargai beberapa dolar, dan dapat dengan mudah mengirimkan lebih dari 1000 MIPS. Omong-omong, pada Raspberry Pi atau hampir semua komputer modern, Anda dapat menjalankan emulator IBM / 370, yang akan berjalan jauh lebih cepat daripada sistem IBM mana pun dari tahun 80-an atau bahkan 90-an. Namun, emulator harus dikonfigurasi dan tidak semua program yang berguna untuk IBM / 370 tersedia secara gratis, jadi akses gratis ke sistem yang disetel dengan baik sering kali merupakan cara terbaik untuk menyiasati mainframe. Anehnya, program akses seperti itu, emulator terminal 3270, tersedia bahkan di ponsel! Ngomong-ngomong, saya berhasil menyiapkan sistem VM / CMS saya di emulator Hercules dan menangani transfer file, tetapi butuh setidaknya seminggu.
Emulator Hercules nantinya dapat mengemulasi sistem IBM / 390 dan IBM / Z, tetapi karena masalah lisensi perangkat lunak, ini jauh lebih sulit dilakukan. Sebagai ilustrasi dari masalah seperti itu, saya akan mengutip kasus terkenal ketika IBM bersikeras untuk menghapus bagian Emulasi dari buku yang sudah diterbitkan! Dalam versi elektronik modern buku ini, bagian ini tidak ada; hanya dapat ditemukan dalam edisi cetak atau sebagai file terpisah di situs yang didedikasikan untuk perangkat lunak gratis. Faktanya adalah bahwa emulasi pada PC biasa sejak awal 2000-an bisa terasa lebih cepat daripada eksekusi pada mainframe yang jauh lebih mahal. Oleh karena itu IBM harus mengubah lisensi perangkat lunaknya sehingga hanya dapat digunakan secara legal pada perangkat keras yang dibeli dari IBM. Tentu saja, kami tidak berbicara bahwa emulator lebih cepat daripada mainframe terbaik,mereka hanya menunjukkan rasio kinerja terhadap biaya yang jauh lebih baik.
Salah satu cara bekerja dengan sistem Z atau 390 adalah menginstal Linux pada emulator sistem tersebut. Untuk 390 dan Z, setidaknya tersedia distribusi Ubuntu dan Debian. Perlu dicatat di sini bahwa perkembangan pesat Linux sebagian besar disebabkan oleh dukungan yang signifikan dari IBM. Secara khusus, IBM pada tahun 2001 menginvestasikan satu miliar dolar dalam pengembangan Linux.
Sekarang mari kita pertimbangkan fitur-fitur bahasa mesin dari sistem yang kompatibel dengan 360. Perakit dasar sistem semacam itu disebut BAL - Bahasa Perakitan Dasar. Anehnya, jika rumor tentang IBM bisa dipercaya, maka assembler masih menjadi salah satu bahasa pemrograman utama yang berfungsi di sana.
Perakit mainframe yang dimaksud memiliki sejumlah fitur kuno yang sudah tidak ada di arsitektur terkenal lainnya yang muncul kemudian. Misalnya, tentang fakta bahwa BAL mnemonik menentukan jenis argumen. Pertimbangkan instruksi assembler x86 sebagai contoh
MOV EAX,EBXdan MOV EAX,address- keduanya menggunakan mnemonic MOV. Untuk BAL, untuk kasus seperti itu, mnemonik LR dan L yang berbeda digunakan dalam perintah, LR 0,1danL 0,address... Namun, mnemonik serupa yang berbeda memungkinkan penggunaan angka untuk register penamaan, meskipun biasanya makro R0, R1, ... daripada angka 0, 1, ... adalah hal pertama yang didefinisikan dalam paket makro untuk kemudahan pemrograman. Archaisme lain adalah penggunaan lompatan label dalam konstruksi kompilasi bersyarat, meskipun menurut pendapat saya ini terkadang lebih nyaman daripada struktur blok. Tetapi arkaisme yang paling terkenal adalah penggunaan pengkodean EBCDIC untuk bekerja dengan informasi simbolis. Dalam pengkodean ini, aneh bahkan untuk kemarin, huruf-huruf alfabet bahasa Inggris tidak dikodekan secara berurutan, misalnya, huruf I memiliki kode 201, dan J berikutnya adalah 209! Pengkodean ini berasal dari teknologi untuk bekerja dengan kartu berlubang yang muncul di era pra-komputer. System 360 juga mendukung ASCII dalam perangkat keras, tetapi dalam versi kuno dan lama terlupakan,dimana karakter untuk angka 0 memiliki kode 80, bukan 48 seperti sekarang. Sejauh yang saya tahu, ASCII dengan mainframe IBM paling baik bahkan tidak mencoba digunakan. Dukungan ASCII telah dihapus di 370 sistem, tetapi diperkenalkan pada level baru dalam sistem 390. Beberapa mnemonik BAL mencolok dalam kependekannya yang super dan bahkan non-nemonisitas, misalnya, N berarti AND, O - OR, X - XOR, A - ADD, S - SUBTRACT, M - KALIAN, ...
Perakit BAL memungkinkan Anda bekerja dengan tiga tipe data dasar: bilangan biner, desimal, dan real. 390 sistem menggunakan tipe khusus lain untuk bekerja dengan bilangan real. Beberapa sistem Z juga dapat menggunakan data yang benar-benar unik seperti bilangan real desimal. Instruksi untuk bekerja dengan masing-masing jenis membentuk kelas instruksi khusus dan agak terisolasi. Umumnya, dengan sangat sedikit pengecualian, semua sistem yang kompatibel dengan 360 mendukung instruksi desimal dan aritmatika nyata. Seperti yang Anda ketahui, untuk arsitektur x86 atau 68k, dukungan untuk bekerja dengan bilangan real tidak segera muncul dan untuk waktu yang lama merupakan opsi opsional, dan bekerja dengan bilangan desimal bukanlah sesuatu yang sepenuhnya terpisah dari aritmatika biner - ini lebih merupakan perpanjangan.
Untuk bekerja dengan bilangan real dan biner, set register yang berbeda digunakan, dan untuk bekerja dengan bilangan desimal, register tidak digunakan sama sekali. Sistem 370 menyediakan 16 register 32-bit tujuan umum untuk bilangan bulat biner, dengan penghitung program menjadi bagian dari kata status prosesor. Tidak ada tumpukan terpisah, tumpukan dapat diatur menggunakan register apa pun - begitulah cara kerja dengan tumpukan kemudian diimplementasikan di ARM. Panggilan subrutin juga dilakukan seperti di ARM, melalui register tautan. Semua register hampir selalu dapat dipertukarkan, pengecualian sangat jarang. Jika Anda membandingkan BAL sistem register biner dengan arsitektur VAX kompetitif, Anda akan melihat bahwa VAX memiliki satu register lebih sedikit. Ini juga berlaku untuk ARM.
Struktur operand dalam instruksi akan tampak cukup familiar bagi mereka yang mengetahui assembler x86. Untuk bilangan biner, operand memiliki struktur register-register atau register-memori, dan untuk kasus terakhir, nilai 32-bit dan 16-bit yang dapat diperluas bertanda tangan dapat dimuat dari memori. Misalnya, analog dari instruksi x86
ADD EAX,EBXakan menjadi AR 0,1, ADD EAX,address- A 0,address, ADD EAX,address[EBX]- A 0,address(1), ADD EAX,address[EBX][EDX]- A 0,address(1,3). Namun, sistem 360 dan bahkan pengembangannya yang lebih baru tidak tahu cara bekerja dengan penskalaan, misalnya, Anda ADD EAX,address[8*EBX]tidak dapat menulis ke BAL dengan satu perintah. Di sisi lain, x86 tidak tahu bagaimana bekerja dengan ekstensi bertanda tangan 16-bit, misalnya, perintah BALAH 0,address, yang berarti mengambil nomor bertanda tangan 16-bit dari memori dan menambahkannya ke register 0, pada x86 akan membutuhkan dua instruksi untuk diterapkan.
Ciri langka BAL adalah terdapat instruksi terpisah untuk penjumlahan dan pengurangan untuk bilangan bertanda tangan dan tak bertanda tangan, dan operasi tak bertanda tangan di BAL disebut boolean. Keanehan ini disebabkan oleh tidak adanya flag pada arsitektur 360 yang sudah tidak asing lagi bagi sebagian besar arsitektur lain. Sebaliknya, hanya dua bit yang digunakan, yang diatur secara berbeda dengan instruksi yang berbeda! Satu-satunya perbedaan antara operasi yang ditandatangani dan tidak adalah bahwa mereka menetapkan dua bit atribut yang disebutkan secara berbeda. Untuk operasi yang ditandatangani pada mereka, Anda dapat mengetahui apakah hasilnya nol, apakah itu positif atau negatif, apakah terjadi overflow, dan untuk operasi yang tidak ditandatangani, apakah hasilnya nol dan apakah transfer atau pinjaman terjadi. Instruksi cabang bersyarat memungkinkan semua 16 subset kasus yang dimungkinkan dengan 2 bit.Karena pekerjaan yang tidak biasa dengan tanda operasi hari ini, instruksi cabang bersyarat sulit untuk dipahami dengan cepat. Meskipun ekstensi BAL biasanya menambahkan makro yang cukup mudah dibaca untuk lompatan bersyarat, di mana Anda tidak perlu mengurai masing-masing dari 4 bit. Di sini, untuk keadilan, Anda dapat melihat bahwa ada perintah terpisah untuk penambahan dan pengurangan bertanda tangan dan tidak bertanda tangan, misalnya, dalam arsitektur MIPS, di mana tidak ada bendera sama sekali!misalnya, dalam arsitektur MIPS, di mana tidak ada flag sama sekali!misalnya, dalam arsitektur MIPS, di mana tidak ada flag sama sekali!
Fitur langka lainnya ada dalam perintah terpisah untuk perbandingan yang ditandatangani dan tidak ditandatangani. Saya bertemu yang serupa tidak hanya di MIPS, tetapi juga di MicroBlaze. Ngomong-ngomong, transfer adalah satu-satunya flag yang didukung dari flag operasi.
Dalam sistem yang kompatibel dengan IBM 360, tidak ada operasi aritmatika dengan flag carry, jadi jika kita perlu bekerja dengan bilangan biner, misalnya, dalam bilangan 128-bit, maka kita harus memeriksa tanda carry setelah melakukan operasi 32-bit pertama untuk mengatur penambahan atau pengurangannya. dan lakukan transisi jika perlu. Ini, tentu saja, sangat rumit dibandingkan dengan x86, ARM, 68k, atau bahkan 6502, tetapi pada MIPS yang lebih baru, ini bahkan lebih rumit. Pekerjaan normal dengan transfer hanya dilakukan di sistem Z.
Tidak ada pergeseran siklik di BAL, tetapi pergeseran non-siklik, seperti di x86, bisa tunggal atau ganda. Namun, BAL memiliki instruksi shift terpisah untuk nomor unsigned dan signed, hanya flag flag set yang terakhir. Jelas, hasil pergeseran kiri untuk kedua kasus hanya berbeda pada bendera. Putaran hanya ditambahkan ke 390 sistem.
Di antara perintah untuk memuat register di BAL, kemungkinan besar ada yang unik. Anda dapat memuat modul integer, negasi dari modul ini, atau nomor dengan tanda yang diubah - sesuatu yang sangat mirip yang hanya saya temui di arsitektur ARM. Perlu dicatat di sini bahwa seluruh arsitektur 360 cenderung menandai aritmatika, dan aritmatika unsigned dalam arsitektur ini agak sekunder. Awalnya, BAL tidak memiliki pembagian dan perkalian yang tidak bertanda tangan, mereka hanya ditambahkan ke sistem 390. Ketika register dimuat, flag, serta di x86, tidak berubah, tetapi ada perintah boot khusus yang mengatur flag - ini sekali lagi mengingatkan ARM, di mana pengaturan flag dapat untuk mengatur.
Semua operasi aritmatika bertanda, termasuk shift, bisa memunculkan pengecualian overflow. Apakah pengecualian dilempar atau tidak ditentukan oleh bendera topeng khusus dalam daftar status. Menariknya, pembagian biner dan perkalian di BAL sama sekali tidak mempengaruhi flag - di sini Anda dapat mengingat x86, di mana pembagian hanya merusak flag.
Operasi logika bitwise di BAL diwakili oleh himpunan AND, OR, eksklusif OR, yaitu, tidak ada operasi negasi yang terpisah. Operasi logika tidak hanya dapat memiliki register-register atau register-memory structure, tetapi juga “memory-constant” atau “memory-memory” - metode pengalamatan yang terakhir mirip dengan yang digunakan untuk bilangan desimal. Pengalamatan tipe "memory-constant" hanya mungkin untuk bekerja dengan byte. Jelas, untuk operasi logika, tidak seperti aritmatika, penggunaan bilangan 16-bit tidak mungkin. Untuk pengalamatan memori-ke-memori, Anda dapat bekerja dengan data hingga 256 byte! Ternyata kami memiliki tiga jenis data untuk bekerja dengan operasi logis: byte, kata 32-bit, urutan byte - dan instruksi khusus untuk masing-masing jenis ini, yang entah bagaimana tidak universal.
Operasi logis di BAL berdekatan dengan operasi untuk mentransfer byte. Selain transfer biasa hingga 256 byte dengan satu perintah, ada juga instruksi unik untuk mentransfer tetrad byte. Anda hanya dapat mengirim bagian atas atau bawah dari byte, sedangkan bagian lainnya mempertahankan nilainya selama penyalinan! Operasi aneh seperti itu diperlukan untuk mendukung fitur BAL saat bekerja dengan informasi karakter dan desimal. Ada juga instruksi penerusan dan perbandingan untuk 370 sistem hingga lebih dari 16 juta byte sekaligus, yang dapat diinterupsi. Anehnya, juga perintah lambat untuk bekerja dengan blok hingga 256 byte tidak dapat diinterupsi, yang dapat membuat penundaan yang tidak menyenangkan sebagai tanggapan atas permintaan interupsi. Perintah transfer juga dapat digunakan untuk mengisi memori dengan byte tertentu.Selain mentransfer dari memori ke memori, Anda juga dapat mengatur byte individu ke nilai tertentu. Jelas, instruksi untuk mentransfer byte, selain dari instruksi baru untuk 390 dan Z, lebih maju untuk x86.
Dalam register, Anda tidak hanya dapat memuat nilai di alamat yang diberikan, tetapi juga alamat itu sendiri, seperti dalam perintah LEA untuk x86 atau 68k. Fitur ini juga memungkinkan Anda untuk memuat secara langsung konstanta yang diperlukan ke dalam register, meskipun nilai maksimumnya tidak boleh lebih dari 4095. Fitur ini juga memungkinkan Anda untuk menaikkan register tidak lebih dari 4095. Tetapi penurunan register hanya dapat dilakukan dengan 1. Peningkatan dan penurunan - ini adalah perintah alamat, jadi tidak mengubah tanda. Anda dapat memuat byte individu dan bahkan kelompok byte dari sebuah kata dalam memori ke dalam register, misalnya, hanya byte pertama dan ketiga - ini dimungkinkan untuk semua arsitektur 32-bit lainnya yang saya ketahui hanya melalui serangkaian 4 perintah. Demikian juga, BAL memungkinkan hanya sebagian dari register untuk dibuang ke memori.
Seri instruksi BAL sangat terspesialisasi - dalam arsitektur lain, ini diterapkan oleh serangkaian instruksi yang lebih sederhana. Misalnya, instruksi TR memungkinkan Anda untuk mengubah string karakter - satu argumen menentukan string yang akan dikonversi, dan yang lainnya alamat tabel konversi. Varian khusus dari instruksi ini, TRT, dapat digunakan untuk memindai string yang diberikan dan melewati karakter kosong - ini adalah fungsionalitas dari panggilan strpos C standar. Instruksi ED dan EDMK benar-benar unik - mereka memiliki fungsionalitas sprintf primitif! Namun, hampir semua operasi string memiliki batasan panjang string maksimum, tidak lebih dari 255 byte, yang secara signifikan mengurangi kekuatannya.
Di BAL, sulit untuk bekerja dengan nilai 16-bit unsigned karena kurangnya rotasi atau perintah tipe SWAP. Dengan 390 sistem, masalah ini telah diperbaiki. Beberapa instruksi BAL tidak digunakan lagi, misalnya instruksi shift nibble MVO telah digantikan oleh SRP yang lebih nyaman. Untuk transfer blok dan perbandingan, lebih baik menggunakan instruksi baru, meskipun karena fakta bahwa mereka menggunakan cara pengalamatan yang berbeda, ini mungkin dalam beberapa kasus yang jarang terjadi menjadi kurang optimal.
Sudah ada contoh dari empat mode pengalamatan BAL dasar. Ada juga yang kelima untuk perintah tiga alamat. Mode seperti VAX, 68k, PDP-11 atau bahkan 6809 auto-increment atau decrement mode tidak tersedia di BAL. Juga tidak ada mode DIMM seperti VAX, 68020, atau PDP-11. Dan, tentu saja, BAL, tidak seperti perakit VAX atau PDP-11, sepenuhnya non-ortogonal. BAL paling dekat dengan assembler x86 dan ARM, arsitektur modern paling sukses. Urutan operan di BAL dari kanan ke kiri sama dengan di Intel assembler untuk x86 atau di assembler ARM dan, oleh karena itu, tidak seperti VAX, PDP-11 atau 68k. Meskipun urutan byte dalam data di BAL adalah dari mayor ke minor (MSB), yang berbeda dari x86, ARM atau VAX, ini sesuai dengan yang diterima untuk 68k atau MIPS.
Operasi dengan bilangan desimal diimplementasikan di BAL hanya melalui pengalamatan memori-ke-memori. Nomor desimal dapat ditentukan dalam potongan hingga 16 byte, memungkinkan angka hingga 31 tempat desimal untuk digunakan. Ini sesuai dengan ketepatan angka biner 107-bit. Jadi, hanya sistem pemrograman paling modern yang menggunakan bilangan bulat biner yang dapat menangani nilai yang lebih besar daripada sistem 360 hampir 60 tahun yang lalu! Tentu saja, dimungkinkan untuk mengimplementasikan bilangan besar secara sembarangan melalui aritmatika biner, tetapi untuk beberapa alasan, hingga saat ini, tidak ada bahasa pemrograman populer yang mendukung bilangan yang lebih besar dari sistem kuno 360. Bahkan sekarang, dukungan untuk bilangan bulat 128-bit untuk x86 biasanya hanya merupakan ekstensi tidak resmi, seperti untuk GCC.
Bilangan desimal di BAL direpresentasikan secara unik, mereka harus menyimpan tanda - tidak demikian halnya untuk VAX, x86, 68k, ... Selain itu, tanda disimpan dalam byte terakhir dari representasi bilangan! Untuk bilangan desimal, BAL memiliki dukungan langsung untuk semua operasi dasar: penjumlahan, pengurangan, perkalian, dan bahkan pembagian - ini juga tidak ditemukan dalam arsitektur lain yang saya ketahui. Selain itu, BAL memiliki instruksi untuk menyalin, membandingkan, dan menggeser angka desimal. Instruksi MVO dan SRP yang disebutkan di atas dirancang hanya untuk shift seperti itu. Operasi dapat dilakukan hanya pada bilangan desimal yang dikemas, tetapi untuk mencetaknya, bilangan tersebut harus dibongkar, dan untuk mewakili digit yang belum dikemas di BAL, diperlukan juga tanda, yang dalam hal ini tidak memakan tempat, karena ditempatkan di tetrad atas, yang memerlukan pekerjaan khusus dengan ini notebook sebelum mencetak.Sungguh aneh bahwa operasi untuk tinju dan unboxing hanya dapat bekerja pada tidak lebih dari 16 byte dari angka desimal yang didekompresi, yang memungkinkan hanya angka 15-bit untuk digunakan dengannya. Masalah yang tidak menyenangkan ini dapat diatasi dengan menggunakan ED atau EDMK untuk instruksi pembongkaran, tetapi pengepakan dalam jumlah besar yang telah dibuka harus dilakukan melalui urutan instruksi yang tidak terlalu sederhana. Instruksi baru telah ditambahkan ke 390 sistem untuk mengatasi masalah ini. Anehnya, instruksi pengepakan dan pembongkaran berfungsi dengan data biner apa pun, bukan hanya data desimal.Masalah yang tidak menyenangkan ini dapat diatasi dengan menggunakan ED atau EDMK untuk instruksi pembongkaran, tetapi pengepakan dalam jumlah besar yang telah dibuka harus dilakukan melalui urutan instruksi yang tidak terlalu sederhana. Instruksi baru telah ditambahkan ke 390 sistem untuk mengatasi masalah ini. Anehnya, instruksi pengepakan dan pembongkaran berfungsi dengan data biner apa pun, bukan hanya data desimal.Masalah yang tidak menyenangkan ini dapat diatasi dengan menggunakan ED atau EDMK untuk instruksi pembongkaran, tetapi pengepakan dalam jumlah besar yang telah dibuka harus dilakukan melalui urutan instruksi yang tidak terlalu sederhana. Instruksi baru telah ditambahkan ke 390 sistem untuk mengatasi masalah ini. Anehnya, instruksi pengepakan dan pembongkaran berfungsi dengan data biner apa pun, bukan hanya desimal.
BAL memiliki instruksi unik khusus yang memungkinkan Anda mengonversi bilangan biner menjadi desimal yang dikemas dan sebaliknya sekaligus. Untuk bilangan desimal dalam instruksi ini, 8 byte selalu dialokasikan, yaitu 15 digit dan tanda. Namun, register 32-bit hanya cukup untuk mewakili bilangan bertanda yang sesuai dengan bilangan desimal 9 digit, jadi tidak setiap bilangan desimal dalam format BAL yang benar dapat diubah menjadi biner dalam satu perintah. Untuk sistem Z, ada instruksi tambahan untuk konversi tersebut.
Instruksi lompat di BAL berbeda karena, sebagai aturan, dipasangkan - alamat lompat dapat disetel baik secara eksplisit maupun oleh isi register - di banyak arsitektur lain, lompatan sepanjang isi register hanya untuk lompatan tanpa syarat. Ngomong-ngomong, tidak ada lompatan tanpa syarat di BAL, lompatan tersebut diimplementasikan dengan menyetel kondisi yang selalu benar, yang mirip dengan arsitektur ARM. Percabangan bersyarat di BAL, seperti disebutkan, memiliki sintaks yang unik. Perhatikan, misalnya, instruksinya
BT 9,address, yang berarti melakukan lompatan jika kondisi 0 dan 3 terpenuhi, tetapi kondisi setelah perintah berbeda memiliki arti yang berbeda. Misalnya, setelah penambahan ditandatangani, kondisi ini berarti "hasilnya 0 atau terjadi overflow", dan setelah penambahan unsigned, "hasilnya 0 dan tidak ada carry, atau hasilnya bukan 0 dan ada carry". Terlepas dari kerumitan dan beberapa redundansi, harus diakui bahwa sistem untuk bekerja dengan kondisi transisi mungkin yang paling fleksibel dari semua yang diketahui. Sembilan dalam perintah dari contoh digunakan dalam representasi biner 1001, yaitu menetapkan nomor bit - sistem itu sendiri menyandikan semua kombinasi kondisi dengan 4 bit juga digunakan di ARM. Selain lompatan bersyarat di BAL, ada lompatan balasan dengan penurunan, kira-kira sama seperti di assembler Z80, x86, 68k, PDP-11, ... Tetapi BAL juga memiliki dua instruksi yang benar-benar unik untuk lompatan,yang, tergantung pada nomor dari salah satu register operan, bisa tiga alamat atau empat alamat! Dalam perintah unik ini, dua register ditambahkan bersama dan hasil penjumlahannya dibandingkan dengan isi register lain, dan hasil dari perbandingan ini adalah untuk menentukan apakah akan melompat atau tidak. Instruksi yang tidak biasa seperti itu diyakini berguna untuk bekerja dengan tabel lompat.
Seperti yang telah disebutkan, panggilan subrutin di BAL diimplementasikan tanpa menggunakan stack, hanya dengan menyimpan alamat pengirim di register. Namun, instruksi BAL untuk panggilan semacam itu, salah satunya juga disebut BAL, tidak hanya mempertahankan alamat pengirim, tetapi juga bagian dari register status, khususnya, bendera kondisi, panjang instruksi saat ini, dan bahkan penutup untuk pengecualian opsional, misalnya, untuk integer atau desimal overflows - ini sudah disebutkan di atas. Penyimpanan informasi tambahan yang tidak biasa tersebut disebabkan oleh fakta bahwa penghitung instruksi dalam arsitektur mainframe adalah bagian atas dari kata status mesin dan instruksi untuk memanggil subrutin secara mekanis mempertahankan bagian atasnya. Tidak ada perintah khusus untuk kembali dari subrutin, Anda perlu menggunakan lompatan biasa ke alamat di register.Dalam 390 sistem, sehubungan dengan transisi ke arsitektur 31-bit, instruksi baru untuk memanggil dan bahkan kembali dari subrutin telah muncul. Instruksi baru memungkinkan penggunaan kode yang fleksibel yang dijalankan dalam mode berbeda dalam satu program.
Untuk memanggil subrutin perintah tunggal dengan cepat, BAL memiliki instruksi EX unik yang mengeksekusi instruksi pada alamat tertentu dan berpindah ke instruksi berikutnya. Instruksi EX dapat memodifikasi instruksi yang dipanggil, yang memungkinkan Anda untuk menggunakan register yang diinginkan dalam instruksi yang dipanggil atau untuk mengatur parameter untuk transfer massal byte. Instruksi serupa, tetapi lebih sederhana, juga ada dalam sistem perintah TMS9900.
Awalnya, BAL tidak memiliki transisi yang relatif dan dapat direlokasi seperti Z80 atau x86. Mereka hanya ditambahkan ke 390 sistem.
Perintah SPM, TM, TS, STCK dan STPT juga agak tidak biasa. Yang pertama memungkinkan satu perintah untuk menyetel semua flag operasi dan mask pengecualian opsional. Perintah TM memungkinkan Anda untuk memeriksa sekelompok bit dan mengidentifikasi tiga kasus: semua nol, semua satu, campuran nol dan satu. Pemeriksaan ini tidak dapat dilakukan dengan satu perintah di arsitektur lain. Namun, TM hanya bekerja dengan byte individu dalam memori. TS digunakan saat bekerja dengan banyak prosesor - ada perintah serupa untuk 68k. Instruksi STCK membaca nilai Timer eksternal (!), Dan instruksi STPT membaca nilai timer internal yang terpasang di sirkuit prosesor. Aneh, tapi STPT diistimewakan, tapi STCK tidak.
Perlu juga disebutkan petunjuk CS dan CDS, yang dimaksudkan untuk mendukung pekerjaan multiprosesing. Mereka telah diimplementasikan untuk 370 sistem, yaitu, telah tersedia sejak awal 70-an. Pada x86, analog CS, instruksi CMPXCHG, diimplementasikan tidak lebih awal dari tahun 1987, dan analog dari CDS, instruksi CMPXCHG8B, baru diimplementasikan pada tahun 1994!
Dari 370 sistem, perintah identifikasi diri sistem STIDP diperkenalkan, diistimewakan dan tidak terlalu informatif. Untuk x86, perintah ini dibuat jauh lebih kuat. Anda juga dapat melihat di sini bahwa IBM 4361 di LCM memungkinkan setiap pengguna untuk mengeksekusi STIDP. Ini jelas merupakan emulasi yang dipicu pengecualian.
Empat mode BAL yang dapat dialamatkan menentukan dua operan untuk instruksi, mode kelima menentukan perintah tiga alamat. Namun, mengabaikan beberapa informasi memungkinkan Anda memiliki perintah unicast, dan menggunakan informasi implisit memungkinkan Anda memiliki perintah empat alamat. Ketika digunakan dalam pengalamatan, register 0 memiliki peran khusus: ia diabaikan begitu saja - ini memungkinkan Anda untuk mengabaikan basis dan indeks saat menghitung alamat. Semua instruksi BAL hanya berukuran 2, 4, atau 6 byte. Ini terlihat seperti 68000 atau PDP-11, tetapi tidak x86, VAX, atau ARM.
Beberapa mode pengalamatan lagi ditambahkan ke sistem 390, sehingga jumlahnya menjadi 18. Jumlah instruksi juga meningkat cukup signifikan, di antara instruksi baru bahkan ada yang mendukung Unicode - masih tidak ada hal seperti itu untuk x86! Di antara instruksi baru untuk 390 sistem, ada yang unik lainnya. Beberapa mode pengalamatan lagi ditambahkan ke sistem Z, dan jumlah total perintah untuk Z modern sangat besar dan mungkin bahkan lebih dari jumlah perintah untuk x86-64 modern!
Dalam sistem 360, 370 dan 390, offset saat mengakses data dalam memori, seperti di ARM, adalah 12-bit, yaitu tidak lebih dari 4095, yang sangat tidak nyaman - dalam kode besar, mungkin ada kekurangan register untuk basis. Di x86, offset ini 16-bit, yang tentu saja jauh lebih nyaman. Tetapi sistem Z menambahkan dukungan untuk pengalamatan offset 20-bit, yang tentu saja lebih baik. Meskipun demikian, perlu dicatat bahwa di x86-64 atau bahkan 68020 offsetnya bisa 32 bit. Sebagaimana dicatat, sistem pra-390, seperti ARM, tidak memiliki kemampuan untuk menggunakan konstanta besar saat bekerja dengan register. Arsitektur x86 jauh lebih fleksibel di sini. Oleh karena itu, saat menggunakan assembler dengan sistem 360 atau 370, sering kali perlu menggunakan literal, konstanta semu, yang agak lebih lambat.
Dalam hal kinerja, sistem yang kompatibel dengan IBM / 360 selalu memiliki indikator yang baik. Percobaan saya dengan 4361-1, khususnya dalam proyek tersebutPerhitungan angka π dengan algoritma shutter menunjukkan timing yang sangat baik. Instruksi 4361-1 berjalan tanpa latensi seperti ARM atau prosesor modern lainnya. Namun, karena sistem instruksi yang agak canggung yang diwarisi dari tahun 60-an, khususnya, karena kurangnya pembagian dengan pembagi 16-bit, hasil dari segi efisiensi elektronik prosesor ternyata berada di level 80186. Ini sekitar 80% lebih buruk dari hasilnya, ditunjukkan oleh komputer VAX terbaik, Model 785. Namun, mainframe di LCM jelas bukan yang terbaik di antara mainframe IBM yang ada saat itu. Penting juga untuk dicatat di sini bahwa mainframe menggunakan saluran, prosesor khusus yang membuat I / O sangat cepat, jauh lebih cepat daripada kebanyakan komputer modern.
Sebagai mahasiswa, saya kebetulan bekerja dengan tiruan domestik IBM / 370, EC-1045, pada tahun 1987 melalui mode batch, dan pada tahun 1989 melalui dialog. Untuk mode batch, punch card harus disiapkan. Saat itu saya sudah menggunakan komputer rumahan dan oleh karena itu penggunaan kartu berlubang kuno tidak meninggalkan kesan terbaik. Tetapi mode interaktifnya tidak buruk, hanya sering rusak, dengan sejumlah besar pengguna. Oleh karena itu, beberapa siswa mulai bekerja pada jam 4 pagi! Sejak saat itu, saya tidak bisa lagi berurusan dengan mainframe, baru belakangan ini saya memutuskan untuk berurusan dengan teknologi tonggak sejarah komputer melalui emulasi.
Kloning IBM 360 sangat populer. Klon dibuat di Inggris, Jerman, Jepang, dan perusahaan lain di AS. Di Uni Soviet, kloning ini memiliki konotasi yang sangat dramatis. Demi kloning ini, hampir semua perkembangan dalam negeri di bidang IT terlipat, beberapa di antaranya sangat menjanjikan. Secara khusus, topik komputer Ural ditutup , yang dengannya ilmuwan komputer terkenal Charles Simonyi berbicara dengan hangat . Proyek BESM-10 juga ditutup, meskipun mesin kelas BESM-6 sebelumnya sebanding dengan IBM 360 dalam hal kecepatan. Juga, demi kloning ini, kontrak yang hampir selesai dengan ICL digagalkan, mungkin dengan kontrak ini industri TI Inggris akan memperoleh dinamika baru dan tidak akan menolak. Superkomputer sajaElbrus , mungkin karena hubungan mereka dengan industri pertahanan, selamat dari "Invasi Klon", yang disebut Dijkstra sebagai kemenangan AS terbesar dalam Perang Dingin.
Seperti yang diingat orang-orang yang bekerja dengan mainframe di Uni Soviet, klon domestik dibedakan oleh keandalan yang sangat rendah dan membutuhkan perhatian terus-menerus dari personel layanan. Sementara mainframe IBM Amerika asli adalah beberapa komputer paling andal pada masanya. Di klon Soviet, terkadang lebih dari selusin (biasanya lebih dari 5) kilogram logam mulia, emas, platinum, paladium dan perak diletakkan, tetapi ini tidak membantu memperbaiki situasi dengan keandalan. Karena sejumlah besar nilai yang sangat likuid, sulit membayangkan bahwa klon rumah tangga yang berfungsi dapat bertahan di suatu tempat.
Menariknya, pengembang utama IBM 360 meninggalkan IBM dan mendirikan Amdahl, yang selama lebih dari dua dekade mengkhususkan diri dalam produksi sistem yang kompatibel dengan mainframe IBM dan pada saat yang sama mereka lebih unggul dalam kecepatan dan keandalan dengan harga lebih rendah. Akibatnya, karena perubahan besar di pasar mainframe, Amdahl, seperti ICL, menjadi bagian dari perusahaan Jepang Fujitsu.
Selain komputer dengan arsitektur IBM / 360, ada mainframe lainnya. Pada tahun 60-an, pabrikan mainframe Amerika secara tidak resmi menerima nama nyaring Putri Salju dan Tujuh Kurcaci. Mungkin mudah untuk menebak bahwa Putri Salju adalah IBM. Mainframe dari arsitektur asli juga diproduksi di negara lain. Arsitektur Inggris ICL 1900 layak mendapat perhatian khusus.
Seperti yang sudah saya tulis, saya berhasil mengatur konfigurasi yang berfungsi untuk VM / CMS 6. Namun, ternyata editor XEDIT tidak tersedia secara gratis, dan EDIT sederhana terlalu aneh dan tidak nyaman, jadi Anda harus mengedit teks pada host. Juga, ditemukan bahwa program standar untuk mentransfer file dari emulator terminal ke mainframe dan sebaliknya tidak tersedia, yang memerlukan penggunaan kartu berlubang virtual untuk transfer semacam itu. Kejutan tidak menyenangkan lainnya muncul sehubungan dengan debugging. Perintah DEBUG tidak mendukung loncatan! Sementara kemungkinan seperti itu bahkan untuk debugger DDT untuk prosesor 8080. Juga mengejutkan, meskipun kurang kritis, bahwa DEBUG tidak tahu bagaimana melakukan pembongkaran, yang sering dibangun ke dalam monitor prosesor 70-an yang paling sederhana sekalipun.Pembungkusan garis panjang dan karakter kontrol akhir baris tidak didukung pada level rendah di bawah CMS! Oleh karena itu, saat mencetak dari program bahasa assembly, Anda perlu memformat garis secara manual agar tidak hilang melewati tepi kanan layar, dan juga mengisi baris terakhir dengan spasi penutup. Yang juga tidak biasa adalah kurangnya pengguliran vertikal otomatis.
Mereka yang ingin bekerja dengan mainframe untuk pertama kalinya harus ingat bahwa mainframe adalah ekosistem yang sangat besar, di mana banyak konsep yang sudah dikenal dapat memiliki interpretasi yang berbeda. Misalnya, konsep sederhana sebuah file tidak ada. Salah satu atribut kunci dari file tersebut adalah ukuran record, tidak ada yang seperti ini untuk file Linux atau Microsoft Windows. File-file itu sendiri berbeda dalam metode mengaksesnya dan ada buku-buku tertulis dan mungkin tidak tipis tentang ini. Juga tidak biasa bahwa dalam CMS nama disk ditulis di akhir nama file lengkap, dan nama, ekstensi, dan disk dipisahkan oleh spasi, dan nama disk itu sendiri disebut mode file karena beberapa alasan. Saya juga ingin memilah MVS multitasking , sejauh yang saya tahu di Uni Soviet, tidak pernah berhasil.
Secara umum, agak tidak terduga bahwa beberapa sistem operasi terkenal yang digunakan pada komputer yang sangat mahal tidak mendukung bekerja dengan direktori file, yang menyamainya dengan sistem operasi pertama dan primitif untuk mikrokomputer, misalnya, CP / M atau Commodore DOS. Bukan kebetulan bahwa CMS terkadang disebut CP / M untuk mainframe. Anehnya, sejauh yang saya tahu, dukungan untuk katalog di CMS tidak pernah diperkenalkan, meskipun rilis terakhir sistem dimulai pada tahun 2018. Untuk beberapa alasan, bekerja dengan katalog untuk komputer mahal seringkali tidak didukung dengan baik sebelum tahun 80-an. Misalnya, tidak ada dukungan seperti itu di DEC RT-11 dan bahkan salah satu OS terbaik untuk PDP-11, RSX-11, hanya mendukung direktori dua tingkat. OS IBM yang paling populer hingga tahun 2000-an adalah MVS (1974) dan bahkan di sini katalog hanya dibuat sebagian, seperti pada Apple MFS (1984). Meskipun di Unix (1973), MS-DOS (sejak 1983) atau bahkan Apple ProDOS 8-bit (1983), ini baik-baik saja sejak awal. Penanganan file paling canggih ditawarkan di VAX / VMS (1977), di mana selain direktori bahkan ada dukungan built-in untuk pembuatan versi file.
Menariknya, bahasa scripting untuk CMS, MVS dan beberapa sistem operasi IBM lainnya, REXX , telah menjadi versi singkat dari bahasa file batch untuk Commodore Amiga.
Perangkat lunak mainframe biasanya dua warna. Terminal warna jarang digunakan dan oleh karena itu hanya ada sedikit program warna. Ada juga beberapa program dengan grafik dinamis; penyegaran layar yang sering menyebabkan kedipan yang tidak menyenangkan.
Demo dinamis, diluncurkan pada emulator IBM 4381 di LCM, terminal 3270-3
Kesimpulannya, saya tidak bisa tidak mengungkapkan kekaguman saya pada teknologi IBM. Mereka selalu dibedakan oleh orisinalitas unik dan tingkat tinggi. Saya secara khusus ingin mencatat kualitas dokumentasi yang sangat baik, yang, bahkan untuk sistem modern, berada dalam domain publik. IBM menunjukkan dinamisme yang luar biasa dalam perkembangan teknologi meskipun faktanya IBM adalah salah satu perusahaan terbesar di dunia. Dalam hal jumlah karyawan, ini hampir sama dengan gabungan Microsoft, Google, dan Intel!
Tema mainframe sangat besar. Tentu saja, saya hanya bisa menulis sebagian kecil dari isinya. Saya akan sangat berterima kasih atas klarifikasi dan informasi tambahan.
Materi ini juga tersedia dalam bahasa Inggris .