Mục lục:

Viết mã và kiểm tra máy tính bằng ngôn ngữ máy: 6 bước
Viết mã và kiểm tra máy tính bằng ngôn ngữ máy: 6 bước

Video: Viết mã và kiểm tra máy tính bằng ngôn ngữ máy: 6 bước

Video: Viết mã và kiểm tra máy tính bằng ngôn ngữ máy: 6 bước
Video: Tự học Lập Trình Python trong 10 phút - Siêu Dễ Hiểu 2024, Tháng mười một
Anonim
Image
Image

Trong Tài liệu hướng dẫn này, tôi sẽ chỉ cho bạn cách viết mã và kiểm tra một chương trình máy tính bằng ngôn ngữ máy. Ngôn ngữ máy là ngôn ngữ mẹ đẻ của máy tính. Bởi vì nó được cấu tạo bởi các chuỗi 1 và 0 nên con người không dễ dàng hiểu được. Để giải quyết vấn đề này, trước tiên chúng tôi viết mã các chương trình bằng một ngôn ngữ cấp cao như C ++ hoặc Java, sau đó sử dụng các chương trình máy tính đặc biệt để dịch chúng sang các máy tính 1 và 0 có thể hiểu được. Học viết mã bằng một ngôn ngữ cấp cao chắc chắn là điều không cần phải bàn cãi nhưng một phần giới thiệu ngắn gọn về ngôn ngữ máy có thể cung cấp cái nhìn sâu sắc có giá trị về cách máy tính hoạt động và nâng cao sự đánh giá cao của công nghệ rất quan trọng này.

Để viết mã và kiểm tra một chương trình ngôn ngữ máy, chúng ta cần truy cập vào một máy tính không rườm rà có ngôn ngữ máy dễ hiểu. Máy tính cá nhân quá phức tạp để có thể xem xét. Giải pháp là sử dụng Logisim, một trình mô phỏng logic, chạy trên máy tính cá nhân. Với Logisim, chúng tôi có thể mô phỏng một máy tính đáp ứng nhu cầu của chúng tôi. Video trên cung cấp cho bạn một số ý tưởng về những gì chúng tôi có thể thực hiện với Logisim.

Đối với thiết kế máy tính, tôi đã chuyển thể một thiết kế từ sách điện tử Kindle Build Your Own Computer - From Scratch. Tôi bắt đầu với máy tính BYOC được mô tả ở đó và cắt nó xuống thành BYOC-I cơ bản khác nhau (Tôi dành cho người có thể hướng dẫn) mà chúng tôi sẽ sử dụng trong Có thể hướng dẫn này.

Ngôn ngữ máy của BYOC-I rất đơn giản và dễ hiểu. Bạn sẽ không cần bất kỳ kiến thức đặc biệt nào về máy tính hoặc lập trình. Tất cả những gì cần có là đầu óc ham học hỏi và ham học hỏi

Đọc thêm

Bạn có thể thắc mắc tại sao chúng ta sử dụng "máy" để mô tả máy tính khi nó không phải là thiết bị cơ khí. Lý do là lịch sử; các thiết bị tính toán đầu tiên là cơ khí bao gồm bánh răng và bánh xe. Lời bài hát của Allan Sherman, "Tất cả đều là bánh răng rắc rối …" chỉ mới ra mắt được một hoặc hai thế kỷ. Đọc thêm về tính toán sớm tại đây.

Bước 1: Danh sách bộ phận

Hệ thống phân cấp và mã ngôn ngữ máy
Hệ thống phân cấp và mã ngôn ngữ máy

Danh sách các bộ phận là ngắn. Chỉ hai mục này là bắt buộc, cả hai đều có thể tải xuống miễn phí:

  1. "Logisim-win-2.7.1.exe" - Logisim là một trình mô phỏng logic phổ biến và dễ sử dụng. Tải xuống tệp thực thi Logisim từ đây, sau đó tạo một đoạn ngắn ở nơi thuận tiện như máy tính để bàn của bạn. Nhấp đúp vào biểu tượng Logisim để khởi chạy nó. Lưu ý: Logisim sử dụng Java Runtime Package nằm ở đây. Bạn có thể được yêu cầu tải xuống.
  2. BYOC-I-Full.cir”- Tải xuống tệp mạch Logisim bên dưới.

