Địa chỉ bắt đầu của phân đoạn bộ nhớ Starting Address for memory segment Đây là địa chỉ bắt đầu của đoạn bộ nhớ nơi dữ liệu được lưu trữ.. Vậy nên địa chỉ bắt đầu của phân đoạn là để xá
Addressing Modes mô tả cách thức một lệnh chỉ định toán hạng của nó, xác định quy tắc để giải nghĩa hoặc sửa đổi trường địa chỉ của lệnh khi thực thi toán hạng Addressing Modes cho lệnh 8086 (x86) được phân loại thành hai loại chính.
1 Addressing Modes cho dữ liệu (data)
2 Addressing Modes cho nhánh (branches)
Các Addressing Modes của bộ nhớ x86 giúp lập trình viên truy cập bộ nhớ linh hoạt, dễ dàng đến biến, mảng, con trỏ và các cấu trúc dữ liệu phức tạp, đóng vai trò quan trọng trong lập trình ngôn ngữ hợp ngữ (Assembly Language Programming).
Một Assembly Language Programming chia thành 2 phần
Opcode Operand Địa chỉ dữ liệu (Memory Address) của một Operand gồm 2 thuật ngữ quan trọng:
1 Địa chỉ bắt đầu của phân đoạn bộ nhớ (Starting Address for memory segment)
Đây là địa chỉ bắt đầu của đoạn bộ nhớ nơi dữ liệu được lưu trữ Trong kiến trúc
8086, một phần của bộ nhớ được quản lý qua từng phân đoạn một Vậy nên địa chỉ bắt đầu của phân đoạn là để xác định vị trí bắt đầu của dữ liệu trong đoạn.
An effective address, also known as an offset, is determined by combining the displacement with the base and the index.
Bộ vi xử lý 8086 có nhiều cách khác nhau để chỉ định một operand, dưới đây là các Addressing Modes thông dụng:
Trong kỹ thuật này, giá trị của trường địa chỉ được lưu trữ trực tiếp trong lệnh
Điều này cho phép truy cập trực tiếp đến một địa chỉ cụ thể mà không cần phải tính toán hay tham chiếu tới bộ nhớ
Đây là một cách tiết kiệm bộ nhớ nhưng không linh hoạt, vì mỗi lệnh chỉ có thể truy cập vào một địa chỉ cố định được chỉ định trước.
Trong kỹ thuật này, giá trị của trường địa chỉ được sử dụng trực tiếp để tham chiếu đến vị trí bộ nhớ
Đây cũng là một cách địa chỉ hóa đơn giản và hiệu quả, nhưng cũng không linh hoạt vì mỗi lệnh chỉ có thể truy cập vào một vị trí cụ thể.
Tại địa chỉ A ta tìm được Operand
Trong kỹ thuật này, trường địa chỉ chỉ định một vị trí trong bộ nhớ mà chứa địa chỉ thực sự của dữ liệu hoặc lệnh cần truy cập
Điều này cho phép truy cập linh hoạt hơn và thường được sử dụng trong các tình huống khi cần truy cập đến nhiều vị trí bộ nhớ một cách linh hoạt.
Tại địa chỉ A ta tìm được Operand thông qua địa chỉ B
Dữ liệu được lưu thẳng vào đây
Trong kỹ thuật này, địa chỉ được lưu trữ trong một thanh ghi CPU cụ thể
Điều này cho phép truy cập nhanh chóng đến dữ liệu mà không cần tham chiếu tới bộ nhớ chính.
Ta đăng ký (register) một địa chỉ R (có vừa đủ dung lượng để chứa operand) vậy nên tại R ta tìm được Operand
Tương tự như kỹ thuật Indirect, nhưng thay vì truy cập đến một địa chỉ trong bộ nhớ, nó truy cập đến một địa chỉ được lưu trữ trong một thanh ghi.
Ta đăng ký (register) một địa chỉ R (có vừa đủ dung lượng để chứa địa chỉ A) vậy nên tại R sau đó thông qua A ta tìm được Operand
Kỹ thuật này sử dụng một địa chỉ cơ sở (base address) và một giá trị dịch chuyển (offset) để tính toán địa chỉ thực tế của dữ liệu hoặc lệnh.
Relative addressing uses a base register address (A) and an offset (R) to calculate the memory address of an operand By combining the base address and the offset, the index indicates the specific location of the operand in memory.
Kỹ thuật này sử dụng ngăn xếp để lưu trữ địa chỉ của dữ liệu hoặc lệnh Các phần tử mới được thêm vào hoặc loại bỏ khỏi ngăn xếp khi cần thiết.
X86 được trang bị với một sự đa dạng của addressing modes dự định cho phép khả năng vận hành cuản ngôn ngữ bậc cao Hình bên dưới bao gồm những logic phức tạp Đoạn thanh ghi quyết định phân đoạn rằng đây là chủ đề.
Có 6 đoạn thanh ghi, cái đang được sử dụng cho tài liệu phụ thuộc vào bối cảnh của sự vận hành và lệnh Mỗi đoạn thanh ghi giữ một chỉ số bên trong bảng mô tả phân đoạn, cái mà giữ địa chỉ bắt đầu của phân đoạn tương ứng Có liên quan với mỗi phân đoạn của thanh ghi mà người dùng có thể nhìn thấy là một cái mà người dùng không thể nhìn thấy, cái mà ghi lại những
“access right” cho phân đoạn cũng như địa chỉ bắt đầu và giới hạn của phân đoạn Ngoài ra, có 2 thanh ghi mà có thể được sử dụng trong cấu trúc của một địa chỉ: Base register (thanh ghi nền tảng) và index register (thanh ghi chỉ số).
Về immediate mode, toán tử được bao gồm bên trong lệnh Toán tử có thể là byte, word, hoặc “doubleword” của dữ liệu
Về register operand mode, toán tử được xác định vị trí bên trong một thanh ghi Về lệnh tổng quan, ví dụ như “data transfer”, thuật toán và các hướng dẫn logic, toán tử có thể là một trong thanh ghi tổng quát 32-bit (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP), hoặc một trong những thanh ghi tổng quá 16-bit (AX, BX, CX, DX, SI, DI, SP, BP), hoặc là một trong những thanh ghi tổng quát 8-bit ((AH, BH, CH, DH, AL, BL, CL, DL) Có một số lệnh tham chiếu tới “the segment selector registers” (phân đoạn thanh ghi bộ chọn) (CS, DS, ES, SS, FS, GS).
Các “addressing modes” còn lại tham chiếu vị trí bên trong bộ nhớ Vị trí của bộ nhớ phải được chỉ định theo phân đoạn chứa vị trí và dịch chuyển từ nơi bắt đầu của phân đoạn Trong một số trường hợp, một phân đoạn được chỉ định rõ ràng; trong trường hợp khác, phân đoạn được chỉ định bởi những quy tắc cơ bản nó chỉ định một phân đoạn theo mặc định.
Trong displacement mode, the operand’s offset (địa chỉ hữu dụng ở hình trên) được chứa bởi 1 phần của lệnh dưới dạng độ dịch chuyển 8-, 16-, 32-bit Với sự phân chia, tất cả những địa chỉ bên trong những lệnh hướng theo chỉ đơn thuần là một sự bù lại trong một phân đoạn “Addressing mode” không cố định được tìm thấy trên một số ít máy móc bởi vì, như đã đề cập sớm nó dẫn đến những lệnh dài Trong trường hợp của x86, giá trị không cố định có thể dài tới 32 bits, tạo 1 lệnh 6 bytes “Displacement addressing ” có thể hữu ích cho việc tham chiếu toàn bộ những giá trị.
“The remaining addressing modes” thì không trực tiếp, trong ý nghĩa đoạn địa chỉ của lệnh nói lên tuyến trình nơi để tìm thấy được địa chỉ “base mode” chỉ định rằng một trong các thanh ghi 8-, 16-, 32-bit chứa giá trị địa chỉ hiệu dụng Điều này tương đương với những gì chúng ta gọi là “register indirect addressing”.
Trong “base with displacement mode”, lệnh bao gồm sự dịch chuyển được thêm vào thanh ghi, có thể là bất kỳ thanh ghi đa năng nào Ví dụ về việc sử dụng chế độ này như sau:
1 Được sử dụng bởi trình biên dịch để xác định điểm bắt đầu của một vùng biến cục bộ
Ví dụ thanh ghi nền tảng (base register) có thể được trỏ đến phần đầu của stack frame, cái mà chứa biến cục bộ cho thủ tục tương ứng.
2 Dùng để lập chỉ số bên trong mảng khi yếu tố kích thước không phải là 1, 2, 4 hoặc 8 bytes và vì vậy nó không thể được gán chỉ số Trong trường hợp này điểm dịch chuyển đến đoạn đầu của mảng, và thanh ghi cơ bản giữ giữ kết quả của phép tính để quyết định bù lại phần tử cụ thể trong mảng
3 Dùng để truy cập một trường của “record”(đĩa) Thanh ghi nền tảng trỏ đến điểm bắt đầu của
“record”(đĩa), trong khi sự thay đổi bù lại cho trường.
Trong "mô hình chỉ mục có dịch chuyển", hướng dẫn chứa dịch chuyển được thêm vào trong một thanh ghi, trong trường hợp này được gọi là "thanh ghi chỉ số" Thanh ghi chỉ số có thể là bất kỳ "thanh ghi đa năng" nào, trừ một thanh ghi được gọi là EPS, được sử dụng phổ biến trong "xử lý ngăn xếp" Trong tính toán địa chỉ khả dụng, nội dung của thanh ghi chỉ số được nhân với hệ số tỷ lệ là 1, 2, 4 hoặc 8 và sau đó thêm vào "dịch chuyển" Chế độ này rất thuận tiện để lập chỉ số cho mảng Hệ số tỷ lệ là 2 được sử dụng cho mảng số nguyên 16 bit Hệ số tỷ lệ 4 có thể được sử dụng cho số nguyên 32 bit hoặc số thực Hệ số tỷ lệ 8 được sử dụng cho mảng dấu phẩy động và số thực.
Cái “base with index and displacement mode” tổng nội dung của thanh ghi nền tảng (base register), “the index register”, và một sự dịch chuyển đến form địa chỉ hữu dụng Thanh ghi nền tảng có thể là bất kỳ thanh ghi đa năng nào và thanh ghi chỉ chỉ số có thể là bất kỳ thanh ghi đa năng nào ngoại trừ ESP Ví dụ, “addressing mode”(chế độ địa chỉ) này được sử dụng để truy cập và mảng cục bộ (local) trên một “stack frame” Chế độ này được sử đụng để hỗ trợ một mảng 2 chiều; trong trường hợp này, dịch chuyển trỏ tới phần đầu của mảng và mỗi thanh ghi xử lý 1 chiều của mảng.
“base scaled index with displacement mode” tổng nội dung của thanh ghi chỉ số nhân với hệ số tỉ lệ, nội dung của thanh ghi nền tảng, và độ dịch chuyển (displacement) Nó hữu ích nếu một mảng được chứa bên trong “stack frame”, trong trường hợp này, phần tử của mảng phải là 2, 4 hoặc 8 bytes mỗi chiều dài Chế độ này cung cấp chỉ số hữu hiệu của một mảng 2 chiều khi phần tử của mảng là 2, 4 hoặc 8 bytes trong độ dài.
Cuối cùng, “relative addressing” được sử dụng trong chuyển giao quyền kiểm soát lệnh. Một sự dịch chuyển được thêm vào đến giá trị của bộ đếm chương trình, nó trỏ đến lệnh tiếp theo Trong trường hợp này, sự dịch chuyển được coi là giá trị byte, từ hoặc từ kép và giá trị đó là tăng hoặc giảm địa chỉ trong bộ đếm chương trình.
Nguyên tắc thiết kế là gì?
Nhược điểm: Tính song song hạn chế, chức năng hạn chế.
2 Tổ chức thanh ghi chung: Ưu điểm: Linh hoạt hơn, hỗ trợ xử lý song song, hiệu quả hơn đối với một số loại tính toán nhất định Nhược điểm: Thiết kế phức tạp hơn, yêu cầu bộ nhớ cao hơn.
3 Tổ chức ngăn xếp: Ưu điểm: Thiết kế đơn giản, yêu cầu bộ nhớ thấp, hỗ trợ gọi hàm đệ quy Nhược điểm: Khả năng song song hạn chế, khả năng truy cập chậm vào các phần tử không phải trên cùng.
11.4: Kiến trúc tập lệnh x86 và ARM
─ Thuật ngữ x86 chỉ đến họ kiến trúc tập lệnh dựa trên bộ vi xử lý 8086 Thuật ngữ x86 lấy từ hai số cuối của họ 8086 Rất nhiều thay đổi và mở rộng được thêm vào kiến trúc x86 qua nhiều năm Kiến trúc này được hiện thực trong bộ vi xử lý từ Intel AMD, , VIA và nhiều tổ chức khác.
─ x86 được trang bị nhiều định dạng hướng dẫn khác nhau Trong số các yếu tố được mô tả trong tiểu mục này, chỉ có trường opcode là luôn hiện diện Hình 11.9 minh họa dạng hướng dẫn chung Các hướng dẫn được tạo thành từ 0 đến 4 tùy chọn tiền tố lệnh, mã hoạt động 1 hoặc 2 byte, bộ xác định địa chỉ tùy chọn (bao gồm byte ModR/m và byte Chỉ số tỷ lệ), dịch chuyển tùy chọn, và một trường tức thời tùy chọn.
Trước tiên chúng ta hãy xem xét các byte tiền tố:
Tiền tố lệnh: Tiền tố lệnh, nếu có, bao gồm LOCK tiền tố hoặc một trong các tiền tố lặp lại Tiền tố LOCK được sử dụng để đảm bảo sử dụng riêng bộ nhớ dùng chung trong môi trường đa bộ xử lý Sự lặp lại tiền tố chỉ định thao tác lặp lại của một chuỗi, cho phép x86 xử lý chuỗi nhanh hơn nhiều so với vòng lặp phần mềm thông thường.
Có năm các tiền tố lặp lại khác nhau: REP, REPE, REPZ, REPNE và REPNZ Khi có tiền tố REP tuyệt đối, thao tác được chỉ định trong lệnh được thực thi lặp đi lặp lại trên các phần tử liên tiếp của chuỗi; số lượng sự lặp lại được chỉ định trong thanh ghi
CX Tiền tố REP có điều kiện gây ra lệnh lặp lại cho đến khi số đếm trong CX về 0 hoặc cho đến khi điều kiện được đáp ứng.
Ghi đè phân đoạn: Chỉ định rõ ràng phân đoạn nào đăng ký lệnh nên sử dụng, ghi đè lựa chọn thanh ghi phân đoạn mặc định được tạo bởi x86 cho hướng dẫn đó.
Kích thước toán hạng: Một lệnh có kích thước toán hạng mặc định là 16 hoặc 32 bit và tiền tố toán hạng chuyển đổi giữa toán hạng 32 bit và 16 bit.
Kích thước địa chỉ: Bộ xử lý có thể đánh địa chỉ bộ nhớ bằng cách sử dụng các trang quảng cáo 16 hoặc 32 bit Kích thước địa chỉ xác định kích thước dịch chuyển trong hướng dẫn và kích thước của độ lệch địa chỉ được tạo ra trong quá trình tính toán địa chỉ hiệu quả Một trong số các kích thước này được chỉ định làm mặc định và tiền tố kích thước địa chỉ sẽ chuyển đổi giữa việc tạo địa chỉ 32 bit và 16 bit
Bản thân kiến trúc bao gồm các trường hợp sau:
Mã lệnh opcode thường dài 1, 2 hoặc 3 byte và có thể chứa các bit xác định dữ liệu ở dạng byte hay word (16 hoặc 32 bit tùy theo ngữ cảnh), hướng thao tác dữ liệu (đến hoặc rời khỏi bộ nhớ) và liệu trường dữ liệu trung gian có cần được mở rộng dấu hiệu hay không.
ModR/m: Byte này và byte tiếp theo cung cấp thông tin địa chỉ ModR/m byte xác định xem một toán hạng nằm trong thanh ghi hay trong bộ nhớ; nếu nó nằm trong bộ nhớ thì các trường trong byte sẽ chỉ định chế độ địa chỉ sẽ được sử dụng Các Byte ModR/m bao gồm ba trường: Trường Mod (2 bit) kết hợp với trường r/m để tạo thành
32 giá trị có thể: 8 thanh ghi và 24 chế độ lập chỉ mục; các trường Reg/Opcode (3 bit) chỉ định số thanh ghi hoặc ba bit nữa thông tin opcode; trường r/m (3 bit) có thể chỉ định một thanh ghi làm vị trí của toán hạng hoặc nó có thể tạo thành một phần của mã hóa chế độ địa chỉ trong kết hợp với trường Mod.
SIB: Mã hóa nhất định của byte ModR/m chỉ định việc bao gồm SIB byte để chỉ định đầy đủ chế độ địa chỉ Byte SIB bao gồm ba trường:
Trường Tỷ lệ (2 bit) chỉ định hệ số tỷ lệ để lập chỉ mục theo tỷ lệ; chỉ số trường (3 bit) chỉ định thanh ghi chỉ mục; trường Cơ sở (3 bit) chỉ định sổ đăng ký cơ sở.
Độ dịch chuyển(Displacement): Khi bộ xác định chế độ địa chỉ chỉ ra rằng vị trí dịch chuyển được sử dụng, trường dịch chuyển số nguyên có dấu 8, 16- hoặc 32-bit được thêm.
Ngay lập tức(Immediate): Cung cấp giá trị của toán hạng 8, 16 hoặc 32 bit.
─ Một số so sánh có thể hữu ích ở đây Ở định dạng x86, địa chỉ chế độ được cung cấp như một phần của chuỗi opcode chứ không phải với mỗi toán hạng.Bởi vì chỉ một toán hạng có thể có thông tin chế độ địa chỉ nên chỉ có một toán hạng bộ nhớ có thể được tham chiếu trong một lệnh Ngược lại, VAX mang lại thông tin chế độ địa chỉ với mỗi toán hạng, cho phép chuyển đổi bộ nhớ sang bộ nhớ hoạt động Do đó, các lệnh x86 nhỏ gọn hơn Tuy nhiên, nếu một hoạt động từ bộ nhớ đến bộ nhớ là cần thiết, VAX có thể thực hiện việc này một cách hướng dẫn duy nhất.
Assembly Language là gì?
Ngôn ngữ Assembly (Assembly Language), hay còn gọi là Hợp ngữ, là một ngôn ngữ lập trình cấp thấp, gần gũi với ngôn ngữ máy mà máy tính có thể hiểu được Nó cho phép lập trình viên kiểm soát trực tiếp phần cứng máy tính, điều mà các ngôn ngữ lập trình cấp cao không thể làm được Nó được dùng để chuyển hóa cấu trúc dữ liệu gồm 0 và 1 khó hiểu của máy tính thành ngôn ngữ mà con người có thể tiếp thu được dễ dàng hơn.
Đặc điểm
1 Gần gũi với ngôn ngữ máy:
Assembly sử dụng các từ viết tắt và ký hiệu để biểu thị các lệnh của CPU, giúp con người dễ đọc và hiểu hơn so với mã máy.
Tuy nhiên, Assembly vẫn phụ thuộc vào kiến trúc CPU cụ thể, khiến code khó di chuyển giữa các nền tảng khác nhau.
Assembly cho phép tối ưu hóa code cho phần cứng mục tiêu, dẫn đến hiệu suất cao hơn so với các ngôn ngữ cấp cao.
Lập trình viên có thể kiểm soát trực tiếp cách sử dụng tài nguyên phần cứng, giúp tăng hiệu quả và tốc độ xử lý.
Assembly cung cấp quyền truy cập trực tiếp vào các thanh ghi, bộ nhớ và thiết bị ngoại vi của máy tính.
Điều này cho phép lập trình viên thực hiện các thao tác phức tạp và tinh chỉnh hiệu suất chương trình.
Cú pháp của Assembly phức tạp hơn so với các ngôn ngữ cấp cao, đòi hỏi người học phải nắm vững kiến thức về kiến trúc CPU và hệ thống máy tính.
Việc viết code Assembly cũng tốn nhiều thời gian và công sức hơn so với các ngôn ngữ khác.
Code Assembly khó hiểu và khó sửa lỗi hơn so với code của các ngôn ngữ cấp cao.
Việc bảo trì và cập nhật code Assembly cũng đòi hỏi nhiều kỹ năng và kinh nghiệm hơn.
6 Phụ thuộc vào kiến trúc:
Code Assembly viết cho một kiến trúc CPU cụ thể không thể di chuyển sang các kiến trúc khác mà không cần chỉnh sửa.
Điều này gây khó khăn trong việc phát triển phần mềm đa nền tảng.
Ứng dụng
Assembly đóng vai trò quan trọng trong việc viết các thành phần cốt lõi của hệ điều hành, nơi hiệu suất tối ưu và khả năng tương tác trực tiếp với phần cứng là điều cần thiết.
Trình điều khiển thiết bị: Assembly cũng được sử dụng để viết trình điều khiển thiết bị, giúp hệ điều hành giao tiếp với các thiết bị phần cứng.
Vi điều khiển: Assembly là ngôn ngữ phổ biến để lập trình vi điều khiển, do khả năng kiểm soát chi tiết phần cứng và hiệu suất cao.
Thiết bị IoT: Assembly cũng được sử dụng trong các thiết bị IoT (Internet vạn vật) để tối ưu hóa hiệu năng và tiết kiệm năng lượng.
3 Tối ưu hóa hiệu suất:
Code nhạy cảm về thời gian: Assembly được sử dụng để viết code nhạy cảm về thời gian, nơi cần hiệu suất cao nhất, ví dụ như trong các ứng dụng đồ họa 3D.
Đồ họa: Assembly cũng được sử dụng trong các ứng dụng đồ họa để tối ưu hóa hiệu suất rendering và xử lý hình ảnh.
IV Các lệnh Assembly cơ bản
Lệnh di chuyển dữ liệu (MOV)
Lệnh toán học (ADD, SUB, MUL, DIV)
Lệnh so sánh (CMP, JMP, JNZ)
Lệnh điều khiển luồng (IF, THEN, ELSE)
Lệnh truy cập vào/ra (IN, OUT)
Các lệnh khác (NOP, HLT)
Ví dụ: ADD AX, BX thực hiện phép cộng giữa giá trị của thanh ghi AX và BX.
Ví dụ: MOV AX, 10 di chuyển giá trị 10 vào thanh ghi AX.
Ví dụ: MOV AX, BX di chuyển giá trị từ thanh ghi BX vào AX.
Các tài liệu tham khảo được trích dẫn trong Chương 10 cũng có thể áp dụng cho nội dung của chương này [BLAA97] chứa một cuộc thảo luận chi tiết về định dạng lệnh và các chế độ địa chỉ Ngoài ra, người đọc có thể muốn tham khảo [FLYN85] để thảo luận và phân tích về các vấn đề thiết kế bộ lệnh, đặc biệt là những vấn đề liên quan đến định dạng BLAA97 Blaauw, G., và Brooks, F Kiến trúc máy tính: Khái niệm và Tiến hóa Reading, MA: Addison- Wesley, 1997 FLYN85 Flynn, M.; Johnson, J.; và Wakefield, S “Về các Bộ Lệnh và Cấu Trúc của Chúng.” IEEE Transactions on Computers, Tháng 3 năm 1985.
Chương 11.7 7 thuật ngữ quan trọng, câu hỏi đánh giá và bài tập
Thuật ngữ autoindexing base-register addressing direct addressing displacement addressing effective address immediate addressing indexing indirect addressing instruction format postindexing preindexing register addressing register indirect addressing relative addressing word
11.1 Định nghĩa ngắn gọn về địa chỉ hằng số trực tiếp
11.2 Định nghĩa ngắn gọn về địa chỉ trực tiếp
11.3 Định nghĩa ngắn gọn về địa chỉ gián tiếp.
11.4 Định nghĩa ngắn gọn về địa chỉ thanh ghi.
11.5 Định nghĩa ngắn gọn về địa chỉ gián tiếp thông qua thanh ghi
11.6 Định nghĩa ngắn gọn về địa chỉ độ dời
11.7 Định nghĩa ngắn gọn về địa chỉ tương đối
11.8 Lợi ích của việc tự động cập nhật (autoindexing) là gì?
11.9 Sự khác biệt giữa việc cập nhật sau (postindexing) và cập nhật trước (preindexing) là gì? 11.10 Những yếu tố nào quyết định việc sử dụng các bit địa chỉ của một lệnh?
11.11 Ưu điểm và nhược điểm của việc sử dụng định dạng lệnh có độ dài biến đổi là gì?
11.1 Với các giá trị bộ nhớ sau đây và một máy một địa chỉ với một bộ nhớ chứa, các giá trị sau đây sẽ được tải vào bộ chứa như thế nào?
• Từ 50 chứa 70. a LOAD HẰNG SỐ TRỰC TIẾP 20 b LOAD TRỰC TIẾP 20 c LOAD GIÁN TIẾP 20 d LOAD HẰNG SỐ TRỰC TIẾP 30 e LOAD TRỰC TIẾP 30 f LOAD GIÁN TIẾP 30
11.2 Giả sử địa chỉ được lưu trữ trong bộ đếm chương trình được đánh dấu bằng biểu tượng X1 Lệnh được lưu trữ trong X1 có một phần địa chỉ (tham chiếu nguồn) X2 Toán hạng cần thiết để thực thi lệnh được lưu trữ trong từ bộ nhớ có địa chỉ X3 Một thanh ghi chỉ mục chứa giá trị X4 Mối quan hệ giữa các lượng này là gì nếu chế độ địa chỉ của lệnh là
11.3 Một trường địa chỉ trong một lệnh chứa giá trị thập phân 14 Toán hạng tương ứng được đặt ở đâu cho a địa chỉ hằng số trực tiếp? b địa chỉ trực tiếp? c địa chỉ gián tiếp? d địa chỉ thanh ghi? e địa chỉ gián tiếp thông qua thanh ghi?
11.4 Xem xét một bộ xử lý 16 bit trong đó các dữ liệu sau xuất hiện trong bộ nhớ chính, bắt đầu từ vị trí 200.
Phần đầu tiên của lệnh (LD) cho biết lệnh này tải giá trị vào một thanh ghi Mode chỉ ra chế độ địa chỉ và nếu cần, sẽ chỉ ra thanh ghi nguồn (giả sử R1 với giá trị 400) Thanh ghi cơ sở chứa giá trị 100 Giá trị 500 tại vị trí 201 có thể được dùng trong phép tính địa chỉ Giả sử vị trí 399 chứa giá trị 500.
999, vị trí 400 chứa giá trị 1000, và cứ thế Xác định địa chỉ hiệu quả và toán hạng được tải cho các chế độ địa chỉ sau: a Direct b Immediat e c Indirect d PC relative e Displaceme nt f Register g Register indirect h Autoindexing with increment, using R1
11.5 Một lệnh nhảy ở chế độ tương đối với PC dài 3 byte Địa chỉ của lệnh, tính bằng thập phân, là 256028 Xác định địa chỉ đích của nhảy nếu sự dịch chuyển có dấu trong lệnh là -31.
11.6 Một lệnh nhảy ở chế độ tương đối với PC được lưu trữ trong bộ nhớ tại địa chỉ Nhảy được thực hiện đến vị trí Trường địa chỉ trong lệnh có chiều dài là 10 bit Giá trị nhị phân trong lệnh là gì?
11.7 Khi một bản lệnh ở chế độ địa chỉ gián tiếp được lấy và thực thi, bộ xử lý cần tham chiếu đến bộ nhớ bao nhiêu lần nếu lệnh đó là
(a) một phép tính yêu cầu một toán hạng;
11.8 IBM 370 không cung cấp chế độ địa chỉ gián tiếp Giả sử địa chỉ của một toán hạng nằm trong bộ nhớ chính Bạn sẽ truy cập vào toán hạng như thế nào?
11.9 Trong [COOK82], tác giả đề xuất rằng các chế độ địa chỉ tương đối với
PC nên bị loại bỏ để ủng hộ các chế độ khác, như việc sử dụng một ngăn xếp Nhược điểm của đề xuất này là gì?
11.10 Hướng dẫn: Một cách sử dụng có thể là trong trường hợp cần nhân một giá trị (op2) với một hệ số cố định (immediate), sau đó lưu kết quả vào một thanh ghi (op1) Điều này có thể hữu ích trong các tình huống như tính toán với các chỉ số (indexing), nơi mà ta cần nhân một giá trị với một hệ số cố định trước khi thực hiện phép tính chính.
11.11 Địa chỉ của toán hạng sẽ được tính bằng cách cộng tổng của cơ sở và chỉ mục với phần dịch chuyển (displacement) được chỉ định Vì vậy, trong trường hợp này, địa chỉ của toán hạng sẽ là: Địa chỉ = Cơ sở + Chỉ mục + Dịch chuyển Địa chỉ = 48022 + 8 + 1970 Địa chỉ = 50000 + 1970 Địa chỉ = 51970