Mei 05, 2023 Pemrograman Sistem

Program Tanpa Input tetapi Output pada Asembler

Program Tanpa Input tetapi Output pada Asembler dan label lokal adalah membahas tentang contoh program hanya output dan label lokal. Program yang tidak memiliki input dan output rangkaian angka yang berkelanjutan, dimulai dengan 1, dan dihitung satu per satu. Dengan kata lain, output Anda harus 1 2 3 4 5 6 ….

Solusi Program Tanpa Input tetapi Output pada Asembler

Langkah 1: 1 00 Kami mengosongkan akumulator dengan mengatur ulang ke nol dan kemudian memuat konten blok memori 00 ke dalam akumulator. Akumulator sekarang berisi 001.

Step 1

Output Stream:

Langkah 2: 5 00 Kami mengeluarkan isi dari blok memori 00. Kami melakukan ini karena kami membutuhkan 1 sebagai angka pertama dalam arus keluaran kami. Blok memori 00 sudah berisi 1 sehingga kita dapat menampilkan langsung darinya.

step 2

Output Stream: 1

Langkah 3: 2 00 Untuk membuat aliran keluaran lainnya, kita perlu menambah setiap nilai keluaran dengan 1 untuk membuat nilai berikutnya dalam aliran. Karena kita memiliki 1 di akumulator, kita perlu menambahkan 1 lagi untuk mendapatkan nilai keluaran berikutnya, 2. Jadi dalam instruksi ini kita menambahkan isi blok memori 00, 1, ke isi akumulator tanpa mengatur ulangnya Pertama. Konten akumulator sekarang 2.

step 3 Program Tanpa Input tetapi Output pada Asembler

Langkah 4: 6 02 Kami ingin mengeluarkan nomor berikutnya dari aliran keluaran, 2, yang sekarang ada di akumulator. Ingatlah bahwa kita tidak dapat mengeluarkan langsung dari akumulator, jadi pertama-tama kita harus menyimpan isinya ke blok memori. Dalam instruksi ini, kami memilih blok memori 02 untuk tujuan ini. Anda bisa memilih blok kosong mana saja. Jadi sekarang blok memori 02 berisi 2.

step 4 Program Tanpa Input tetapi Output pada Asembler

Langkah 5: 5 02 Kita sekarang dapat mengeluarkan nomor berikutnya dari aliran keluaran dari blok memori 02.

step 5 Program Tanpa Input tetapi Output pada Asembler

Output Stream: 1 2

Langkah 6: 8 27 Karena kita perlu menambah lagi dengan 1 untuk mendapatkan nilai keluaran berikutnya, kita bisa mengulangi urutan instruksi kenaikan (blok 27)-penyimpanan (blok 28)-keluaran (blok 29) tanpa batas untuk membangun sisa aliran keluaran. Instruksi pertama dalam urutan ini, bertambah 1, berada di blok memori 27. Oleh karena itu, itulah lokasi yang perlu kita lompati untuk mengulang urutan.

step 6 Program Tanpa Input tetapi Output pada Asembler

Ikuti perubahan dalam beberapa langkah program berikutnya. Perhatikan pola yang berkembang. Saya hanya menunjukkan langkah-langkah kenaikan dan penyimpanan (digabungkan menjadi satu gambar) untuk menekankan bagaimana isi akumulator dan blok memori 02 berubah untuk setiap eksekusi urutan keluaran-penambahan.

Langkah 7 & 8

step 8 Program Tanpa Input tetapi Output pada Asembler

Output Stream (setelah langkah 9): 1 2 3

…… Langkah 11 & 12

step 9

Output Stream (setelah langkah 13): 1 2 3 4

…… Langkah 15 & 16

step  15

Output Stream (Setelah langkah 17): 1 2 3 4 5

Urutannya terus berulang tanpa batas.

LABEL LOKAL di dalam Program Tanpa Input tetapi Output pada Asembler

Pada prinsipnya, sebuah label dapat memiliki nama yang mengikuti aturan sintaks sederhana dari assembler. Namun dalam praktiknya, nama label harus deskriptif. Nama seperti DATE, MORE, LOSS, RED lebih disukai daripada A001, A002, … Namun ada pengecualian. Penggunaan label non-deskriptif A1 berikut ini
contoh:
.
JMP A1
DDCT DS 12 reserve 12 locations for array DDCT
A1 .
.