Khởi chạy Logisim sau đó nhấp vào "File-Open" và tải tệp BYOC-I-Full.cir. Hình ảnh trên cho thấy môi trường làm việc Logisim. BYOC-I được đại diện bởi khối mạch phụ. Được kết nối bên ngoài là hai đầu vào, Đặt lại và Chạy, và hiển thị thập lục phân cho các thanh ghi và bộ nhớ chương trình của BYOC-I.

Bộ nhớ chương trình của BYOC-I được tải sẵn một chương trình đơn giản đếm từ 1 đến 5 trong thanh ghi A. Để thực thi (Chạy) chương trình, hãy làm theo các bước sau.

Bước 1 - Nhấp vào Công cụ Poke. Con trỏ sẽ chuyển thành "ngón tay" chọc. Bước 2 - Chọc đầu vào Đặt lại hai lần, một lần thay đổi thành "1" và một lần nữa để thay đổi trở lại "0". Thao tác này sẽ đặt lại BYOC-I để bắt đầu chương trình tại địa chỉ 0. Bước 3 - Chọc đầu vào Run một lần để thay đổi nó thành "1". Thanh ghi A sẽ hiển thị số đếm thay đổi từ 1 đến 5 sau đó lặp lại. Bước 4 - Nếu chương trình không thực thi, nhấn control-K và nó sẽ bắt đầu.

Nếu bạn muốn khám phá các khả năng của Logisim, hãy nhấp vào liên kết Trợ giúp trên Thanh Menu. Từ đó, bạn có thể khám phá "Hướng dẫn", "Hướng dẫn sử dụng" và "Tham khảo thư viện" của Logisim. Một đoạn video giới thiệu tuyệt vời được tìm thấy ở đây.

Bước 2: Hệ thống phân cấp và mã ngôn ngữ máy

Hệ thống phân cấp và mã ngôn ngữ máy
Hệ thống phân cấp và mã ngôn ngữ máy

Máy tính BYOC-I thực hiện các tác vụ dựa trên các chương trình được viết bằng ngôn ngữ máy. Đến lượt mình, các chương trình BYOC-I bao gồm các lệnh được thực thi theo một trình tự được xác định rõ ràng. Mỗi lệnh được tạo bằng các mã có độ dài cố định đại diện cho các thành phần hoạt động khác nhau của BYOC-I. Cuối cùng, các mã này bao gồm các chuỗi 1 và 0 tạo thành ngôn ngữ máy mà BYOC-I thực thi.

Theo cách giải thích, chúng tôi sẽ bắt đầu với mã và làm việc theo cách của chúng tôi cho đến cấp chương trình. Sau đó, chúng tôi sẽ viết mã một chương trình đơn giản, tải nó vào bộ nhớ của BYOC-I và thực thi nó.

Mã bao gồm một số chữ số hoặc bit nhị phân (1 và 0) cố định, viết tắt là. Ví dụ, bảng dưới đây hiển thị tất cả các mã có thể có (16 mã trong tất cả) cho một mã có chiều rộng 4 bit. Được hiển thị dọc theo mã là hệ thập lục phân (cơ số 16) và tương đương thập phân. Hệ thập lục phân được sử dụng để chỉ các giá trị nhị phân vì nó nhỏ gọn hơn nhị phân và dễ chuyển đổi từ nhị phân hơn thập phân. Tiền tố "0x" cho bạn biết số theo sau là hệ thập lục phân hay gọi tắt là "hex".

Nhị phân - Thập lục phân - Thập phân0000 0x0000 00001 0x0001 10010 0x0002 20011 0x0003 30100 0x0004 40101 0x0005 50111 0x0007 71000 0x0008 81001 0x0009 91010 0x000A 101011 0x000B 111100 0x000C 121101 0x000D 131110

Chiều rộng của mã xác định số lượng mục có thể được đại diện. Như đã lưu ý, mã rộng 4 bit ở trên có thể đại diện cho tối đa 16 mục (0 đến 15); nghĩa là, 2 lần 2 lấy 4 lần hoặc lũy thừa 2 đến 4 bằng 16. Nói chung, số hạng mục có thể biểu diễn là 2 được nâng lên lũy thừa thứ n. Đây là danh sách ngắn các dung lượng mã n-bit.

