Tổ chức bộ nhớ vàngôn ngữ lập trình assembly Mục tiêu: Khi hoàn thành bài này, bạn sẽ có thể: o Mô tả một hệ bộ nhớ tiêu biểu được tổ chức dưới dạng địa chỉ bộ nhớ như thế nào o Mô tả mố
Trang 2Tổ chức bộ nhớ và
ngôn ngữ lập trình assembly
Mục tiêu:
Khi hoàn thành bài này, bạn sẽ có thể:
o Mô tả một hệ bộ nhớ tiêu biểu được tổ chức dưới dạng địa chỉ bộ nhớ như thế nào
o Mô tả mối quan hệ giữa một kiến trúc tập lệnh của máy tính và tập lệnh hợp ngữ; Và
o Sử dụng những cách đánh địa chỉ đơn giản để viết một chương trình hợp ngữ đơn giản.
Lời mở đầu
Bài học này sẽ bắt đầu quá trình chuyển đổi từ nhà thiết kế phần cứng sang các kỹ sư phần mềm.Chúng tôi sẽ đem những gì chúng tôi đã tích lũy về hành vi của phần cứng để cho thấy được nó cómối liên quan như thế nào đến kiến trúc tập lệnh (ISA) của một bộ vi xử lý điển hình Nghiên cứucủa chúng tôi về kiến trúc sẽ giúp được các nhà phát triển phần mềm hiểu rõ những kiến trúc để pháthuy những lợi ích tốt nhất của nó Trong ý nghĩa đó, nghiên cứu của chúng tôi về ngôn ngữ assembly
sẽ là một ẩn dụ cho việc nghiên cứu các kiến trúc của máy tính Quan điểm này là khác biệt vớinhững người muốn có khả năng thiết kế phần cứng máy tính Nội dung xuyên suốt trong cuốn sáchnày của chúng tôi đã được dựa trên sự hiểu biết về phần cứng và các vấn đề kiến trúc để phát triểnphần mềm bổ sung cho việc thiết kế các phần cứng phía dưới
Chúng tôi đang đi tiên phong nghiên cứu kiến trúc của các bộ vi xử lý Motorola 68.000 ISA 68K làmột kiến trúc hoàn chỉnh đầu tiên, xuất sưởng vào đầu những năm 1980 Đó sẽ là một câu hỏi côngbằng nếu hỏi: "Tại sao tôi lại học tập với một kiến trúc máy tính cũ? Có phải nó đã lỗi thời không? ".Câu trả lời vang dội là: " Không! "Kiến trúc 68K là một trong những kiến trúc máy tính phổ biếnnhất của mọi thời đại và ứng dụng nền tảng 68K vẫn còn đang được thiết kế sản phẩm mới vào mọithời điểm Palm PDA vẫn sử dụng một bộ xử lý 68K phái sinh Ngoài ra, một bộ xử lý hoàn toànmới từ Motorola, các dòng ColdFire ®, sử dụng kiến trúc 68K, và ngày hôm nay, nó là một trongnhững bộ vi xử lý phổ biến nhất được sử dụng Ví dụ, ColdFire được sử dụng trong hầu hết các máy
in phun
Trong chương tiếp theo, chúng tôi cũng sẽ giới thiệu sự khác biệt giữa hai kiến trúc phổ biến, các bộ
vi xử lý dòng Intel ® X86 và dòng ARM Với những bộ vi xử lý theo kiến trúc vành đai ba lớp,chúng ta sẽ được làm quen với máy tính phổ biến nhất trên thế giới ngày nay Phần lớn những gìchúng tôi sẽ thảo luận khi chúng tôi bắt đầu nghiên cứu sẽ được dùng chung cho cả 3 dòng bộ vi xử
lý, vì thế việc học tập là một trong những kiến trúc tốt cũng như một khi đạt được sự hiểu biết về cácnguyên tắc cơ bản
Trang 3Một lý do khác để bắt đầu với 68000 là kiến trúc phù hợp với quá trình học tập Địa chỉ bộ nhớ kháđơn giản và từ quan điểm của nhà phát triển phần mềm Mối liên kết với các ngôn ngữ cấp cao dễdàng để hiểu.
Chúng tôi sẽ bắt đầu bằng cách nhìn lại vào mô hình bộ nhớ và sử dụng như là một bước nhảy ra chochúng tôi nghiên cứu các cách thức máy tính thật sự đọc và ghi vào bộ nhớ Từ khía cạnh phầncứng, chúng tôi đã nắm bắt được vì chúng tôi vừa hoàn thành việc nghiên cứu về nó, nhưng bây giờchúng tôi sẽ nhìn về khía cạnh ISA Xuyên suốt quá trình, chúng tôi sẽ xem tại sao sự kì lạ thườngxuyên này của cách nhìn vào bộ nhớ thật sự là rất quan trọng từ điểm nhìn của ngôn ngữ cấp caohơn, chẳng hạn như C và C++ Thưa các bạn, bắt đầu khởi động …
Quy ước lưu trữ bộ nhớ
Khi bắt đầu nhìn từ cấp độ kiến trúc bạn sớm nhận ra rằng mối quan hệ giữa bộ xử lí và bộ nhớ làmột yếu tố quan trọng để xác định hành vi và hoạt động đặc trưng của máy Nhiều máy tính thật sựhoàn thành nó, công việc lập trình xung quanh giao diện của nó vào bộ nhớ Vì thế bạn sẽ sớm thấykhi chúng tôi bắt đầu từ chương trình trong ngôn ngữ assembly, hầu hết các máy tính làm việc đềuliên quan tới việc di chuyển dữ liệu trong và ngoài bộ nhớ Thực ra nếu bạn tạo biểu đồ cột củahướng dẫn ngôn ngữ assembly được sử dụng trong một chương trình, dù chương trình ban đầu đượcviết bằng ngôn ngữ C++ hay assembly, bạn sẽ tìm thấy hướng dẫn sử dụng là MOVE hướng dẫn Vìvậy, một trong những bài đầu tiên của chúng tôi kinh doanh là xây dựng trên sự hiểu biết của chúngtôi như thế nào về tổ chức hệ thống bộ nhớ và nhìn vào hệ thống bộ nhớ từ các tiềm năng của các bộ
vi xử lý
Hình 7.1 là bản đồ cho bộ nhớ của bộ xử lí 68K Bộ xử lí có thể một địa chỉ 16.777.216 (16-M) byecủa bộ nhớ Nó có 23 dòng chữ địa chỉ bên ngoài và 2 byte selecter điều khiển tín hiệu để lựa chọnmột hoặc khác của 2 bye lưu trữ trong từ xác định Bus dữ liệu ngoài là 16 bit rộng, nhưng đường dữliệu bên trong là cả 12 bit rộng Tiếp theo thành viên của gia đình 68K, bắt đầu với 68020, tất cả có
32 bit dữ liệu ngoài Trong hình 7.1 chúng ta thấy, đầu tiên 128K từ (128 bit) của bộ nhớ từ dãy0x000000 đến 0x01FFFE Vùng này điển hình là mã chương trình và những vùng vectơ Hiểuthoáng qua, vùng đọc/ghi của bộ nhớ là nơi mà các biến được lưu trữ Phần còn lại của không gian
bộ nhớ chứa địa chỉ của I/O cho các thiết bị Tất cả các phần còn lại của bộ nhớ trong hình 7.1 làkhông gian trống rỗng Ngoài
ra, chúng ta sẽ thấy lý do tại
sao trong một thời điểm các
địa chỉ cho từ cuối cùng của
ROM và từ cuối cùng của
RAM tương ứng là
0x01FFFE và 0xFFFFFE
Kể từ thế hệ 8 bit hoặc 1
byte, nó là dung lượng lưu
trữ nhỏ nhất mà chúng tôi sử dụng, điều đó cũng dễ hiểu khi chúng tôi đang phải làm việc trênnhững bộ nhớ cũng có 8 bit Tuy nhiên, tất cả máy tính của chúng tôi đều có độ rộng vùng nhớ là 32bit và rất nhiều máy tính được sử dụng ngày nay có độ rộng 16 bit đường dẫn dữ liệu Như một ví dụcực đoan, chúng tôi không muốn lãng phí 24 bit của không gian lưu trữ, đơn giản chỉ vì chúng tôimuốn lưu giữ một số lượng 8-bit trong một bộ nhớ 32-bit, do đó, các máy tính được thiết kế để chophép địa chỉ byte Điều đó có nghĩa là địa chỉ byte trong một từ 32-bit như là một ví dụ về phântrang với địa chỉ trang từ 32-bit và bù đắp được trong bốn vị trí byte có thể trong trang Tuy nhiên,
Trang 4có một sự khác biệt lớn giữa địa chỉ byte và phân trang thực sự Với địa chỉ byte, chúng tôi không cóđịa chỉ từ riêng biệt mà tương ứng với một địa chỉ trang Hình 7,2 cho thấy sự khác biệt này rất quantrọng.
Chúng tôi gọi đây là loại bộ nhớ lưu trữ byte đóng gói vì chúng ta là nghĩa đen đóng gói đầy đủ bit bộ nhớ vào 1 byte Loại địa chỉ này giới thiệu một vài sự mơ hồ Một, là khá nghiêm trọng, vàmọi thứ khác là mới đối với chúng tôi Chúng tôi sẽ thảo luận về sự nghiêm trọng này trong giây lát.Căn cứ theo hình 7,2 chúng ta thấy rằng lúc địa chỉ bộ nhớ byte FFFFF0 (char) và từ 32-bit dài (int)tại FFFFF0 có cùng địa chỉ Có phải là thảm họa này đang chờ để xảy ra? Câu trả lời là "có thể".Trong C và C + +, ví dụ bạn phải khai báo một biến và kiểu của nó trước rồi bạn mới có thể sử dụngnó Bây giờ bạn sẽ nhìn thấy lý do của việc đó Trừ khi trình biên dịch biết kiểu của biến được lưutrữ tại địa chỉ FFFFF0, nó không biết loại mã nó phải tạo ra để thao tác nó Ngoài ra, nếu bạn muốnlưu trữ một char tại FFFFF0, sau đó trình biên dịch có biết cần bao nhiêu không gian lưu trữ để phân
32-bổ vào nó
Ngoài ra, thông báo rằng chúng tôi không thể truy cập địa chỉ 32-bit tại những địa chỉ khác vớinhững vùng được chia 4 Một số bộ xử lý sẽ cho phép chúng tôi để lưu trữ một giá trị 32-bit tại mộtranh giới kỳ lạ, như địa chỉ byte 000003-000006, nhưng phần lớn sẽ không cho Lý do là bộ xử lý sẽphải làm thêm một số hoạt động để đọc toàn bộ giá trị bộ nhớ và sau đó làm một số công việc phụ đểtái tạo lại các byte vào đúng trình tự Chúng tôi gọi đây là truy cập một nonaligned và nó thường khátốn kém về hiệu suất xử lý để cho phép nó xảy ra Trong thực tế, nếu bạn nhìn vào bản đồ các tiếntrình lưu trữ và cấu trúc của bộ nhớ, bạn thường sẽ thấy không gian của vùng dữ liệu, tương ứng vớikhoảng cách cố ý để không tạo ra các vùng dữ liệu chứa nonaligned truy cập
Ngoài ra, nhận thấy rằng khi chúng tôi thực hiện truy cập từ 32-bit, bít địa chỉ a0 và a1 không sửdụng Điều này khiến chúng ta tự hỏi: “Nếu chúng ta không sử dụng chúng thì chúng có lợi ích gì?”.Tuy nhiên chúng tôi cần chúng khi chúng tôi cần truy cập một byte đặc biệt từ 32-bit A0 và A1
thường được gọi là dòng địa chỉ byte selector Bởi vì đó là chứng năng chính của chúng Điểm khác biệt là chúng ta thật sự cần byte selecters khi chúng tôi đang viết vào bộ nhớ Đọc từ bộ nhớ khá vô
Trang 5hại, nhưng việc viết sẽ làm thay đổi mọi thứ Do đó, bạn muốn chắc chắn rằng bạn sử đổi duy nhấtbyte bạn quan tâm mà không phải là thứ khác Từ quan điểm của nhà thiết kế phần cứng có byteselecter cho phép bạn đủ điều kiện ghi thao tác một lần byte mà bạn quan tâm.
Nhiều bộ vi xử li sẽ không rõ ràng tại tất cả những dòng địa chỉ byte selecter Thay vào đó, họ cungcấp tình trạng bus trạng thái khi đủ điều kiện thao tác GHI vào bộ nhớ Sẽ có điều gì khi lưu trữ vô
sô 16-bit (một kiểu dữ liệu ngắn) trong vùng bộ nhớ 32-bit? Cùng một quy tắc được áp dụng trongtrường hợp này Chỉ có những địa chỉ hợp lệ sẽ là những địa chỉ chia hết cho 2, như là 000000,
000002, 000004,… Trong trường hợp địa chỉ 16-bit, thứ tự thấp nhất địa chỉ bit, A0, là không cầnthiết Đối với bộ xử li 68K của chúng tôi, khi có bus dữ liệu rộng 16-bit đến bộ nhớ Chúng tôi cóthể lưu trữ 2 byte trong mỗi từ của bộ nhớ Do đó, A0 không được sử dụng cho các địa chỉ từ và trờthành byte selector cho bộ xử lí
một bus dữ liệu 32-bit và
một bus địa chỉ 32-bit Các
chip bộ nhớ đại diên cho
tương ứng với một mặt của
RAM ở đâu đó trong không
gian của bộ xử lí
Các mặt chính xác của bô
nhớ sẽ được xác định bằng
việc thiết kế của người giải
mã địa chỉ khối logic Các
chip RAM có khả năng của 1
Mbit và có được 128K của 8
Từ khi chúng tôi chó bus địa
chỉ rộng 32-bit và mỗi chip
RAM có 8 dòng dữ liệu I/O,
chúng tôi cần 4 chip bộ nhớ trên bề rộng 128K Chip #1 được nối với dòng dữ liệu D0 qua D7 vàchip #2 được được nối từ dòng dư liệu D8 qua D15, chip #3 được nối từ dòng dữ liệu D6 qua D23 vàchip #4 được nối từ dòng dữ liệu D24 qua D31, và tương tự
Các bus địa chỉ từ bộ xử lí có 30 dòng địa chỉ, có nghĩa là nó có khả năng của dài 230 từ (rộng bit) Bổ sung các bit địa chỉ cần thiết đến địa chỉ đầy đủ khoảng 232 byte được mặc định điều khiểnbởi bộ xử lí trong và điều khiển một cách rõ ràng qua tín hiệu 4 WRITE ENABLE có nhãn WE0qua WE3
32-Dòng địa chỉ A2 qua A18 từ bộ xủ lí được kết nối đến địa chỉ đầu vào A0 qua A16 của các chipRAM, với A2 từ bộ xủ lí được nối tới A0 trên mỗi chip 4, và tương tự Điều này có vẻ kỳ quặc lúcđầu, nhưng nó sẽ làm bạn hiểu sau khi bạn nghĩ về nó Thật ra, không có lý do đặc biệt mà mỗidòng địa chỉ từ bộ xử lí phải được nối với ống dữ liệu vào trên mỗi thiết bị nhớ Cho ví dụ, A2 từ bộ
xử lí có thể được nối tới A14 của chip #1, A3 của chip #2, A8 của chip #3 và A16 của chip #4 Địachỉ cùng bộ xử lí sẽ giải quyết rõ ràng các địa chỉ byte khác nhau trong mỗi 4 bộ nhớ chip Nhưng
Trang 6miễn là tất cả 17 dòng địa chỉ từ bộ xử lí được nối với 17 dòng địa chỉ của các thiết bị nhớ, bộ nhớphải hoạt động đúng.
Trên các bit địa chỉ từ bộ xử lý, A19 qua A31 được sử dụng cho qua trình lựa chọn trang Các tínhiệu này được chuyển đến địa chỉ giải mã logic nơi mà các tín hiệu CHIP SELECT thích hợp đượctạo ra Các tín hiệu này đã được bỏ qua từ hình 7.3 Có 13 cao mệnh lệnh địa chỉ bit trong ví dụ này.Điều này cho chúng ta 213 hoặc 8,192 trang của bộ nhớ Mỗi trang của bộ nhớ giữ 128K từ rộng 32-bit, khi làm việc là 230 từ Trong điều kiện của địa chỉ, mỗi trang thực sự chứa 512 Kbytes, vì thếphạm vi byte địa chỉ trên mỗi trang đi từ địa chỉ byte (Trong HEX) 00000 qua 7FFFF Nhớ lại rằngtrong sơ đồ bộ nhớ này, có 8192 trang với mỗi trang chứa 512 Kbytes Vì vậy địa chỉ trang đi từ
0000 qua 1FFF Nó không rõ ràng để bạn thấy được như thế nào để các trang địa chỉ và khoảngchênh địa chỉ liên quan đến khoảng khác Nhưng nếu bạn mở rộng các địa chỉ thập lục phân từ nhịphân và đặt chúng bên cạnh khoảng khác bạn sẽ thấy đầy đủ 32-bit địa chỉ
Bây giờ, chúng ta hãy xem cashc mà bộ xử lí xử lí với cỡ dữ liệu nhỏ hơn so với những từ dài Giả
xử rằng bộ xử lí muốn đọc từ dài từ địa chỉ ABCDEF64 và địa chỉ này được giải mã để được trênhình 7.3 Kể tử địa chỉ này trên giới hạn của 32-bit, A0 và A1 = 0, và không được sủ dụng như địachỉ ngoài mà đi vào bộ nhớ Tuy nhiên, bộ xử lí muốn thực hiện truy cập từ của một trong những từtại địa chỉ ABCDEF64 hoặc ABCDEF66, nó sẽ còn tạo ra địa chỉ ngoài cùng KHi dữ liệu được đọc
từ bộ xử lí, ½ những từ dài không cần thiết sẽ được loại bỏ Do đây là thao tác đọc nên nội dung bộnhớ không bị ảnh hưởng
Nếu bộ xử lí muốn đọc bất kì trong 4 byte đặt tại byte địa chỉ ABCDEF64, ABCDEF65,ABCDEF66 hoặc ABCDEF67, nó sẽ vẫn thực hiện hoạt động đọc như trước Một lần nữa chỉ có cácbyte được quan tâm sẽ được giữ lại ngoài ra sẽ bị loại bỏ
Bây giờ hãy xem lại hoạt động viết trong trường hợp này chúng tôi lo lắng có thể làm hỏng bộ nhớ,
do đó, chúng tôi muốn chắc chắn rằng khi chúng tôi ghi số lượng nhỏ hơn những từ dài vào bộ nhớ,chúng tôi không ngẫu nhiên viết nhiều hơn chúng tôi dự kiến Do đó, giả thuyết rằng chúng ta cầnghi giá trị byte vào bộ nhớ ờ vị trí ABCDEF65 Trong trường hợp này, chỉ có tín hiệu WE1 sẽ đượckhẳng định, do đó, chỉ có vị trí byte có thể được sửa đổi Do đó, để ghi một byte vào bộ nhớ, chúngtôi chỉ kích hoạt một trong 4 tín hiệu WRITE ENABLE Để ghi một từ vào bộ nhớ chúng tôi sẽ kíchhoạt hoặc WE0 và WE1 với nhau hoặc WE2 và WE3 Cuối cùng, để ghi một từ dài, tất cả bốn củadòng WRITE ENABLE sẽ được chỉ định
Điều gì sẽ xảy ra về trường hợp của một từ 32-bit được lưu trữ trong một bộ nhớ 16-bit? Trongtrường hợp này, từ 32-bit có thể được lưu trữ trên bất kỳ từ ranh giới nào, bởi vì bộ xử lý luôn luônphải truy cập trên hai vùng bộ nhớ liên tiếp nhau để lấy đủ số lượng 32-bit Tuy nhiên, hầu hết cáctrình biên dịch vẫn sẽ cố gắng để lưu trữ từ 32-bit trên ranh giới tự nhiên (địa chỉ chia hết cho 4).Đây là lý do tại sao lập trình viên assembly thường có thể tiết kiệm một không gian nhỏ hoặc tối ưutốc độ một thuật toán để vượt qua những gì mà trình biên dịch không để tạo ra mã và tinh chỉnh nócho hiệu quả cao hơn
Hãy quay lại vấn đề trước Đối với một bộ xử lý 32-bit, các bit địa chỉ A2 A31 có thể được sửdụng để giải quyết 1,073,741,824 từ dài, và địa chỉ A0 A1 trong bốn byte có thể trong vòng từ dài.Điều này cho chúng ta một tổng số là 4,294,967,296 byte địa chỉ địa điểm trong một bộ xử lý 32-bit.Nói cách khác, chúng ta có một không gian địa chỉ byte của 4 GB Một bộ xử lý với độ rộng bus 16-bit, chẳng hạn như 68k, sử dụng dòng địa chỉ A1-A23 cho địa chỉ và A0 byte lựa chọn
Trang 7Kết hợp tất cả các điều này, bạn sẽ thấy được vấn đề Bạn có thể có một byte 8-bit, một từ 16-bithoặc một từ 32-bit với địa chỉ tương tự Điều này có phải là mơ hồ không? Có Khi chúng ta đanglập trình bằng một ngôn ngữ cấp cao, chúng ta phụ thuộc vào trình biên dịch để theo dõi những chitiết lộn xộn Đây là một trong lý do tại sao khi thiết lập rập khuôn một loại biến khác có thể rất nguyhiểm Khi chúng tôi đang lập trình bằng một ngôn ngữ cấp thấp, chúng tôi phụ thuộc vào kỹ nănglập trình theo dõi này.
Có vẻ dễ dàng đầy đủ, nhưng nó không phải Điều này ít thực tế của cuộc sống máy tính là một trongnhững nguyên nhân chính của lỗi phần mềm Làm thế nào một khái niệm đơn giản có thể rất phứctạp? Nó không phải phức tạp, nó chỉ là mơ hồ Hình minh họa 7.4 cho vấn đề này Các cột tận cùngbên trái của hình 7.4 cho thấy một chuỗi được lưu giữ trong một không gian bộ nhớ 8-bit Mỗi ký tựASCII chiếm vị trí nhớ kế tiếp
Hình 7.4: Hai phương pháp đóng gói byte vào từ bộ nhớ 16-bit Đặt thứ tự byte thấp vào cuối của từbậc thấp được gọi là Little Endian Đặt thứ tự byte thấp ở bên tự cao của từ này được gọi là BigEndian
Cột giữa hiển thị một bộ nhớ 16-bit được tổ chức để bytes kế tiếp được lưu trữ từ phải sang trái Cácbyte tương ứng với A0 = 0 là liên kết với các phần thứ tự thấp, DB0 DB7, của từ 16-bit và bytetương ứng để A0 = 1 là liên kết với phần tự cao, DB8 DB15, của từ 16-bit Đây được gọi là tổchức Little Endian Các cột bìa phải lưu trữ các ký tự như bytes kế tiếp từ trái sang bên phải Các vịtrí byte tương ứng với A0 = 0 là liên kết với vị trí cao của từ 16-bit Đây được gọi là tổ chức BigEndian Như một bài thực hành, xem xét cách các byte được lưu trữ trong hình 7.2 Có phải chúnglớn hay Little Endian?
Motorola và Intel, đã chọn để sử dụng các công ước đầu cuối khác nhau và Pandora's Box đã được
mở cửa thế giới lập trình Vì vậy, C hoặc mã C + + được viết cho một công ước có lỗi tinh tế khichuyển đến các công ước khác Nó sẽ tồi tệ hơn đó Các kỹ sư làm việc cùng nhau trên các dự ángiải thích sai số kỹ thuật nếu mục đích là một trong những quy ước và họ giả định khác Các kiếntrúc ARM cho phép lập trình để thiết lập loại hình "endianess" sẽ được sử dụng bởi bộ vi xử lý lúc
mở điện Vì vậy, trong khi bộ xử lý ARM có thể đối phó với một trong hai về cuối lớn hay nhỏ, nó
có thể không tự động chuyển chế độ một lần endianess Hình 7,5 cho thấy sự khác biệt giữa hai côngước cho một từ 32-bit đóng gói với bốn byte
Trang 8Nếu bạn lấy đi bất cứ điều gì từ văn bản này, hãy nhớ vấn đề này bởi vì bạn sẽ nhìn thấy nó ít nhấtmột lần trong sự nghiệp của bạn như là một nhà phát triển phần mềm.
Trước khi bạn buộc tội tôi khi đánh chết chủ đề này, chúng ta hãy nhìn vào nó một lần nữa từ quanđiểm phần cứng Toàn bộ khu vực của địa chỉ bộ nhớ có thể rất khó hiểu cho người mới lập trìnhcũng như các cựu chiến binh dày dạn Ngoài ra, có thể có sự giới thiệu mơ hồ của kiến trúc và thuậtngữ của nhà sản xuất Vì vậy, chúng ta hãy xem làm thế nào Motorola xử lý nó cho 68k và có lẽ điềunày sẽ giúp chúng ta hiểu rõ hơn về những gì thực sự đang diễn ra, ít nhất là trong trường hợp của bộ
xử lý Motorola, mặc dù chúng tôi đã xem xét vấn đề một lần trước trong hình 7.3 Hình 7.6 tóm tắt
đề án giải quyết vấn đề bộ nhớ cho các bộ xử lý 68k
Bộ xử lý 68k có khả năng trực tiếp giải quyết 16 MB bộ nhớ, đòi hỏi 24 "hiệu quả" dòng địa chỉ Tạisao? Bởi vì 224 = 16,777,216 Trong hình 7.6 chúng ta thấy 23 dòng địa chỉ Dòng địa chỉ mất tích,A0, được tổng hợp bởi hai tín hiệu điều khiển bổ sung, LDS và UDS
Đối với một độ rộng bus 16-bit dữ liệu bên ngoài, chúng tôi bình thường dùng địa chỉ bit A0 làm bộchọn byte Khi A0 là 0, chúng tôi chọn ngay cả byte, và khi A0 = 1, chúng tôi chọn byte lẻ Cácendianness của 68k là Big Endian, để các byte thậm chí là liên kết với D8 qua D15 của bus dữ liệu.Căn cứ theo con số 4.3.1 chúng ta thấy rằng có hai tình trạng tín hiệu bus ra khỏi bộ xử lý, UDS chỉ
định, hoặc Upper Data Strobe, và LDS, hoặc Lower Data Strobe.
Khi bộ vi xử lý là làm một byte truy cập vào bộ nhớ, sau đó hoặc là LDS hay UDS là khẳng định đểchỉ vào bộ nhớ mà một phần của từ đang được truy cập Nếu thậm chí byte tại địa chỉ bị truy cập (A0
= 0), sau đó UDS khẳng định và LDS vẫn CAO Nếu byte lẻ này đang được truy cập (A0 = 1), sau
đó LDS khẳng định và vẫn còn trong UDS CAO, hoặc OFF Đối với một từ truy cập, cả hai UDS vàLDS được khẳng định Hành vi này được tóm tắt trong bảng của hình 7,6
Trang 9Bạn thường sử dụng LDS và UDS như gating tín hiệu cho hệ thống điều khiển bộ nhớ Ví dụ, bạn cóthể các mạch thể hiện trong hình 7.7 để kiểm soát đó của byte đang được ghi vào.
Bạn có thể bạn phải suy nghĩ về mạch này Tại sao chúng ta sử dụng cổng OR? Chúng tôi có thể trảlời câu hỏi theo hai cách Trước tiên, kể từ khi tất cả các tín hiệu được khẳng định LOW, chúng tôiđang thực sự đối phó với các tương đương logic tiêu cực của một chức năng AND Cổng điều đó xảy
ra là tương đương logic tiêu cực của các cửa khẩu và là cửa ngõ OR, kể từ khi đầu ra là 0 nếu và chỉnếu cả hai đầu vào là 0 Cách thứ hai xem xét nó là thông qua các phương trình tương đương của cácđịnh lý của DeMorgan
Nhớ lại rằng:
Trong trường hợp này, phương trình 1 cho thấy OR của A và B sẽ tươngđương với bằng cách sử dụng A và B dương tính logic và sau đó được cấp NAND của hai tín hiệu.Bây giờ, giả sử rằng bạn đã cố gắng để làm một lúc truy cập từ một địa chỉ lẻ Ví dụ, giả sử rằng bạn
đã viết các hướng dẫn lắp ráp ngôn ngữ sau đây:
Hướng dẫn này nói về cách các bộ xử
lý tạo ra 1 bản sao được đăng ký được
lưu giữ trong nội bộ của D0 và lưu trữ
các bản sao của từ đó trong bộ nhớ bên
ngoài, bắt đầu từ bộ nhớ địa chỉ $1.001
Bộ xử lý sẽ cần phải thực hiện hai chu
kỳ bộ nhớ để hoàn tất việc truy cập bởi
vì thứ tự byte yêu cầu nó là cầu nối
chính xác của 2 điểm bộ nhớ byte Một
số bộ xử lý có khả năng loại truy cập,
nhưng 68k là một trong những bộ vi xử
lý có thể không Nếu một truy cập
không liên kết xảy ra, bộ vi xử lý sẽ tạo
Trang 10bus dữ liệu 16-bit của bộ nhớ ngoài, chúng ta cần phải biết làm thế nào nó lưu lượng 32-bit trong bộnhớ bên ngoài là tốt Hình 7.8 chỉ cho chúng ta quy ước để lưu trữ từ lâu trong bộ nhớ.Mặc dù hình 7.8 có thể có vẻ khó hiểu, nó chỉ là một tuyên bố rõ ràng hơn của hình 7.2 trong mộtđịnh dạng khá hơn phần nào viết tắt Con số này cho chúng ta biết rằng dữ liệu 32-bit, được gọi làchờ đợi hay từ lâu được lưu trữ trong bộ nhớ với ý nghĩa nhất 16 bit (D16 - D31) được lưu giữ trong
vị trí địa chỉ đầu tiên từ và ít nhất 16 bit (D0 - D15) được lưu giữ ở vị trí cao nhất từ kế tiếp Ngoài
ra, ngay cả các địa chỉ byte được liên kết với phần tử cao của địa chỉ từ 16-bit (Big Endian)
Giới thiệu về ngôn ngữ assembly
Các máy tính trên thế giới bị chi phối bởi một kiến trúc tập lệnh (ISA) đầu tiên được xác định bởiIntel hơn 25 năm trước đây Kiến trúc này, được gọi là X86 bởi vì chúng cùng một dòng, các thế hệsau:
8080 →8086 →80186 →80286 →80386 →80486 →Pentium
Thế giới của nhúng bộ vi xử lý - đó là bộ vi xử lý được dùng để mục đích duy nhất bên trong thiết
bị, như điện thoại di động - bị chi phối bởi Motorola 680 X0 ISA:
68000 →68010 →68020 →68030 →68040 →68060 →ColdFire
ColdFire đơn vị kiến trúc vi xử lý hiện đại, được gọi là RISC, với tính tương thích ngược với kiếntrúc gốc 68K ISA (Chúng tôi sẽ nghiên cứu các kiến trúc trong một bài học sau này.) Tính tươngthích ngược rất quan trọng vì mã 68K vẫn đang được sử dụng và phát triển Tập lệnh Motorola 68K
là một trong những ISAs nghiên cứu rộng rãi nhất và bạn có thể tìm thấy một số không thể tin nổicủa kết quả nếu bạn làm tìm kiếm web trên " 68K " hoặc " 68000 "
Mỗi hệ thống máy tính đều có hoạt động cơ bản mà nó có thể thực hiện Các hoạt động này được xácđịnh bởi tập lệnh của bộ vi xử lí Lý do của tập hợp các hướng dẫn đó là cách làm việc của máy tínhđược tổ chức trong nội bộ và được thiết kế hoạt động Đây là những gì chúng tôi sẽ dung để gọi chokiến trúc của máy tính kiến trúc này được phản ánh bởi các hướng dẫn bằng ngôn ngữ assembly mà
nó có thể thực hiện, bởi vì các hướng dẫn này là các kỹ thuật mà chúng tôi truy cập tài nguyên củamáy tính Các tập lệnh là yếu tố nguyên tử của các bộ xử lý Tất cả các thao tác phức tạp trên đượcthực hiện bằng cách xây dựng những dãy các thao tác cơ bản
Máy tính không đọc ngôn ngữ assembly Chúng lấy lệnh của chúng trong mã máy Như bạn biết đó,
mã máy được thiết đặt vào bảng vi điều khiển mã máy khi bắt đầu quá trình thực thi lệnh Ngôn ngữ
assembly là con người có thể đọc được các dạng lệnh của ngôn ngữ máy Không có gì huyền bí vềlệnh của ngôn ngữ máy, và rất nhanh chóng bạn sẽ có thể hiểu chúng và thấy các mẫu hướng dẫntrạng thái bên trong máy móc của bộ vi xử lí hiện đại Bây giờ chúng ta sẽ tập trung vào việc ngônngữ assembly Xem hình 7.9
Trang 11Lưu ý: chúng tôi đại diện cho số hệ thập lục phân trong C hoặc C + + với tiền tố '0x' Đây là tiêu chuẩn hóa của ngôn ngữ Không có tiêu chuẩn hóa ứng với ngôn ngữ assembly và khác nhà phát triển trình dịch assembly biểu diễn hệ số thập lục phân bằng nhiều cách khác nhau Trong văn bản này, chúng ta sẽ áp dụng quy ước Motorola của dùng tiền tố ‘S' cho hệ thập lục phân.
Ngôn ngữ mã máy tính thực sự là đầu ra của trình biên dịch hợp ngữ chuyển đổi tập tin nguồn củangôn ngữ assembly, bạn có thể soạn với bất kỳ trình soạn thảo văn bản, mã ngôn ngữ máy tương ứng
có thể được thi hành bởi bộ xử lý 680x0 Bên tay trái hộp thực sự có hai cột, mặc dù có thể khó thấychúng Cột bên trái bắt đầu với vị trí bộ nhớ hệ thập lục phân nơi lệnh ngôn ngữ máy được lưu trữ.Trong trường hợp này bộ nhớ vị trí $00000412 giữ lệnh ngôn ngữ máy mã 0x307B7048 Lệnh kếtiếp bắt đầu vào bộ nhớ vị trí 0x00000416 và chứa mã lệnh 0x327B704A Hai lệnh ngôn ngữ máyđược trao cho bằng lệnh assembly này
MOVEA.W (TEST_S,PC,D7),A0
MOVEA.W (TEST_E,PC,D7),A1
Chẳng bao lâu bạn sẽ thấy những lệnh này thật sự có nghĩa là gì Bây giờ chúng ta có thể tóm tắt ởtrên theo cách thảo luận này:
Bắt đầu ở bộ nhớ vị trí $00000412, và chạy qua vị trí $00000415, là lệnh máy mã
B7048$307 Lệnh assembly tương ứng dữ liệu ngôn ngữ máy này là MOVEA.W
(TEST_S,PC,D7),A0
Bắt đầu ở ở bộ nhớ vị trí $00000416, và chạy qua vị trí $00000419, là lệnh máy mã
$327B704A Lệnh assembly tương ứng dữ liệu ngôn ngữ máy này là MOVEA.W
(TEST_E,PC,D7),A1
Hơn nữa, cho tập lệnh 68 K, lệnh ngôn ngữ máy tính nhỏ nhất có độ rộng bit là 16 ( 4 chữ số thậplục phân) Không lệnh nào được nhỏ hơn 16-bit, mặc dù một số lệnh có thể là khi dài khi 5, 16-bittừ
Có 1:1 tương ứng giữa các lệnh
của ngôn ngữa assembly và các
lệnh của ngôn ngữ máy Các
MOVE.B move a byte of data
MOVEA.W move a word of data to an address register
CMP.B compare the magnitude of two bytes of data
BEQ branch to a different instruction if the result
equals zero
BEQ add (quickly) two values
BRA always branch to a new location
Trang 12lệnh của ngôn ngữ assembly được gọi là thuật nhớ Chúng được thiết kế để ghi nhớ tốc ký như lệnhthực tế Cho ví dụ:
Bạn sẽ nhận thấy rằng tôi đã chọn một phông chữ khác nhau cho các lệnh ngôn ngữ assembly Đây
là bởi vì kiểu chữ với định khoảng cách cố định, như " người đưa tin ", kí tự trong cột tuân thủ theoviệc canh chỉnh, làm nó dễ đọc hơn lệnh của ngôn ngữ assembly Không có quy định nào bạn phải
sử dụng kiểu chữ này, assembly có lẽ không quan tâm, nhưng nó có thể làm cho bạn dễ dàng hơnđọc và hiểu chương trình của bạn nếu bạn làm
Một phần của lệnh cho máy tính biết phải làm gì, được gọi là opcode ( viết tắt cho " thao tác mã " ).Đây chỉ là một nửa lệnh Một nửa khác cho máy tính như thế nào và đâu thao tác này nên thực hiện.Các opcode thục tế, ví dụ MOVE.B, là opcode thực tế và từ bổ nghĩa Opcode là MOVE Nó nóirằng một số dữ liệu nên được chuyển từ một nơi khác Từ bổ nghĩa là hậu tố " B " Điều này nói nóchuyển byte dữ liệu, thay vì từ nhớ hoặc từ nhớ dài Để hoàn chỉnh lệnh chúng ta phải ra lệnh cho bộ
xử lý :
1 Nơi để tìm ra dữ liệu ( đây là được gọi là toán hạng 1 ), và
2 Nơi đặt kết quả ( toán hạng 2 )
Để hoàn chỉnh lệnh ngôn ngữ assembly phải có opcode và có thể có 0,1 hoặc 2 toán hạng
Đây là những lệnh assembly đầu tiên của bạn Nó được gọi là NOP ( phát âm là No op ) Nghĩa là
chẳng làm gì Bạn có thể là chất vấn tính đúng đắn của lệnh này nhưng nó là thực sự hoàn toàn hữuích Trình biên dịch làm rất tốt khi sử dụng chúng Lệnh NOP là ví dụ của lệnh lấy 0 toán hạng Lệnh CLR.L D4 là ví dụ của lệnh lấy một toán hạng Nghĩa là để rõ, hoặc ấn định thành không, cả
32 bit ( " L " từ bổ nghĩa ) của thanh ghi bên trong, D4
Lệnh MOVE.W D0, D3 là ví dụ của lệnh lấy hai toán hạng Chú thích dấu phẩy riêng biệt hai toánhạng, D0 và D3 Lệnh bảo bộ xử lý di chuyển 16 bit của dữ liệu ( " W " modifer ) từ dữ liệu thanhghi D0 để D3 thanh ghi dữ liệu Nội dung của D0 đều không thay đổi bởi thao tác Tất cả chươngtrình hợp ngữ tuân theo cấu trúc sau :
ND2
*COMMENT
Mỗi lệnh chiếm đóng một dòng văn bản, bắt đầu ở cột 1 và sẽ lên tới 132 cột
1 Trường LABEL là tùy chọn, nhưng nó luôn phải bắt đầu trong cột đầu tiên của dòng Chúngtôi sẽsớm xem cách sử dụng nhãn
2 OPCODE là kế tiếp, Nó phải tách biệt với LABEL bằng khoảng trắng, như là một tab, kí tựhay vài dấu cách, và nó phải bắt đầu ở cột 2 hoặc sau đó
3 Sau đó, OPERAND (toán hạng) tách biệt với OPCODE bằng khoảng trắng, thường kí tự tab.Hai toán hạng nên tách biệt với nhau bằng dấu phẩy Không có trắng khoảng cách giữa toánhạng và dấu phẩy
4 COMMENT là trường cuối cùng của dòng Thường bắt đầu với dấu hoa thị hoặc dấu chấmphẩy, phụ thuộc nhờ đó trình dịch hợp ngữ đang được sử dụng Bạn có thể còn có chú thíchtuyến, nhưng sau đó dấu hoa thị phải ở cột 1
Label
Mặc dù label là tùy chọn, nó là bộ phận quan trọng của việc lập trình bằng assembly Bạn đã biếtlàm thế nào để sử dụng label khi bạn gán nó cho biến hay hằng số Bạn cũng dùng label để đặt tênchức năng Ở assembly chúng tôi thường dùng label để tham khảo để địa chỉ bộ nhớ phù hợp vớilệnh hay dữ liệu trong chương
Trang 13trình Label phải định nghĩa ở cột 1 của chương trình của bạn Label làm cho chương trình dễ đọchơn Có thể ghi chương trình không có sử dụng Label, nhưng thực ra chẳng ai bao giờ làm huyện đónhư thế Label cho phép trình dịch hợp ngữ chương trình để tự động ( và chính xác ! ) tính địa chỉcủa toán hạng và
đích Chẳng hạn như, xem xét đoạn mã rút trích sau trong hình 7.10
Mã trong ví dụ hình 7.10 có hai Label, TEST_LOOP and DONE Label này tương ứng để vị trí bộnhớ của lệnh, " MOVE.B ( A2 ), D6 " và " BRA TEST_LOOP " tương ứng Khi trình dịch hợp ngữthực hiện tiến trình chuyển đổi lệnh assembly vào lệnh ngôn ngữ máy nó theo dõi mỗi lệnh ở bêntrong bộ nhớ Khi nào
nó gặp label với tư cách một toán hạng, nó thay thế văn bản label với giá trị số Vì vậy, lệnh " BEQDONE " bảo trình dịch assembly tính giá trị số cần thiết để gây ra chương trình để nhảy đến lệnh tại
vị trí bộ nhớ phù hợp với label " DONE " nếu thử nghiệm điều kiện, bình đẳng, được đáp ứng.Chúng ta sẽ sớm xem cách thử nghiệm bình đẳng này Nếu thử nghiệm thất bại, lệnh rẽ nhánh bịphớt lờ và lệnh kế tiếp được thi hành
Comments
Trước khi chúng tôi đi quá xa, chúng tôi cần phải đóng góp một vài ý kiến về hình thức thích hợpcho việc ghi chú trong chương trình của bạn Như bạn thấy trong hình 7,10 mỗi comments có mộtbình luận liên quan với nó Những trình biên dịch khác nhau sẽ có những cách comment khác nhau.Một số ý kiến yêu cầu comment trên một dòng với ký tự đầu dòng là “*” hoặc “,” Comment có liênquan hướng dẫn hoặc chỉ thị có thể cần các dấu chấm phẩy hoặc dấu hoa thị để bắt đầu comment,hoặc họ có thể không cần bất kỳ ký tự đặc biệt bởi vì các khoảng trắng trước đó xác định vị trí củakhối comment Điểm quan trọng là mã thực thi assemly không tự ghi dẩn chứng, và bạn dễ dàngquên nó, hoặc lảng quên nó sau một ngày, đó là cách ghi chú chính xác những gì bạn đã cố gắng đểlàm với các thuật toán đó
Mã assembly nên có nhiều comment Không chỉ giúp bạn nhớ rành mạch, mà còn giúp những người
sẽ phải phát triển mã của bạn sau khi bạn di chuyển sang công việc khác Không có lý do rằng mãassembly không thể dễ đọc cũng như một tài liệu như C++ Việc sử dụng comment tương đương vớiviệc loại bỏ số bí ẩn và để giúp giải thích rõ những gì đoạn mã đang làm Sử dụng các khối commentcho những gì các phần của một thuật toán đang làm và những gì các giả định đang được thực hiện.Cuối cùng comment như một nhóm nhỏ các hướng dẫn, để làm cho nó hoàn toàn rõ ràng những gìđang xảy ra
Trong cuốn sách của mình, hacker: Anh hùng của cuộc Cách mạng máy tính, Steven Levy1 mô tả cáckiểu mã hóa của Peter Samson, một sinh viên MIT, và lập trình sớm,
…Samson, cho dù, là đặc biệt tối nghĩa trong không chịu thêm chú thích cho nguồn của mã anh ấy, giải thích những gì anh ấy đang làm việc tại thời gian đã cho Một chương trình tốt – dược phân phối Samson ghi tiếp tục cho vài hàng trăm lệnh assembly, chỉ với một bình luận bên cạnh đó có một chỉ thị số 1750 Chú thích là RIPJSB,Và mọi người vắt óc suy nghĩ về nghĩa của nó cho đến ai
đó hình dung ra 1750 là Năm Bach chết, và Samson đã viết ra cho an nghỉ của Rest In Peace Johann Sebastian johann
Mẫu kiến trúc của lập trình viên
Để chương trình trong hợp ngữ, chúng tôi phải biết rõ kiến trúc cơ bản của bộ xử lý Cái nhìn củachúng tôi về kiến trúc được gọi là mẫu của lập trình viên của bộ xử lý Chúng tôi phải hiểu hai khíacạnh kiến trúc :
1 tập lệnh, và
2 kiểu địa chỉ
Kiểu địa chỉ của máy tính mô tả cách khác nhau trong đó nó truy cập toán hạng,
Trang 14hay truy lục dữ liệu cho hoạt động trên Sau đó, kiểu địa chỉ mô tả những gì phải làm với dữ liệuđằng sau thao tác hoàn tất Kiểu địa chỉ cũng nói với bộ xử lý cách tính đích của tìm về lệnhnonsequential, như là một nhánh hoặc nhảy đến vị trí mới
Kiểu địa chỉ là rất quan trọng để hiểu biết về máy tính chúng tôi sẽ cần nghiên cứu chúng một chúttrước khi chúng tôi có thể tạo ra chương trình assembly Vì vậy, không giống C, C + + hay Java,chúng tôi sẽ cần phát triển mức nhất định của hiểu biết cho máy chúng ta đang lập trình trước khichúng ta có thể thực sự ghi chương trình
Không giống C hoặc C + +, hợp ngữ không phải là cơ động được giữa máy tính Chương trình hợpngữ ghi cho Intel 80486 sẽ không chạy trên Motorola 68000 Chương trình C viết cho chạy trên Intel
80486 có thể chạy trên Motorola 68000 một lần mã nguồn gốc được biên dịch lại cho tập lệnh
68000, nhưng sự khác biệt trong kiến trúc, như là lớn và nhỏ endian, có thể làm lỗi được giới thiệu
Nó có thể là đáng giá và dừng lại một lúc để phản ánh về lý do tại sao, như là một lập trình viên,điều quan trọng để tìm hiểu assembly Khoa học máy tính và lập trình phụ thuộc vào kiến thức làmviệc của bộ vi xử lý, hạn chế của nó và thế mạnh của nó Để biết được assembly hiểu được nhữngđộng cơ tính toán rằng mã của bạn đang chạy Mặc dù ngôn ngữ cấp cao giống như C + + và JAVAlàm tốt công việc của chi tiết abstracting mức độ thấp, điều quan trọng là để giữ nhớ rằng động cơkhông phải là vô hạn mạnh mẽ và tài nguyên của nó không phải là vô hạn
Ngôn ngữ assembly là chặt chẽ cùng với việc thiết kế các bộ vi xử lý và đại diện cho mức độ đầutiên của đơn giản hóa các hướng dẫn thiết lập kiến trúc nhị phân thành dạng có thể đọc được con
có 1:1 trùng khớp giữa lệnh assembly và nhị phân hoặc lệnh hệ thập lục phân kết quả Điều này làrất khác với C hay C + +, C, nơi một C câu lệnh, có thể tạo ra hàng trăm dòng mã lắp ráp
Nó vẫn còn đúng mà bạn có thể thường ghi mã chặt trong assembly Trong khi trình biên dịch C đãđạt khá tốt, chúng không là hoàn hảo Chương trình viết assembly sẽ thường sử dụng kém hơn dấucách và chạy nhanh hơn chương trình với cùng tính năng viết trong C Một số trò chơi vẫn còn mãtrong hợp ngữ cho lý do chính xác
Nhu cầu cần có mã hiệu quả đặc biệt đúng của bộ điều khiển ngắt và thuật toán ghi cho bộ xử lýchuyên dụng, như là bộ xử lý tín hiệu kỹ thuật số ( dsps ) Nhiều lập trình viên kinh nghiệm sẽ biệnluận rằng mọi mã phải được xác định hoàn toàn không thể được viết bằng C, bởi vì bạn không thể dựđoán trước thời hạn thời gian thi hành cho mã được tạo ra bởi trình biên dịch Với assembly bạn cóthể điều khiển chương trình của bạn ở mức của chu kỳ đồng hồ đơn Hơn nữa, nhất định các bộ phậncủa thời gian thi hành môi trường phải được viết bằng assembly vì bạn cần phải có thể mới thiết lậpthi hành môi trường C Vì vậy, mã khởi động có xu hướng được viết bằng asembly Cuối cùng, sựbiết hiểu assembly là cực kì quan trọng để khắc phục lỗi hệ thống thời gian thực Nếu bạn có chươngtrình đã bao giờ trong môi trường lập trình như là trực quan của Microsoft C+ + ® và trong khi bạnđang khắc phục lỗi, bạn vô tình bước vào hàm thư viện, bạn sau đó sẽ tìm tự mình thấy sâu tận trongx86 assembly
Kiến trúc bộ vi xử lí Motorola 68000
Hình 7.11 là biểu đồ đơn giản hóa của kiến trúc 68 K Từ khi motorola có số lượn lớn thành viêntrong dòng kiến trúc cụ thể là CPU16 CPU16 là tập hợp con của kiến trúc CPU32, ISA cho 68020
và bộ xử lý sau này
Chúng ta hãy nhận dạng nhanh một vài khối thiết thực quan trọng mà chúng tôi sẽ sử dụng sau này
Bộ đếm chương trình: được dùng để giữ địa chỉ của lệnh kế tiếp được tìm nạp từ bộ nhớ.
Ngay khi lệnh hiện hành được giải mã bằng bộ xử lý chương trình truy cấp ( program counter
- PC) được cập nhật để chỉ đến địa chỉ của lệnh tuần tự kế tiếp trong bộ nhớ
Thanh ghi tổng quát : bộ xử lý 68 K có 15 thanh ghi đa năng và hai thanh ghi chuyên biệt.
Thanh ghi đa năng được chia thành thông tin đăng ký vào bộ nhớ thành tám gói dữ liệu,