Tính biểu thức trong trình biên dịch mã

lập trình


Tôi phải tính toán biểu thức đã cho
F= (A+B)^2*CA
trên máy địa chỉ 0,1,2,3.
Tôi cần trợ giúp về máy có địa chỉ 0 và liệu mã của các máy khác có đúng không?

Những gì tôi đã thử:

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

Giải pháp 1

Mặc dù chúng tôi rất sẵn lòng giúp đỡ những người đang gặp khó khăn nhưng điều đó không có nghĩa là chúng tôi ở đây để làm tất cả cho bạn! Chúng tôi không thể làm tất cả công việc, bạn sẽ được trả tiền cho việc này hoặc đó là một phần điểm số của bạn và sẽ không công bằng chút nào nếu chúng tôi làm tất cả cho bạn.

Vì vậy chúng tôi cần bạn thực hiện công việc và chúng tôi sẽ giúp đỡ bạn khi bạn gặp khó khăn. Điều đó không có nghĩa là chúng tôi sẽ cung cấp cho bạn giải pháp từng bước mà bạn có thể thực hiện!
Bắt đầu bằng cách giải thích hiện tại bạn đang ở đâu và bước tiếp theo trong quy trình là gì. Sau đó, hãy cho chúng tôi biết bạn đã cố gắng thực hiện bước tiếp theo như thế nào và điều gì đã xảy ra khi bạn thực hiện.

Hiện tại, chúng tôi phải đưa ra các giả định về các “máy” khác nhau của bạn, điều này có thể đúng hoặc không – Tôi hiểu một số trình biên dịch trong thế giới thực khác nhau nhắm vào các bộ xử lý (hoặc họ bộ xử lý) cụ thể và tất cả chúng đều hoạt động theo những cách khác nhau: mã phù hợp với cái này sẽ thất bại nặng nề ở cái khác. Bạn cần đọc những gì gia sư đưa cho bạn dưới dạng “định nghĩa mã máy” cho từng “loại máy” của bạn để lấy mã hoạt động cho chúng. Mặc dù có vẻ như ba mã của bạn sẽ hoạt động, nhưng điều đó liên quan đến một số giả định khá lớn có thể không hợp lệ đối với máy ảo của bạn.
Ví dụ: ít nhất hai trong số họ bộ xử lý trong thế giới thực mà tôi có thể viết mã không có lệnh nhân nào cả và một trong số chúng có khả năng thực thi có điều kiện cho mỗi lệnh đơn lẻ! Mã lắp ráp cho những thứ này sẽ rất khác với ví dụ của bạn!

Nếu bạn gặp vấn đề khi bắt đầu thì điều này có thể hữu ích: Cách viết mã để giải quyết vấn đề, Hướng dẫn cho người mới bắt đầu[^]

Giải pháp 2

Cho rằng bạn đã có câu trả lời một phần cho trường hợp máy ba địa chỉ thì đây là điều tôi mong đợi ở bạn (được điều chỉnh cho phù hợp với kiến ​​​​trúc bộ xử lý được đề cập):

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: Nạp giá trị của A vào đăng ký R1.
2) LOAD B, R2: Nạp giá trị của B vào đăng ký R2.
3) ADD R1, R2, R3: Thêm các giá trị vào sổ đăng ký R1R2 và lưu kết quả vào sổ đăng ký R3.
4) MUL R3, R3, R4: Nhân giá trị trong thanh ghi R3 tự nó và lưu kết quả vào sổ đăng ký R4.
5) LOAD C, R5: Nạp giá trị của C vào đăng ký R5.
6) MUL R4, R5, R6: Nhân các giá trị trong sổ đăng ký R4R5 và lưu kết quả vào sổ đăng ký R6.
7) SUB R6, R1, R7: Trừ giá trị trong thanh ghi R1 từ giá trị trong thanh ghi R6 và lưu kết quả vào sổ đăng ký R7.

コメント

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