Vì sao tập lệnh 6502 phù hợp làm ngôn ngữ assembly đầu tiên
(nemanjatrifunovic.substack.com)- Assembly gắn trực tiếp với kiến trúc CPU nên đối tượng học đầu tiên rất quan trọng; 6502 là một nền tảng nhập môn vừa có cấu trúc đơn giản vừa có hệ sinh thái thực tế
- Chỉ với 6 thanh ghi và 56 lệnh gốc, bạn có thể nhanh chóng nắm các khái niệm cơ bản như thanh ghi, load/store, phép toán logic và số học, rẽ nhánh
- Vì là CPU thực tế từng được dùng trong Apple II, Commodore VIC 20, Commodore 64, BBC micro..., việc học qua thực hành bằng emulator, thiết bị tái hiện và tài liệu miễn phí rất dễ dàng
- Easy 6502 cung cấp assembler và simulator dựa trên JavaScript để viết thử code ngay trên web, giúp nhanh chóng có cảm giác ban đầu
- Z80, RISC hiện đại và x86-x64 cũng đáng học, nhưng ở bước đầu, 6502 với độ phức tạp thấp giúp giảm gánh nặng học tập
Vì sao 6502 phù hợp cho người mới bắt đầu
- Lập trình assembly có mối liên hệ với phần cứng mạnh hơn so với ngôn ngữ bậc cao, nên CPU đầu tiên bạn tiếp cận ảnh hưởng lớn đến độ khó học
- Assembly 6502 ngày nay không phải là môi trường thoải mái để viết ứng dụng thực tế
- Nếu không quan tâm đến lập trình retro, bạn không cần ở lại với 6502 quá lâu
- Lợi thế của nó với tư cách nền tảng nhập môn là sự đơn giản và tính hiện hữu trong thực tế
- Nhờ cấu trúc đơn giản, bạn có thể nhanh chóng học các khái niệm cơ bản
- Có nhiều thiết bị thật, emulator, sách và tài liệu online, nên dễ xây dựng lộ trình học
-
Số lượng thanh ghi và lệnh được giữ ở mức nhỏ
- 6502 chỉ có 6 thanh ghi
- 1 accumulator
- 2 index register
- status register
- stack register
- program counter
- Thanh ghi 16-bit duy nhất trong 6502 là program counter
- Số lượng thanh ghi ít là hạn chế khi viết ứng dụng thực tế, nhưng lại giúp hiểu vai trò và cách hoạt động của thanh ghi
- Tập lệnh 6502 gốc chỉ gồm 56 lệnh
- Với tập lệnh nhỏ này, bạn vẫn có thể học các nhóm lệnh chính
- Load/store
- Phép toán logic
- Phép toán số học
- Rẽ nhánh
- Những nhóm này vẫn tồn tại dưới dạng nào đó trong các CPU hiện đại
- Với x86-x64, ngay cả việc đếm số thanh ghi và số lệnh cũng không dễ; còn các tập lệnh RISC hiện đại như ARM cũng khó có thể xem là nhỏ và đơn giản
- 6502 chỉ có 6 thanh ghi
Hệ sinh thái thực tế và các lựa chọn khác
-
Hệ sinh thái cũ nhưng vẫn sống
- 6502 được MOS Technology giới thiệu vào giữa thập niên 1970 như một phiên bản rẻ hơn và đơn giản hóa của Motorola 6800
- Chính nhóm đó trước đây đã phát triển Motorola 6800
- Sau đó nó nhanh chóng trở nên phổ biến và được dùng trong nhiều máy vi tính nổi tiếng
- Apple II
- Commodore VIC 20
- Commodore 64
- BBC micro
- Rất dễ tìm emulator cho các thiết bị này, và một số còn có thiết bị tái hiện hiện đại
- Các sản phẩm kế nhiệm của 6502 vẫn đang được sản xuất tại thời điểm bài viết, và những thiết bị mới như Neo6502 của Olimex cũng chạy dòng 6502
- Tài liệu học miễn phí có rất nhiều trên Internet, trong đó có thể tìm thấy phần lớn tại 6502.org
- 6502 được MOS Technology giới thiệu vào giữa thập niên 1970 như một phiên bản rẻ hơn và đơn giản hóa của Motorola 6800
-
Tài liệu học có thể thực hành ngay
- Easy 6502 là sách điện tử của Nick Morgan, phù hợp với người học muốn thử tiếp cận 6502 trong thời gian ngắn
- Ngoài văn bản và hình ảnh, nó còn gồm assembler và simulator 6502 viết bằng JavaScript
- Bạn có thể viết ngay code assembly 6502 đơn giản trên trang web
- Visual6502.org giống một tài liệu trực quan hóa sự đơn giản của 6502 hơn là công cụ học assembly
-
Khác biệt so với các ứng viên nhập môn khác
- CPU ảo được tạo cho giáo dục có thể có tập lệnh sạch sẽ và “hoàn hảo”, nhưng khó có được tài liệu học và cộng đồng phong phú như 6502
- Các CPU retro như Z80, 6809, 68000 cũng là lựa chọn tốt
- Ba CPU này được đánh giá là tốt hơn 6502 cho lập trình nghiêm túc
- Nhưng khi học các khái niệm cơ bản, sự đơn giản của 6502 có lợi thế hơn
- Z80 có nhiều thanh ghi hơn 6502 rất nhiều và còn có bộ thanh ghi thay thế, nên bắt đầu với nó không dễ bằng
- Các kiến trúc RISC hiện đại như ARM, MIPS, RISC-V là những thứ mà lập trình viên assembly nghiêm túc nên học vào một thời điểm nào đó
- Tuy nhiên, chúng không lý tưởng cho nhập môn
- Sự đơn giản của chúng nằm nhiều hơn ở khía cạnh triển khai bên trong chip, chứ không phải ở tập lệnh
- Hầu hết vi xử lý hiện đại được lập trình bằng ngôn ngữ bậc cao, và trải nghiệm viết trực tiếp lệnh assembly không phải là ưu tiên cao trong thiết kế CPU
- Trên ARM64, để load một hằng số 64-bit vào thanh ghi, có thể cần 4 lệnh, bao gồm cả dịch bit
- So với vậy, quá trình load hằng số vào thanh ghi trên 6502 đơn giản hơn
- x86-x64 có thể xem là tập lệnh phổ biến nhất trên desktop và server hiện đại, còn ARM đang bắt kịp
- Không bị giới hạn bởi kích thước 32-bit và có nhiều lệnh phong phú với số toán hạng biến đổi, nên ở một số khía cạnh, việc code dễ hơn ARM
- Nhưng với người mới bắt đầu, nó vẫn rất phức tạp, và 40 năm lịch sử không làm x86-x64 trở nên đơn giản hơn
1 bình luận
Các ý kiến trên Hacker News
Khó đồng ý rằng sự đơn giản của 6502 tốt hơn 68000
68000 có nhiều thanh ghi hơn và độ rộng kiểu dữ liệu lớn hơn, nhưng cấu trúc lại đồng đều. Thực tế nó lặp lại hai loại A và D dưới dạng D0~D7, A0~A7, nên việc làm được với D0 cũng có thể làm với D3. Sự đơn giản của cấu trúc cần được cân bằng với sự đơn giản trong lập trình, và với 6502, chỉ cần viết chương trình hơi phức tạp một chút là sẽ liên tục vấp phải các giới hạn
Cách tốt nhất để học cách vượt qua giới hạn của những cỗ máy nhỏ thực ra là bỏ qua các giới hạn đó và trở thành một kỹ sư phần mềm lành nghề. Nếu là người mới bắt đầu, tốt hơn nên bắt đầu với thứ có nhiều chế độ định địa chỉ hơn, dễ xử lý mảng lớn hơn, và có thanh ghi cùng độ rộng số nguyên dư dả hơn
Bài viết cho rằng 6502 đơn giản vì có 6 thanh ghi, nhưng chỉ cần đụng vào 6502 trong một tuần là sẽ biết thực tế gần như chỉ đang xử lý ba thanh ghi. Vì vậy mới có biệt danh CPU semaphore
6502 thú vị và gọn gàng, nhưng không phù hợp nếu muốn một cách tiếp cận hiện đại. Nếu muốn đi theo con đường vinh quang kiểu thập niên 90, nên bắt đầu từ MIPS, hoặc đơn giản là bắt đầu với Neon. Z80 cũng có thể được xem là giống hơn với những gì ta gặp ngày nay, xét về thanh ghi và độ phức tạp
Bản thân assembly hiện đại không phức tạp về bản chất. Bắt đầu từ FASM thì không khó, nhưng cách tiếp cận cấp thấp lúc nào cũng nhanh chóng trở nên phức tạp. Rồi bạn bắt đầu tạo macro, và cuối cùng đặt lên trên đó một thứ na ná C nghèo nàn của riêng mình
Ưu điểm của các hệ thống nhỏ là có thể hiểu trọn vẹn mọi thứ, từ silicon đến hệ điều hành và phần mềm
6809 đơn giản hơn 68K, mạnh hơn 6502 và có tính trực giao tốt, nhưng không có nền tảng phần mềm cùng mức. Tôi nghĩ Motorola đã đi khá đúng hướng với 6809 và 68K về tập lệnh cũng như kiến trúc nhìn từ góc độ lập trình viên. Tôi nhớ PDP-11/VAX và NS32K cũng khá trực giao tương tự
Nếu nghĩ đến một nền tảng hiện đại hơn, việc dạy RISC-V có sức thuyết phục mạnh hơn MC68k. Chỉ xét tập lệnh số nguyên cơ bản, RISC-V rất đơn giản và thanh lịch, đồng thời giống các kiến trúc hiện đại như ARM, Aarch-64, MIPS. Nó có cả 32-bit và 64-bit, tài liệu chính thức cũng dễ tiếp cận
MC68k có quá nhiều điểm đặc thù ngày nay không còn liên quan mấy. Nếu nói ưu điểm thì nó từng được dùng trên nhiều nền tảng phần cứng và vẫn có cộng đồng retro hoạt động sôi nổi, nhưng đó gần với yếu tố thú vị hơn là tính liên quan thực tế
68020 gần như là mức tối đa mà kiến trúc tập lệnh có thể tiến gần đến C, và cảm giác sử dụng rất tốt
Tuy vậy, dùng 65XX trên các máy Commodore đời đầu rất đáng công. Vì không có bảo vệ bộ nhớ nên có thể trực tiếp thay đổi bộ nhớ video, đụng vào sprite, font, viền, interrupt, và viết cả self-modifying code. Assembly 68000 trên Amiga là một môi trường an toàn và được kiểm soát hơn
Tôi cho rằng 6502 không phù hợp làm tập lệnh đầu tiên để học assembly. Bạn sẽ tốn nhiều thời gian đối phó với những điểm kỳ quặc của một kiến trúc thông minh nhưng có khiếm khuyết sâu sắc.
Các idiom обход đó không chuyển tiếp tốt sang những kiến trúc tốt hơn, không bị ràng buộc bởi công cụ và hạn chế ngân sách mà MOS có lúc bấy giờ.
Nếu muốn học một tập lệnh nhỏ nhưng mạnh mẽ và có chút kỳ quặc, ARM v6M là lựa chọn tốt hơn. Nó vẫn đang được sản xuất ở mức có ý nghĩa, và các toolchain mã nguồn mở hiện đại cũng hỗ trợ tốt debugger, compiler, assembler và linker.
Nếu coi trọng tính mở của kiến trúc và có thể chấp nhận một nền tảng còn chưa thật trưởng thành, hãy chọn MCU RISC-V. Nếu không quyết được thì chọn RP2350.
Tập lệnh ARMv6M nhỏ, và việc nạp hằng số cũng không cần chuỗi lệnh dài lê thê nếu dùng nạp tương đối theo PC đúng như tài liệu. Cũng không cần code tự sửa hay zero page để đánh chỉ mục bộ nhớ, và độ rộng thanh ghi bằng với không gian địa chỉ. Vì là 32-bit nên thực ra còn dễ học và dễ dạy hơn đa số tập lệnh 8/16-bit. Nếu nghe có vẻ nhàm chán thì đừng lo. ARMv6 cũng có đủ điểm kỳ quặc để dùng cho code golf.
Tôi bắt đầu với assembly PIC16 và đã đụng mỗi kiến trúc một chút, nhưng xét về độ gọn gàng thì tôi thích MIPS32 nhất.
Bổ sung nhỏ là hiện vẫn có thể mua 6502 mới, MCU dùng nhân 6502 và chip ngoại vi do Western Design Center sản xuất. Những nơi như Mouser cũng bán.
https://www.mouser.com/c/?m=Western%20Design%20Center%20%28W...
Chỉ riêng việc nhân hai số 16-bit với nhau cũng cần cả một khối mã. Việc lập trình viên mới phải vật lộn với những thứ như vậy không có vẻ hữu ích.
Như đã nói, tập lệnh ARM đời đầu là một lựa chọn tốt.
Tất nhiên đây là vấn đề tồn tại ở nhiều ngôn ngữ assembly, nhưng ban đầu thì nên bắt đầu với một tập lệnh không có vấn đề kiểu này.
[1] https://youtube.com/playlist?list=PLowKtXNTBypFbtuVMUVXNR0z1...
Với tư cách người đã dạy assembly cho sinh viên đại học nhiều năm, tôi đồng ý rằng 6502 tốt cho người mới. Tuy nhiên lý do không chỉ nằm ở ưu điểm của chính ngôn ngữ 6502.
Tôi đã dạy 68K, MIPS, ARM, x86, v.v.; lý do lớn nhất khiến sinh viên phản hồi tốt khi học 6502 là bối cảnh xung quanh CPU. Chúng tôi lập trình một cỗ máy thật dễ hiểu bằng 6502, tức Nintendo Entertainment System.
I/O ánh xạ bộ nhớ cơ bản, không có hệ điều hành, không có lệnh pipeline, không có delay slot, không có mạng, không có nhiễu không cần thiết. Nó gần như là một chiếc hộp đơn giản với clock, CPU, vài địa chỉ bộ nhớ, chip phụ trợ và I/O được ánh xạ vào địa chỉ bộ nhớ bên trong. 6502 không phải tập lệnh đơn giản nhất, nhưng sự đơn giản của hệ thống này giúp ích rất nhiều.
Các ràng buộc của 6502 cũng quan trọng trong việc giúp sinh viên hiểu vì sao lệnh lại có hình dạng như vậy. CPU được thiết kế và đi dây trong những ràng buộc của thời đó, và điều đó phản ánh vào cách lập trình.
Việc chọn 6502 và NES để dạy người mới là thành công. Không phải vì nó là 6502, mà vì 6502 buộc cả hệ thống di chuyển bit phải trở nên đơn giản.
Sau khi sinh viên chạm vào 6502 và thấy tile NES di chuyển trên màn hình, rất dễ mở rộng tự nhiên sang việc 68000 xử lý khác thế nào, MIPS xuất hiện ra sao, cách tận dụng pipelining và delay slot, và cách so sánh khác biệt giữa RISC và CISC. Khi đã có nền tảng, việc tiến xa hơn trở nên rất đơn giản.
Nếu không định học một tập lệnh đang được dùng hiện nay, tôi hơi ngạc nhiên khi assembler PDP-11 gần như không được nhắc đến như một điểm khởi đầu tốt.
Có lẽ vì thứ đầu tiên tôi học nghiêm túc là PDP-11, nhưng tất cả các vi xử lý đời đầu đều có cảm giác như một bước lùi. Tôi có dùng assembly Z80 vài năm, nhưng giờ thì không khuyến nghị. Nó không phải một tập lệnh trực giao, còn 6502 có quá ít thanh ghi nên khó tạo cảm giác đúng về việc viết assembly.
Nếu thích PDP-11, MSP430 có thể đem lại các ưu điểm tương tự ở dạng hơi hạn chế, còn 68000 thì ở dạng hơi được tăng cường.
Nhưng thật ra tốt nhất là quên những di vật đó đi và học RISC-V. Hoặc chọn một trong nhiều biến thể Arm. Cá nhân tôi có cảm tình với ARM7TDMI, thứ tôi từng làm việc nhiều vào giữa những năm 2000. Chế độ Thumb có thể dễ học hơn một chút so với chế độ Arm gốc, nhưng cả hai đều không đem lại cảm giác thỏa mãn bằng RISC-V.
Có thể lập luận rằng các chế độ định địa chỉ của nó phức tạp hơn RISC về mặt khái niệm, nhưng trên thực tế các chế độ định địa chỉ của 6502 có khả năng khó hiểu hơn PDP-11.
Nhưng DEC đã ngoảnh mặt với cơ hội đó, và IBM đã chiếm vị trí ấy bằng tập lệnh 8086 nặng nề.
Giờ thì không còn mục đích gì để học -11 nữa.
Tôi không rõ làm sao lại đi đến kết luận đó. Khi học sinh lần đầu tiếp xúc với lập trình máy tính, bắt đầu bằng một ngôn ngữ đồ chơi/nhỏ gọn không có ứng dụng thực tế thì có thể hợp lý. Nhưng assembly không nên là ngôn ngữ đầu tiên để học
Assembly là một công cụ rất thực dụng, thường được dùng nhiều trong gỡ lỗi và kỹ nghệ đảo ngược. Vậy tại sao lại phải bỏ thời gian vào assembly của một nền tảng đã biến mất từ lâu?
Cách tốt nhất để học assembly là thử nghiệm. Viết code bằng ngôn ngữ mình thích rồi xem đầu ra assembly trung gian, hoặc dùng objdump hay gdb để nhìn vào bên trong là được. Cũng có thể thay đổi thử và xem chuyện gì xảy ra
Cũng có thể làm bằng trình giả lập máy tính cũ, nhưng khó hơn. Chỉ để in một dòng văn bản lên màn hình cũng phải học cả kiến trúc của máy đó, phần cứng và các chức năng ROM, trong khi kiến thức này gần như không áp dụng được cho Linux hay Windows trên x86-64
Với người hoàn toàn mới, những khái niệm như con trỏ quá trừu tượng và khó hiểu; nhưng khi học định địa chỉ gián tiếp trong assembly, tôi đột nhiên hiểu rõ vì sao C có con trỏ và chúng hoạt động như thế nào
Trước đó tôi chủ yếu dùng Python, vốn được trừu tượng hóa hơn nhiều. Người ta thường quên rằng những tính năng như con trỏ tồn tại vì phần cứng và các ràng buộc hiệu năng. Nếu không biết CPU thực sự làm gì ở bên trong và vì sao, khả năng hiểu một cách trực giác sẽ bị giới hạn
Sau trung học tôi không viết thêm một dòng assembly nào, nhưng nhờ hiểu nền tảng về cách phép toán được thực thi và thanh ghi hoạt động ra sao, tôi dễ hiểu hơn nhiều lý do, điều kiện và ngoại lệ của lập trình và tối ưu hóa. Tôi cũng đánh giá cao hơn những đoạn code gọn gàng, hiệu quả
Nếu muốn nếm thử một chút quá khứ thì ở đây
https://www.atariarchives.org/
Vì học điện tử nên tôi tự nhiên bắt đầu từ assembly (Motorola HC11). Đến cuối khóa, mọi người đều tự độc lập tạo ra các macro cho những thứ như vòng lặp for, và từ đó chuyển sang C một cách tự nhiên. Đến cuối khóa C, hướng đối tượng kiểu C cũng tự nhiên xuất hiện, rồi nối tiếp sang khóa C++ sau đó
Nhược điểm của cách tiếp cận này là không có lộ trình tiệm tiến dẫn đến mô hình hàm hoặc các mô hình phi mệnh lệnh nói chung. Nó cũng tạo thói quen luôn nghĩ về cách ngôn ngữ hoạt động bên trong, và đôi khi điều này phản tác dụng. Khi cố học Haskell, đầu tôi cũng bắt đầu bằng việc muốn hiểu trình thông dịch hoạt động như thế nào
Học assembly không chỉ là học ngôn ngữ, mà còn là hiểu máy móc hoạt động ra sao: bus, ánh xạ bộ nhớ cho thiết bị ngoại vi, v.v. Trên các nền tảng cũ, phần này đơn giản hơn nhiều. Vì vậy dù tập lệnh ARM có thể dễ học hơn các lệnh CISC của HC11, mọi thứ còn lại với người mới lại thân thiện hơn ở HC11
-vasmthì nó sẽ hiển thị assembly được tạo ra trong lúc biên dịch. Tính năng này từng bị chê là chẳng có gì hay, rằng chỉ cần dùng objdump hay-Slà được, nhưng dùng trực tiếp rồi sẽ hiểu vì sao nó tiện. Vì nó xuất thẳng assembly mà không kèm đống mã khuôn mẫu khổng lồ để tạo object fileVí dụ, tôi đang làm trên bộ sinh mã AArch64, cụ thể hơn là phần sinh mã dấu phẩy động, và có hàm như sau
float test(float a, float b) { return a * b; }Nếu biên dịch bằng
dmd -c test.c -arm -vasm, nó sẽ in ra địa chỉ, lệnh dạng thập lục phân, mnemonic của lệnh và URL đặc tả lệnhTôi biết code chưa hoàn toàn đúng. Đã nói là vẫn đang làm mà :-)
Với tôi, tập lệnh 6502 là một ngôn ngữ assembly đầu tiên rất tốt
Năm 1977, tôi sống trong một căn cabin nhỏ ở Oregon và mua một chiếc Apple II để giải trí. Trong vòng một năm, tôi bắt tay làm chương trình về sau trở thành Apple Writer, và viết toàn bộ bằng assembly
https://en.wikipedia.org/wiki/Apple_Writer
Ở đây người ta nói assembly 6502 khá thô và khó viết; nhìn lại thì tôi đồng ý. Chỉ là vào năm 1977, tôi không có gì để so sánh
Vì Apple II không có ngôn ngữ bậc cao nào chạy nhanh, chương trình nhỏ của tôi đã trở thành sản phẩm của Apple nhờ thiếu lựa chọn thay thế
Nghĩ lại thì Apple Writer nằm gọn trong 8KB RAM nhưng vẫn làm được việc thật sự. Nó còn có một ngôn ngữ macro mà người ta dùng để xử lý danh sách địa chỉ
Gần đây, để chạy DeepSeek cục bộ dễ hơn, tôi đã nâng hệ thống chính lên 96GB RAM và cũng có RTX 4090. Chợt nhận ra với chừng ấy RAM có thể chứa gần 12 triệu bản Apple Writer
Khá siêu thực, nhưng kể từ năm 1977 đã có nhiều lần tôi phải nói những điều kiểu này
Với assembly để bắt đầu, tôi thích RISC-V hơn. Thiết kế tốt, trực quan hơn, có hỗ trợ từ các ngôn ngữ và công cụ hiện đại như GCC, LLVM, Rust, và chạy được trên QEMU cũng như phần cứng có thể mua thật
Thậm chí có thể chạy ở 14MHz
Chủ đề về sự đơn giản của tập lệnh 6502 là điểm khiến cá nhân tôi thấy khó chịu. Những ai nghĩ sự đơn giản đó là tốt có vẻ chưa từng tiến xa hơn Hello World
Lập trình một thứ có độ phức tạp trung bình bằng 6502 rất khó. 8-bit quá hạn chế; chỉ cần nhìn cách định địa chỉ màn hình của Commodore 64 chẳng hạn. Phép nhân và phép chia phải tự triển khai, và cộng/trừ 16-bit tuy đơn giản nhưng để làm hiệu quả thì tuyệt đối không hề tầm thường
Nếu mục đích là học assembly cơ bản thì so với nó, nền tảng 8086+DOS dễ xử lý hơn nhiều
Chuyển nhiều thuật toán nhân/chia khác nhau sang assembly là một cách học rất hay
Dù sao nếu đã học một thứ không liên quan đến hiện tại như không phải x86-64, RISC-V hay ARM, thì tôi không rõ ưu điểm của 8086 là gì
Tôi thích từng khoảnh khắc, và các thanh ghi segment cũng không gây khó chịu lắm
Tôi học ở một trường kỹ thuật thiên về khoa học máy tính, và một giáo sư tin học thích đồ retro, thích khoe máy arcade của mình đã tập trung vào 6502 thay vì assembly 8808 theo kế hoạch học phần đã định
Thành thật mà nói, đó là một trong những trải nghiệm học tập tốt nhất đời tôi, và tôi không nghĩ mình muốn nó diễn ra theo cách khác. Việc ông ấy còn cho chúng tôi làm máy tính breadboard của Ben Eater khiến cảm giác thực hành bằng tay đặc biệt mạnh, và thật sự rất thú vị
Lần đầu tôi tiếp xúc với ngôn ngữ assembly là PDP-10, và thứ tôi có chỉ là sổ tay bộ xử lý DEC-10
Tôi hoàn toàn rối. Có hàng trăm lệnh và phần mô tả thì mù mờ. Tôi hoàn toàn không biết thanh ghi là gì, accumulator là gì, địa chỉ là gì, stack là gì. David Rolfe đã viết giúp tôi vài subroutine cần cho phiên bản Fortran của Empire, nên cũng đỡ được chút, nhưng tôi vẫn lạc lối
Một hôm tôi hỏi bạn mình Shal Farley stack là gì, thì cậu ấy nói: “Hãy tưởng tượng một chồng đĩa. Bạn đặt một cái đĩa lên (push), rồi lấy một cái ra (pop).” Ngay khoảnh khắc đó như đèn bật sáng, tôi hiểu ngay
Sau đó tôi bắt đầu làm việc với vi xử lý 6800 trên một bo mạch nhỏ. Nó có khoảng 40 lệnh và tất cả nằm gọn trên một tấm thẻ. 40 lệnh thì dễ học, và đột nhiên mọi thứ đều trở nên dễ hiểu
Khi quay lại sổ tay -10, tất cả nội dung bắt đầu có nghĩa