n - Số mặt hàng1 22 43 84 165 326 647 1288 256

Độ rộng mã máy tính BYOC-I được chọn để phù hợp với số lượng mục được mã biểu diễn. Ví dụ, có bốn Loại lệnh, vì vậy mã rộng 2 bit là phù hợp. Dưới đây là các mã BYOC-I với giải thích ngắn gọn về từng mã.

Mã loại lệnh (tt) Có bốn loại lệnh: (1) MVI - Di chuyển một giá trị hằng số 8 bit tức thời vào một thanh ghi bộ nhớ. Thanh ghi bộ nhớ là một vùng nhớ chứa dữ liệu được sử dụng để tính toán, (2) MOV - Di chuyển dữ liệu từ thanh ghi này sang thanh ghi khác, (3) RRC - Thực hiện phép tính thanh ghi đến thanh ghi, và (4) JMP - Nhảy sang một hướng dẫn khác thay vì tiếp tục ở hướng dẫn tiếp theo. Mã loại hướng dẫn BYOC-I được thông qua như sau:

00 MVI01 MOV10 RRC11 JMP

Mã thanh ghi (dd và ss) BYOC-I có bốn thanh ghi 8 bit có khả năng lưu trữ các giá trị từ 0 đến 255. Mã 2 bit là đủ để chỉ định bốn thanh ghi:

00 Thanh ghi F01 Thanh ghi E10 Thanh ghi D11 Thanh ghi A

Mã tính toán (ccc) BYOC-I hỗ trợ bốn phép toán số học / logic. Để cho phép mở rộng trong tương lai lên tám phép tính, mã 3 bit được sử dụng:

000 THÊM, thêm hai giá trị 8 bit trong các thanh ghi được chỉ định và lưu trữ kết quả vào một trong các thanh ghi 001 SUB, trừ hai giá trị 8 bit trong các thanh ghi được chỉ định và lưu trữ kết quả vào một trong các thanh ghi 010 - 011 Được dự trữ để sử dụng trong tương lai100 AND, logic VÀ hai giá trị 8 bit trong các thanh ghi được chỉ định và lưu trữ kết quả vào một trong các thanh ghi101 HOẶC, theo logic HOẶC hai giá trị 8 bit trong các thanh ghi được chỉ định và lưu trữ kết quả vào một trong các thanh ghi110 đến 111, Được dự trữ để sử dụng trong tương lai

Mã nhảy (j) Mã 1 bit cho biết bước nhảy là vô điều kiện (j = 1) hay được điều kiện hóa trên kết quả tính toán không phải là 0 (j = 0).

Dữ liệu / Mã địa chỉ (v… v) / (a… a) Dữ liệu 8 bit có thể được bao gồm trong các lệnh nhất định đại diện cho các giá trị từ 00000000 đến 11111111 hoặc 0 đến 255 thập phân. Dữ liệu này rộng 8 bit để lưu trữ trong các thanh ghi 8 bit của BYOC-I. Với số học thập phân, chúng tôi không hiển thị các số 0 ở đầu. Với máy tính số học, chúng tôi hiển thị các số 0 ở đầu nhưng chúng không ảnh hưởng đến giá trị. 00000101 về số giống với số thập phân 101 hoặc 5.

Tài liệu tham khảo được đề xuất

Ký hiệu nhị phân - https://learn.sparkfun.com/tutorials/binaryHexadecimal Notation -

Đọc thêm

Ý tưởng sử dụng mã để thúc đẩy một quy trình đã có từ rất lâu. Một ví dụ hấp dẫn là Máy dệt Jacquard. Máy dệt tự động được điều khiển bởi một chuỗi thẻ gỗ, trong đó các lỗ được khoan đại diện cho các mã cho sợi màu khác nhau để dệt. Tôi đã thấy cái đầu tiên của mình ở Scotland, nơi nó được dùng để làm bánh tartans đầy màu sắc. Đọc thêm về Máy dệt Jacquard tại đây.

Bước 3: Giải phẫu Hướng dẫn BYOC-I

Giải phẫu của Hướng dẫn BYOC-I
Giải phẫu của Hướng dẫn BYOC-I

Với các mã của BYOC-I, chúng tôi chuyển sang cấp độ tiếp theo, hướng dẫn. Để tạo hướng dẫn cho BYOC-I, chúng tôi đặt các mã lại với nhau theo thứ tự được chỉ định và ở các vị trí cụ thể trong hướng dẫn. Không phải tất cả các mã đều xuất hiện trong tất cả các hướng dẫn nhưng khi chúng xuất hiện, chúng chiếm một vị trí cụ thể.

Loại lệnh MVI yêu cầu nhiều bit nhất, 12 bit. Bằng cách tạo từ lệnh có độ dài 12 bit, chúng tôi đáp ứng tất cả các lệnh. Các bit không được sử dụng (được gọi là "không quan tâm") được cho giá trị 0. Đây là Bộ lệnh BYOC-I.

  1. Di chuyển ngay lập tức (MVI) - 00 dd vvvvvvvv Chức năng: Di chuyển giá trị dữ liệu 8 bit V = vvvvvvvv vào thanh ghi đích dd. Sau khi thực hiện, đăng ký dd sẽ có giá trị vvvvvvvv. Viết tắt: MVI R, V trong đó R là A, D, E hoặc F. Ví dụ: 00 10 00000101 - MVI D, 5 - Di chuyển giá trị 5 vào thanh ghi D.
  2. Di chuyển thanh ghi sang thanh ghi (MOV) - 01 dd ss 000000 Chức năng: Di chuyển dữ liệu từ thanh ghi nguồn ss sang thanh ghi giải hạn dd. Sau khi thực thi, cả hai thanh ghi đều có cùng giá trị với thanh ghi nguồn. Viết tắt: MOV Rd, Rs trong đó Rd là thanh ghi đích A, D, E hoặc F và Rs là thanh ghi nguồn A, D, E hoặc F. Ví dụ: 01 11 01 000000 - MOV A, E - Di chuyển giá trị trong thanh ghi E để đăng ký A.
  3. Đăng ký để tính toán đăng ký (RRC) - 10 dd ss ccc 000 Chức năng: Thực hiện phép tính được chỉ định ccc bằng cách sử dụng thanh ghi nguồn ss và thanh ghi đích dd sau đó lưu trữ kết quả trong thanh ghi đích. Viết tắt: ADD Rd, Rs (ccc = 000 Rd + Rs được lưu trữ trong Rđ); SUB Rd, Rs (ccc = 001 Rd - Rs được lưu trữ trong Rd); AND Rd, Rs (ccc = 100 Rd VÀ Rs được lưu trữ trong Rd); OR Rd, Rs (ccc = 101 Rd OR Rs được lưu trữ trong Rd). Ví dụ: 10 00 11 001 000 - SUB F, A - Trừ giá trị trong thanh ghi A từ thanh ghi F với kết quả trong thanh ghi F.
  4. Chuyển đến lệnh khác (JMP) - 11 j 0 aaaaaaaa Chức năng: Thay đổi việc thực thi thành một lệnh khác nằm tại địa chỉ aaaa aaaa (a) Không điều kiện (j = 1) -11 1 0 aaaaaaaa Viết tắt: JMP L trong đó L là địa chỉ aaaa aaaaVí dụ: 11 1 0 00001000 - JMP 8 - Thay đổi thực thi thành địa chỉ 8. (b) Có điều kiện (j = 0) khi phép tính trước đó dẫn đến kết quả không phải là 0 - 11 0 0 aaaaaaaa Viết tắt: JNZ L trong đó L là địa chỉ aaaa aaaa Ví dụ: 11 0 0 00000100 JNZ 4 Nếu phép tính cuối cùng mang lại giá trị khác 0, hãy thay đổi việc thực thi thành địa chỉ 4.

Các bit từ lệnh được đánh số từ trái (bit quan trọng nhất MSB) sang phải (bit quan trọng nhất LSB) từ 11 đến 0. Thứ tự cố định và vị trí của các mã như sau:

Bits - Mã11-10 Loại lệnh9-8 Thanh ghi đích7-6 Thanh ghi nguồn5-3 Tính toán: 000 - thêm; 001 - số trừ; 100 - logic AND; 101 - logic OR7-0 Giá trị không đổi v… v và a… a (0 đến 255)

Tập lệnh được tóm tắt trong hình trên. Lưu ý sự xuất hiện có cấu trúc và trật tự của các mã trong mỗi hướng dẫn. Kết quả là một thiết kế đơn giản hơn cho BYOC-I và nó giúp con người hiểu được các hướng dẫn dễ dàng hơn.

Bước 4: Mã hóa hướng dẫn máy tính

Mã hóa hướng dẫn máy tính
Mã hóa hướng dẫn máy tính

Trước khi chuyển sang cấp độ chương trình, hãy xây dựng một số hướng dẫn ví dụ bằng Bộ lệnh BYOC-I ở trên.

1. Di chuyển giá trị 1 đến thanh ghi A. Thanh ghi BYOC-I có thể lưu trữ các giá trị từ 0 đến 255. Trong trường hợp này, thanh ghi A sẽ có giá trị 1 (00000001 nhị phân) sau khi thực hiện lệnh.

Viết tắt: MVI A, 1 Mã bắt buộc: Loại MVI - 00; Thanh ghi đích A - 11; Giá trị - 00000001 Từ lệnh: 00 11 00000001

2. Di chuyển nội dung của thanh ghi A sang thanh ghi D. Sau khi thực hiện, cả hai thanh ghi sẽ có giá trị ban đầu trong thanh ghi A.

Viết tắt: MOV D, A (Hãy nhớ rằng đích đến là nguồn đầu tiên và nguồn thứ hai trong danh sách) Các mã bắt buộc: Nhập MOV - 01; Thanh ghi đích D - 10; Nguồn Đăng ký A - 11 Lời hướng dẫn: 01 10 11 000000

3. Thêm nội dung của thanh ghi D vào thanh ghi A và lưu trữ trong thanh ghi A. Sau khi thực hiện, giá trị của thanh ghi A sẽ là tổng giá trị ban đầu của thanh ghi A và thanh ghi D.

Viết tắt: ADD A, D (Kết quả được lưu trong thanh ghi đích) Các mã bắt buộc: Loại RRC - 10; Thanh ghi đích A - 11; Đăng ký nguồn D - 10; Phép tính Thêm - 000 Lời hướng dẫn: 10 11 10 000 000 (ccc là 000 đầu tiên - thêm vào)

4. Nhảy không phải số 0 đến địa chỉ 3. Nếu kết quả của phép tính cuối cùng không phải là số không, việc thực thi sẽ thay đổi thành lệnh tại địa chỉ đã cho. Nếu không, quá trình thực thi tiếp tục theo hướng dẫn sau.

Viết tắt: JNZ 3 Mã bắt buộc: Loại JMP - 11; Loại nhảy - 0; Địa chỉ - 00000003 Từ lệnh: 11 0 0 00000003 (Kiểu bước nhảy là 0 đầu tiên)

5. Nhảy vô điều kiện đến địa chỉ 0. Sau khi thực hiện, việc thực thi thay đổi thành lệnh tại địa chỉ đã cho.

Viết tắt: JMP 0 Yêu cầu mã: Loại JMP - 11; Loại nhảy - 1; Địa chỉ - 00000000 Lời hướng dẫn; 11 1 0 00000000

Mặc dù việc viết mã bằng máy có phần tẻ nhạt, nhưng bạn có thể thấy rằng nó không quá khó. Nếu bạn mã hóa máy là thật, bạn sẽ sử dụng một chương trình máy tính được gọi là trình hợp dịch để dịch từ chữ viết tắt (được gọi là mã lắp ráp) sang mã máy.

Bước 5: Giải phẫu một chương trình máy tính

Giải phẫu của một chương trình máy tính
Giải phẫu của một chương trình máy tính

Chương trình máy tính là một danh sách các lệnh mà máy tính thực hiện bắt đầu từ đầu danh sách, tiếp tục xuống danh sách cho đến cuối. Các lệnh như JNZ và JMP có thể thay đổi lệnh nào được thực thi tiếp theo. Mỗi lệnh trong danh sách chiếm một địa chỉ duy nhất trong bộ nhớ của máy tính bắt đầu từ 0. Bộ nhớ BYOC-I có thể chứa một danh sách 256 lệnh, quá đủ cho mục đích của chúng ta.