dibenarkan karena hanya digunakan untuk melompati array DDCT . (Perhatikan bahwa nama larik bersifat deskriptif, mungkin berarti deduksi atau kamus ganda ) Kita katakan bahwa A1 hanya digunakan secara lokal, untuk melayani tujuan yang terbatas.
Akibatnya, banyak assembler mendukung fitur yang disebut label lokal. Ide utamanya adalah jika label digunakan secara lokal dan tidak memerlukan nama deskriptif, mengapa tidak memberinya nama yang menandakan fakta ini. Nama seperti 1H, 2H untuk label lokal digunakan. Nama label lokal dalam contoh kami adalah satu digit desimal. Ketika label tersebut dirujuk (di bidang operan), digit diikuti oleh B atau F (untuk Mundur atau Maju).

LC
.
.
13 1:…
.
.
17 JMP 1F jump to 24
.
.
24 1:LOD R2,1B 1B here means address 13
.
.
31 1:ADD R1,2F 2F is address 102
.
.
102 2:DC 1206,-17
.
.
115 SUB R3,2B-1 102-1=101

CONTOH LABEL LOKAL

Contoh tersebut menunjukkan bahwa label lokal adalah konsep yang sederhana, berguna, dan mudah diterapkan. Dalam two-pass assembler, setiap label lokal dimasukkan ke dalam tabel simbol seperti simbol lainnya, di pass 1. Dengan demikian tabel simbol dalam contoh kita berisi:
Tabel Simbol

n v
113
124
131
2 102

Urutan label dalam tabel simbol adalah penting. Jika tabel simbol diurutkan di antara dua lintasan, semua kemunculan setiap label oktal harus tetap diurutkan berdasarkan nilai. Pada pass 2, ketika sebuah instruksi menggunakan label oktal seperti 1F , assembler mengidentifikasi kemunculan spesifik label 1 dengan membandingkan semua label lokal 1 dengan nilai LC saat ini. Instruksi pertama dalam contoh kita adalah ‘JMP 1F’ pada LC=17. Jelas, assembler harus mencari label oktal dengan nama ‘1’ dan nilai .17. Label terkecil tersebut memiliki nilai 24. Dalam kasus kedua, LC=24 dan assembler mencari 1B. Ia membutuhkan label dengan nama ‘1 ‘dan nilai yang terbesar di antara semua nilai <24. Oleh karena itu mengidentifikasi label sebagai ‘1’ pada 13.

Dalam assembler sekali jalan, sekali lagi label dikenali dan dimasukkan ke dalam tabel simbol dalam satu lintasan. Instruksi yang menggunakan label oktal iB tidak menjadi masalah, karena membutuhkan kemunculan terbaru dari label lokal ‘1’ dalam tabel. Instruksi menggunakan iF ditangani seperti kasus simbol masa depan lainnya. Entri dibuka di tabel simbol dengan nama iF , tipe U , dan nilai yang merupakan penunjuk ke instruksi.
Pada contoh di atas, snapshot dari tabel simbol pada LC=32 adalah:

TABEL SIMBOL

n v t
113 D
124 D
1 31 D 31 is the value of the third 1
2 31 U 31 is a pointer to the ADD instruction

Keuntungan dari fitur ini adalah label lokal mudah diidentifikasi, karena namanya dimulai dengan angka. Sebagian besar assembler memerlukan nama label biasa untuk memulai dengan huruf. Di assembler modern, label lokal terkadang menggunakan sintaks yang berbeda dari yang ditampilkan di sini.
LC sebagai simbol lokal
Hampir semua assembler mengizinkan notasi seperti ‘BPL +6′ di mana ‘‘ berarti nilai LC saat ini. Operan dalam hal ini terletak pada lokasi titik 6 mengikuti instruksi BPL.
Simbol LC dapat menjadi bagian dari ekspresi alamat apa pun dan, tentu saja, dapat ditemukan kembali. Jadi *+A valid jika A absolut, sedangkan *-A selalu baik-baik saja (dan absolut jika A relatif, relatif jika A absolut). Fitur ini mudah diimplementasikan. Ekspresi alamat yang melibatkan ‘*’ dihitung, menggunakan nilai LC saat ini, dan nilai tersebut digunakan untuk menyusun instruksi, atau menjalankan arahan, pada baris sumber saat ini. Tidak ada yang disimpan di tabel simbol.

Beberapa assembler menggunakan asterisk untuk perkalian, dan mungkin menunjukkan periode ‘.’ atau ‘$’ untuk simbol LC. Pada PDP-11 notasi ‘X:.=.+8’ digunakan untuk menaikkan LC sebesar 8, dan dengan demikian mencadangkan delapan lokasi (bandingkan dengan direktif DS).

Link terkait:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *