Hitung ekspresi di assembler

pemrograman


Saya harus menghitung ekspresi yang diberikan
F= (A+B)^2*CA
pada mesin alamat 0,1,2,3.
Saya butuh bantuan untuk mesin 0 alamat, dan apakah kode untuk mesin lain sudah benar?

Apa yang saya coba:

0 address machine
     Need help ??????

   1 address machine
       LOAD A
       ADD B
       STORE TEMP
       MUL TEMP
       MUL C
       SUB A
       STORE F

   2 address machine
       MOVE F, A
       ADD F, B
       MUL F, F
       MUL F, C
       SUB F, A

     3 address machine
       ADD F, A, B
       MUL F, F, F
       MUL F, F, C
       SUB F, F, A

Solusi 1

Meskipun kami sangat bersedia membantu mereka yang mengalami kesulitan, bukan berarti kami ada di sini untuk melakukan semuanya untuk Anda! Kami tidak dapat melakukan semua pekerjaan, Anda dibayar untuk ini, atau itu bagian dari nilai Anda dan sama sekali tidak adil bagi kami untuk melakukan semuanya untuk Anda.

Jadi kami membutuhkan Anda untuk melakukan pekerjaan itu, dan kami akan membantu Anda ketika Anda mengalami kebuntuan. Itu tidak berarti kami akan memberi Anda solusi langkah demi langkah yang bisa Anda berikan!
Mulailah dengan menjelaskan di mana Anda berada saat ini, dan apa langkah selanjutnya dalam proses tersebut. Kemudian beritahu kami apa yang telah Anda coba agar langkah berikutnya berhasil, dan apa yang terjadi ketika Anda berhasil.

Saat ini, kami harus membuat asumsi tentang berbagai “mesin” Anda yang mungkin benar atau mungkin salah – Saya memahami beberapa assembler dunia nyata yang ditargetkan pada prosesor tertentu (atau keluarga prosesor) dan semuanya bekerja dengan cara yang berbeda: kode yang berfungsi untuk satu kode akan gagal parah di kode lain. Anda perlu membaca apa yang diberikan tutor Anda sebagai “definisi kode mesin” untuk setiap “jenis mesin” Anda untuk mendapatkan kode yang berfungsi untuk mereka. Meskipun sepertinya ketiga kode Anda berfungsi, hal itu melibatkan beberapa asumsi yang cukup besar yang mungkin tidak valid untuk mesin virtual Anda.
Misalnya, setidaknya dua keluarga prosesor dunia nyata yang dapat saya kodekan tidak memiliki instruksi perkalian sama sekali, dan salah satunya memiliki eksekusi bersyarat untuk setiap instruksi! Kode perakitan untuk ini akan sangat berbeda dari contoh Anda!

Jika Anda mengalami masalah saat memulai, ini mungkin bisa membantu: Cara Menulis Kode untuk Memecahkan Masalah, Panduan Pemula[^]

Solusi 2

Mengingat Anda sudah memiliki sebagian jawaban untuk kasus mesin tiga alamat maka inilah yang saya harapkan dari Anda (diadaptasi untuk arsitektur prosesor yang dimaksud):

ASM
LOAD A, R1
LOAD B, R2
ADD R1, R2, R3
MUL R3, R3, R4
LOAD C, R5
MUL R4, R5, R6
SUB R6, R1, R7

1) LOAD A, R1: Memuat nilai A ke dalam daftar R1.
2) LOAD B, R2: Memuat nilai B ke dalam daftar R2.
3) ADD R1, R2, R3: Tambahkan nilai dalam register R1 Dan R2 dan simpan hasilnya di register R3.
4) MUL R3, R3, R4: Kalikan nilai dalam register R3 dengan sendirinya dan menyimpan hasilnya dalam register R4.
5) LOAD C, R5: Memuat nilai C ke dalam daftar R5.
6) MUL R4, R5, R6: Kalikan nilai dalam register R4 Dan R5 dan simpan hasilnya di register R6.
7) SUB R6, R1, R7: Kurangi nilai dalam register R1 dari nilai dalam register R6 dan simpan hasilnya di register R7.

コメント

タイトルとURLをコピーしました