Các chương trình máy tính được thiết kế để thực hiện một nhiệm vụ nhất định. Đối với chương trình của chúng tôi, chúng tôi sẽ chọn một nhiệm vụ đơn giản, đếm từ 1 đến 5. Rõ ràng, không có hướng dẫn "đếm", vì vậy bước đầu tiên là chia nhiệm vụ thành các bước có thể được xử lý bởi BYOC-I's very tập hướng dẫn hạn chế.

Bước 1 Di chuyển 1 để đăng ký AS Bước 2 Di chuyển thanh ghi A để đăng ký DS Bước 3 Thêm thanh ghi D vào thanh ghi A và lưu kết quả vào thanh ghi AS Bước 4 Di chuyển 5 để đăng ký ES Bước 5 Trừ thanh ghi A khỏi thanh ghi E và lưu kết quả vào thanh ghi ES Bước 6 Nếu kết quả phép trừ không phải là 0, quay lại Bước 4 và tiếp tục đếm Bước 7 Nếu kết quả phép trừ là 0, hãy quay lại và bắt đầu lại

Bước tiếp theo là dịch các bước này thành hướng dẫn BYOC-I. Các chương trình BYOC-I bắt đầu từ địa chỉ 0 và đánh số liên tiếp. Địa chỉ mục tiêu bước nhảy được thêm vào cuối cùng sau khi tất cả các hướng dẫn được đưa ra..

Địa chỉ: Lệnh - Viết tắt; Mô tả 0: 00 11 00000001 - MVI A, 1; Di chuyển 1 đến thanh ghi A1: 01 10 11 000000 - MOV D, A; Di chuyển thanh ghi A sang thanh ghi D2: 10 11 10 000 000 - ADD A, D; Thêm thanh ghi D vào thanh ghi A và lưu trữ kết quả vào thanh ghi A3: 00 01 00 00000101 - MVI E, 5; Di chuyển thanh ghi 5 E4: 10 01 11 001 000 - SUB E, A; Trừ thanh ghi A khỏi thanh ghi E và lưu trữ kết quả trong thanh ghi E5: 11 0 0 00000010 - JNZ 2; Nếu kết quả phép trừ không phải là 0, hãy quay lại địa chỉ 3 và tiếp tục đếm 6: 11 1 0 00000000 - JMP 0; Nếu kết quả phép trừ là 0, hãy quay lại và bắt đầu lại

Trước khi chuyển chương trình vào bộ nhớ, mã lệnh nhị phân phải được thay đổi thành hệ thập lục phân để sử dụng với Trình chỉnh sửa hệ lục phân Logisim. Đầu tiên, chia lệnh thành ba nhóm, mỗi nhóm 4 bit. Sau đó, dịch các nhóm thành hệ thập lục phân bằng cách sử dụng bảng ở Bước 2. Chỉ ba chữ số thập lục phân cuối cùng (in đậm bên dưới) sẽ được sử dụng.

Address - Instruction Binary - Instruction Binary Split - Instruction (Hex) 0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 100111000000000026 1100110085 110000000026 1100110085 1100000026 1100110085 1100000026 11 111000000010 1110 0000 0000 - 0x0E00

Đã đến lúc chuyển chương trình vào bộ nhớ của BYOC-I để kiểm tra.

Bước 6: Chuyển chương trình sang bộ nhớ và kiểm tra

Chuyển chương trình sang bộ nhớ và kiểm tra
Chuyển chương trình sang bộ nhớ và kiểm tra
Chuyển chương trình sang bộ nhớ và kiểm tra
Chuyển chương trình sang bộ nhớ và kiểm tra

