Tôi sẽ lấy câu hỏi của bạn theo nghĩa đen và thảo luận chủ yếu là vi xử lý, không phải máy tính nói chung.
Tất cả các máy tính có một số loại mã máy. Một lệnh bao gồm một opcode và một hoặc nhiều toán hạng. Ví dụ: lệnh ADD cho Intel 4004 (bộ vi xử lý đầu tiên) được mã hóa thành 1000RRRR trong đó 1000 là mã opcode cho ADD và RRRR đại diện cho số đăng ký.
Các chương trình máy tính đầu tiên được viết bằng tay, mã hóa bằng tay 1 và 0 để tạo chương trình bằng ngôn ngữ máy. Điều này sau đó được lập trình vào chip. Các bộ vi xử lý đầu tiên sử dụng ROM (Bộ nhớ chỉ đọc); cái này sau đó đã được thay thế bằng EPROM (ROM có thể lập trình xóa được, đã bị xóa bằng tia UV); bây giờ các chương trình thường được lập trình thành EEPROM ( "Điện ... - EPROM" , có thể xóa trên chip), hoặc cụ thể là bộ nhớ Flash.
Hầu hết các bộ vi xử lý hiện có thể chạy các chương trình hết RAM (đây là tiêu chuẩn khá nhiều cho mọi thứ trừ vi điều khiển), nhưng phải có cách tải chương trình vào RAM ngay từ đầu. Như Joby Taffey đã chỉ ra trong câu trả lời của mình, điều này đã được thực hiện với các công tắc bật tắt cho Altair 8080, được cung cấp bởi Intel 8080 (đi theo 4004 và 8008). Trong PC của bạn, có một chút ROM được gọi là BIOS được sử dụng để khởi động máy tính và tải HĐH vào RAM.
Ngôn ngữ máy trở nên tẻ nhạt rất nhanh, do đó, các chương trình biên dịch chương trình được phát triển lấy ngôn ngữ trình biên dịch mã hóa và dịch nó, thường là một dòng mã lắp ráp cho mỗi lệnh, thành mã máy. Vì vậy, thay vì 10000001, người ta sẽ viết THÊM R1.
Nhưng trình biên dịch đầu tiên phải được viết bằng mã máy. Sau đó, nó có thể được viết lại bằng mã trình biên dịch riêng và phiên bản ngôn ngữ máy được sử dụng để lắp ráp lần đầu tiên. Sau đó, chương trình có thể tự lắp ráp. Điều này được gọi là bootstrapping và cũng được thực hiện với trình biên dịch - chúng thường được viết đầu tiên bằng trình biên dịch (hoặc ngôn ngữ cấp cao khác), sau đó viết lại bằng ngôn ngữ của chúng và được biên dịch bằng trình biên dịch gốc cho đến khi trình biên dịch có thể tự biên dịch.
Do bộ vi xử lý đầu tiên được phát triển rất lâu sau khi máy tính lớn và máy tính mini xuất hiện và 4004 không thực sự phù hợp để chạy trình biên dịch chương trình, Intel có thể đã viết một trình biên dịch chéo chạy trên một trong các máy tính lớn của mình và dịch mã lắp ráp cho 4004 thành hình ảnh nhị phân có thể được lập trình vào ROM. Một lần nữa, đây là một kỹ thuật phổ biến được sử dụng để chuyển trình biên dịch sang nền tảng mới (được gọi là biên dịch chéo ).