2009-08-20 15 views
8

Tôi rất mới với khái niệm viết một bộ lắp ráp và thậm chí sau khi đọc rất nhiều tài liệu, tôi vẫn gặp khó khăn trong đầu quanh một vài khái niệm.Viết một bộ ghép Z80 - lexing ASM và xây dựng một cây phân tích bằng cách sử dụng bố cục?

  1. Quy trình thực sự chia nhỏ tệp nguồn thành mã thông báo là gì? Tôi tin rằng quá trình này được gọi là lexing, và tôi đã tìm kiếm cao và thấp cho một ví dụ mã thực sự có ý nghĩa, nhưng tôi không thể tìm thấy một điều như vậy ví dụ mã đơn giản rất hoan nghênh;)

  2. Khi phân tích cú pháp, thông tin bao giờ cần phải được thông qua lên hoặc xuống cây? Lý do tôi hỏi như sau, hãy:

    LD BC, nn

Nó cần phải được biến thành cây phân tích cú pháp sau khi tokenized (???)

___ LD ___ 
    |  | 
BC  nn 

Bây giờ , khi cây này được di chuyển, cần phải tạo mã máy sau:

01 n n 

Nếu hướng dẫn là:

LD DE,nn 

Sau đó, sản lượng sẽ cần phải:

11 n n 

Nghĩa là nó đặt ra câu hỏi, nào LD nút trở lại một cái gì đó khác nhau dựa trên các toán hạng hoặc là nó các toán hạng mà trả về một cái gì đó? Và điều này đạt được như thế nào? Các ví dụ mã đơn giản hơn sẽ là tuyệt vời nếu thời gian cho phép.

Tôi quan tâm nhất đến việc tìm hiểu một số quy trình thô tại đây thay vì xem xét các công cụ hiện có nâng cao, vì vậy, xin lưu ý rằng trước khi gửi tôi đến Yacc hoặc Flex.

Trả lời

8

Vâng, cấu trúc của cây bạn thực sự muốn cho một hướng dẫn hoạt động trên một thanh ghi và một bộ nhớ giải quyết chế độ involing một dịch chuyển bù đắp và một chỉ số đăng ký sẽ trông như thế này:

INSTRUCTION-----+ 
    |  |  | 
    OPCODE REG  OPERAND 
        |  | 
       OFFSET INDEXREG 

Và có, bạn muốn muốn vượt qua các giá trị lên và xuống cây. Phương pháp chỉ định chính thức việc chuyển giá trị được gọi là "ngữ pháp thuộc tính" và bạn trang trí ngữ pháp cho cú pháp (trong trường hợp của bạn, cú pháp lắp ráp) với giá trị và tính toán qua các giá trị đó. Để biết thêm thông tin, hãy xem Wikipedia on attribute grammars.

Trong một related question you asked, tôi đã thảo luận một công cụ , DMS, xử lý ngữ pháp biểu thức và xây dựng cây.Như công cụ thao tác ngôn ngữ, DMS phải đối mặt chính xác với cùng một số này lên xuống và xuống các vấn đề về luồng thông tin cây. Nó không nên làm bạn ngạc nhiên, rằng là một công cụ thao tác ngôn ngữ cao cấp, nó có thể xử lý trực tiếp tính toán ngữ pháp thuộc tính .

+1

Điều này được thiết kế để minh họa cho những cây anh ta cần để xây dựng, thay vì phù hợp với một công cụ Z80 cụ thể. Tôi mã hóa một LOT của Z80 lắp ráp trở lại trong những năm 1980; Tôi có thể biết nhiều hơn về nó hơn bạn nghĩ. –

+0

Sau đó trình bày kiến ​​thức của bạn. Bạn đã viết một bộ ghép Z80 chưa? Tôi chưa, nhưng tôi đã viết 8080 và 6809 assembler, và lời khuyên của bạn dường như là tôi đã chết sai. –

+0

Trải nghiệm của bạn có lẽ khác với kinh nghiệm của tôi. Tôi đã mã hóa các trình biên tập cho Collins 8311 (khoảng năm 1968), một máy 12 và 16 bit đã không làm cho nó thương mại, do đó bạn không nghe nói về chúng, các bộ vi mã, và bộ sao chép 6809 mà bạn thấy trong thông điệp khác. Tôi cũng đã xây dựng một loạt các kết thúc trước trình biên dịch (kiểm tra thông tin sinh học và trang web của tôi). Những người lắp ráp ban đầu của tôi được xây dựng bằng những phương tiện đặc biệt và làm việc. Những thứ từ những năm 80 tôi đã xây dựng bằng cách sử dụng lexers và phân tích cú pháp bởi vì nó dễ dàng hơn để xác định, để duy trì, để mở rộng, bạn đặt tên cho nó. –

5

Không cần thiết phải xây dựng một cây phân tích cú pháp. Mã số Z80 op rất đơn giản. Chúng bao gồm các mã op và các toán hạng 0, 1 hoặc 2, được phân tách bằng dấu phẩy. Bạn chỉ cần chia opcode lên thành (tối đa 3) thành phần với một trình phân tích cú pháp rất đơn giản - không cần cây.

+0

Điều gì về các địa chỉ bộ nhớ tương đối> chắc chắn một số loại cây biểu tượng là cần thiết cho điều này? có lẽ ngay cả một bảng – Darknight

+0

Người hỏi đã hỏi về việc phân tích cú pháp các mã OP. Bạn chắc chắn cần một bảng biểu tượng để hỗ trợ trong việc tạo đầu ra mã máy thực tế của trình lắp ráp, nhưng đó là một vấn đề hoàn toàn khác. –

+0

@Darknight: Sẽ vẫn không có điểm hợp lệ để tạo cây phân tích cú pháp. Ví dụ: các lần xuất hiện khác có thể phát một phần như sau đây là một số chuỗi mã ASM có các biến thể trong cú pháp: Nhãn, Nhận xét, Chân đế, Biến toàn cục, .DB, .DS, .DW . đơn giản hơn nếu một cây phân tích cú pháp được sử dụng? @Neil: Bạn có thể giải thích chi tiết không? Trân trọng, GP –

3

Thực ra, các opcodes không có cơ số byte, mà là một cơ số bát phân. Mô tả tốt nhất tôi biết là DECODING Z80 OPCODES.

+0

Ya, đúng vậy. Octal cho phép bạn dịch trực tiếp và một cuộc gọi đệ quy có thể xử lý các thanh ghi offset. Người ta không cần phải xây dựng một cây cú pháp chút nào. Mỗi lệnh và được ánh xạ trực tiếp. – EvilTeach