Nhìn vào mạch "chính" của Logisim, khối BYOC-I được hiển thị là biểu tượng cho mạch máy tính thực có nhãn "BYOC-I" trong Explorer Pane. Để nhập một chương trình vào bộ nhớ BYOC-I:

  1. Nhấp chuột phải vào khối BYOC-I (được gọi là "subcircuit") và chọn (di chuột qua và nhấp chuột trái) "View BYOC-I".
  2. Mạch BYOC-I sẽ xuất hiện trong Vùng làm việc. Nhấp chuột phải vào biểu tượng "Bộ nhớ chương trình" và chọn "Chỉnh sửa nội dung..".
  3. Sử dụng Logisim Hex Editor, nhập mã thập lục phân (chỉ in đậm) như hình trên.

Bây giờ bạn đã sẵn sàng để thực thi chương trình. Quay lại mạch chính bằng cách nhấp đúp vào "BYOC-I" trong Explorer Pane. Đầu vào Chạy và Đặt lại phải là "0" để bắt đầu. Sử dụng Công cụ Poke, trước tiên thay đổi Đặt lại thành "1", sau đó quay lại "0". Điều này làm cho địa chỉ bắt đầu 0x0000 và chuẩn bị cho mạch BYOC-I để thực thi. Bây giờ hãy chọc đầu vào Run thành "1" và chương trình sẽ thực thi. (Lưu ý: Bạn chính cần nhấn Control-K một lần để khởi động đồng hồ Logisim. Đây là tính năng cho phép bạn dừng đồng hồ Logisim và chuyển qua một chương trình bằng cách nhấn Control-T liên tục. Hãy thử nó một lúc!)

Đồng hồ Logisim có thể được thiết lập cho một loạt các tần số. Khi tải xuống, nó là 8 Hz (8 chu kỳ mỗi giây). Theo cách máy tính BYOC-I được thiết kế, mỗi lệnh cần bốn chu kỳ đồng hồ để hoàn thành. Vì vậy, để tính tốc độ BYOC-I, hãy chia tần số đồng hồ cho 4. Tại 8 Hz, tốc độ của nó là 2 lệnh mỗi giây. Bạn có thể thay đổi đồng hồ bằng cách nhấp vào "Mô phỏng" trên thanh công cụ và chọn "Tần suất đánh dấu". Phạm vi có thể là 0,25 Hz đến 4100 Hz. Tốc độ chậm ở 8 Hz đã được chọn để bạn có thể xem số đếm trong thanh ghi A.

Tốc độ tối đa của mô phỏng BYOC-I (~ 1000 lệnh mỗi giây) là rất chậm so với các máy tính hiện đại. Phiên bản phần cứng của máy tính BYOC được mô tả trong sách của tôi thực thi với tốc độ hơn 12 triệu lệnh mỗi giây!

Tôi hy vọng có thể giảng dạy này đã phân tích lập trình ngôn ngữ máy và cung cấp cho bạn cái nhìn sâu sắc về cách máy tính hoạt động ở cấp độ cơ bản nhất. Để hiểu rõ hơn, hãy thử viết mã hai chương trình bên dưới.

  1. Viết chương trình bắt đầu từ 5 và đếm ngược đến 0. (ANS. Count5to0.txt bên dưới)
  2. Bắt đầu từ 2, đếm 3 cho đến khi con số vượt quá 7. Bạn có thể tính nhẩm một chút, kiểm tra 8 khi biết nó sẽ hạ cánh ở đó rồi khởi động lại. Viết chương trình của bạn theo cách tổng quát hơn để kiểm tra thực sự nếu số lượng "vượt quá" một số cụ thể. Gợi ý: Khám phá điều gì sẽ xảy ra khi một phép trừ mang lại giá trị âm, chẳng hạn như 8 - 9 = -1. Sau đó, thử nghiệm với AND logic để kiểm tra xem MSB trong số 8 bit có phải là "1" hay không. (ANS. ExceedsCount.txt)

Bạn có thể nghĩ ra những vấn đề khó khăn khác đối với máy tính BYOC-I không? Với những hạn chế của nó, nó có thể làm gì hơn? Chia sẻ kinh nghiệm của bạn với tôi tại [email protected]. Nếu bạn quan tâm đến việc mã hóa bộ vi xử lý, hãy xem trang web của tôi www.whippleway.com. Ở đó tôi mang mã hóa máy cho các bộ xử lý hiện đại như dòng ATMEL Mega được sử dụng trong Arduinos.

Đề xuất: