Lập Trình Hợp Ngữ ARM - Bài 2

2. Bên trong ARM
Trong chương trước, chúng tôi bắt đầu bằng cách xem xét các hướng dẫn thực hiện bởi một bộ xử lý thần thoại với thuật nhớ như ON và OFF . Sau đó, chúng tôi đã đi vào để mô tả một số tính năng của một bộ xử lý thực tế - ARM. Chương này xem xét chi tiết hơn tại ARM, bao gồm cả mô hình của lập trình viên và các loại hướng dẫn của nó. Chúng tôi sẽ bắt đầu bằng cách liệt kê một số thuộc tính quan trọng của CPU:
kích thước từ
chiều dài từ của ARM là 4 byte. Đó là, đó là một 32-bit vi và hầu hết ở nhà khi giao dịch với các đơn vị dữ liệu có độ dài đó. Tuy nhiên, khả năng xử lý byte cá nhân hiệu quả là rất quan trọng - như thông tin nhân vật là định hướng byte - vì vậy ARM có cung cấp để đối phó với những đơn vị nhỏ hơn quá.
Ký ức
Khi giải quyết các bộ nhớ, ARM sử dụng một giá trị địa chỉ 26-bit. Điều này cho phép 2 26 hoặc 64M byte của bộ nhớ được truy cập. Mặc dù byte cá nhân có thể được chuyển giao giữa các bộ xử lý và bộ nhớ, ARM thực sự là lời dựa trên. Mọi giao dịch chuyển từ cỡ phải có các toán hạng trong bộ nhớ nằm trên word-ranh giới. Điều này có nghĩa các địa chỉ hướng dẫn phải là bội số của bốn.
I / O
Đầu vào và đầu ra thiết bị này có bộ nhớ ánh xạ. Không có khái niệm về một không gian địa chỉ I / O riêng biệt. chip ngoại vi được đọc và viết như thể chúng là các khu vực của bộ nhớ. Điều này có nghĩa rằng trong hệ thống ARM thực tế, bản đồ bộ nhớ được chia thành ba khu vực: các thiết bị bộ nhớ RAM, ROM, và đầu vào / đầu ra (có thể là trong thứ tự kích thước giảm dần).
Đăng ký
Các thiết lập đăng ký, hoặc mô hình lập trình của, của ARM có thể không thực sự được bất kỳ đơn giản. Nhiều vi xử lý phổ biến có một máy chủ của các thanh ghi chuyên dụng (hoặc mục đích đặc biệt) của các kích cỡ khác nhau mà chỉ có thể được sử dụng với hướng dẫn nhất định hoặc trong những trường hợp cụ thể. ARM có mười sáu thanh ghi 32-bit, trong đó có thể được sử dụng không hạn chế trong bất kỳ hướng dẫn. Có rất ít sự cống hiến - chỉ là một trong các thanh ghi được gắn vĩnh viễn lên bởi bộ xử lý.
hướng dẫn
Khi toàn bộ triết lý của ARM dựa trên 'nhanh chóng và đơn giản, chúng tôi mong chờ sự hướng dẫn thiết lập để phản ánh điều này, và thực sự nó. A, dễ nhớ tập nhỏ các loại hướng dẫn có sẵn. Điều này không ám chỉ thiếu điện, mặc dù. Thứ nhất, hướng dẫn thực hiện rất nhanh chóng, và thứ hai, hầu hết có tính năng bổ sung hữu ích mà thêm vào tiện ích của mình mà không làm mất đi những dễ sử dụng.
2.1 Bộ nhớ và giải quyết
Địa chỉ thấp nhất mà ARM có thể sử dụng là thu được bằng cách đặt 0s trên tất cả các 26 dòng địa chỉ - địa chỉ & 0000000. Các địa chỉ cao nhất có thể đạt được bằng cách đặt 1s trên 26 tín hiệu địa chỉ, cho địa chỉ & 3FFFFFF. Tất cả các kết hợp có thể có giữa hai thái cực này là có sẵn, cho phép tổng cộng 64M byte để được giải quyết. Tất nhiên, có rất ít khả nhiều bộ nhớ này sẽ thực sự được trang bị máy móc hiện tại, ngay cả với những năng lực ngày càng tăng của bộ nhớ RAM và ROM chip. Một hoặc bốn MB RAM là một số tiền hợp lý để mong đợi sử dụng công nghệ hiện nay.
Tại sao cho phép một loạt địa chỉ lớn như vậy rồi? Có nhiều lý do tốt. Thứ nhất, trong suốt lịch sử của máy tính, các nhà thiết kế có theo ước tính cách lập trình nhiều bộ nhớ (hay đúng hơn là các chương trình của họ) có thể thực sự sử dụng. Một câu châm ngôn tốt là 'chương trình sẽ luôn luôn phát triển để lấp đầy không gian có sẵn. Và sau đó, vài.' Trong lịch sử ngắn gọn về bộ vi xử lý, phạm vi giải quyết của CPU đã tăng từ 256 byte duy nhất đến 4 tỷ byte (tức là 4000000000 byte) cho một số micros 32-bit. Khi giá của bộ nhớ tiếp tục giảm, chúng ta có thể mong đợi 16 triệu và thậm chí 32M byte RAM năng lực để trở thành có sẵn khá rẻ.
Một lý do khác cho việc cung cấp một không gian địa chỉ lớn là cho phép khả năng sử dụng bộ nhớ ảo. Bộ nhớ ảo là một kỹ thuật mà trong đó các bộ nhớ RAM bán dẫn nhanh nhưng tương đối đắt tiền được bổ sung bởi khả năng chậm nhưng lớn hơn lưu trữ từ tính, ví dụ như một đĩa Winchester. Ví dụ, chúng ta có thể phân bổ 16 triệu byte của một đĩa Winchester để hoạt động như bộ nhớ cho máy tính. RAM có sẵn được sử dụng để 'đệm' càng nhiều về điều này như có thể, nói 512K byte, làm cho nó nhanh chóng tiếp cận. Khi có nhu cầu truy cập dữ liệu mà không phải là hiện tại trong bộ nhớ RAM, chúng ta nạp nó trong từ Winchester.
Bộ nhớ ảo là một chủ đề quan trọng, nhưng một cuộc thảo luận chi tiết của nó nằm ngoài phạm vi của cuốn sách này. Chúng tôi đề cập đến một số kỹ thuật bộ nhớ ảo cơ bản khi nói về chip điều khiển bộ nhớ trong Chương Bảy.
Biểu đồ dưới đây minh họa cách ARM địa chỉ từ bộ nhớ và byte.
Các địa chỉ xuống ở phía bên tay trái là những địa chỉ từ, và gia tăng trong các bước của bốn. địa chỉ từ luôn luôn có ít nhất hai bit quan trọng của họ thiết lập để không và 24 bit khác xác định từ được yêu cầu. Bất cứ khi nào các ARM tìm nạp lệnh từ bộ nhớ, một địa chỉ Word được sử dụng. Ngoài ra, khi một toán hạng từ kích thước được chuyển từ ARM vào bộ nhớ, hoặc ngược lại, một địa chỉ Word được sử dụng.
Khi toán hạng byte kích thước được truy cập, tất cả 26 dòng địa chỉ được sử dụng, ít nhất là đáng kể hai bit xác định đó byte trong vòng từ được yêu cầu. Có một tín hiệu từ chip ARM này cho ta biết việc chuyển giao hiện nay là một từ hoặc một byte cỡ. Tín hiệu này được sử dụng bởi hệ thống bộ nhớ để cho phép các chip bộ nhớ thích hợp. Chúng tôi sẽ có nhiều điều để nói về giải quyết trong phần hướng dẫn trên truyền dữ liệu.
Số từ đầu tiên của bộ nhớ ARM có ý nghĩa đặc biệt. Khi sự kiện nào đó xảy ra, ví dụ như ARM được thiết lập lại hoặc một lệnh bất hợp pháp đang gặp phải, bộ vi xử lý tự động nhảy đến một trong những vài địa điểm đầu tiên. Các hướng dẫn có thực hiện các hành động cần thiết để đối phó với sự kiện này. Khác hơn này, tất cả các bộ nhớ ARM đã được tạo ra bằng nhau và sử dụng của nó được xác định duy nhất bởi các nhà thiết kế của hệ thống.
Đối với phần còn lại của phần này, chúng tôi cung cấp cho các chi tiết ngắn gọn về việc sử dụng các chip khác trong gia đình ARM được gọi là MEMC. Thông tin này là không quan trọng đối với hầu hết các lập trình viên, và có thể được bỏ qua trên đọc đầu tiên.
Một chủ đề mà là liên quan đến bộ nhớ ảo được đề cập ở trên, và không giống như vậy, nằm trong phạm vi của cuốn sách này, là mối quan hệ giữa bộ nhớ 'chất' và 'hợp lý' trong hệ thống ARM. Nhiều máy ARM dựa trên sử dụng một thiết bị được gọi là Memory Controller - MEMC - đó là một phần của cùng một gia đình của các thiết bị như CPU ​​ARM. (Các thành viên khác là điều khiển video và I / O Controller, gọi VIDC và IOC tương ứng.)
Khi một hệ thống dựa trên ARM sử dụng MEMC, bản đồ bộ nhớ của nó được chia thành ba khu vực chính. Nửa dưới - 32M byte - được gọi là RAM logic, bộ nhớ rằng hầu hết các chương trình 'see' khi họ đang thực hiện. Các 16M byte tiếp theo được phân bổ cho bộ nhớ RAM vật lý. Khu vực này chỉ hiển thị với các chương trình hệ thống có sử dụng CPU trong một chế độ đặc biệt được gọi là chế độ giám sát .Cuối cùng, các byte 16 triệu đầu là chiếm đóng ROM và thiết bị I / O.
RAM logic và vật lý thực sự là điều tương tự, và các dữ liệu được lưu trữ trong các chip RAM cùng. Tuy nhiên, trong khi bộ nhớ RAM vật lý chiếm một khu vực tiếp giáp với địa chỉ 32M đến 32M + (kích thước bộ nhớ) -1, RAM logic có thể rải rác ở bất cứ đâu trong các byte 32M đáy. Các bộ nhớ RAM vật lý được chia thành 128 'trang'. Kích thước của một trang phụ thuộc vào bao nhiêu RAM máy có. Ví dụ, trong một máy byte 1M, một trang là 8K byte; trong một máy byte 4M (tối đa mà chip MEMC hiện tại có thể xử lý) nó là 32K byte.
Một bảng trong MEMC được lập trình để kiểm soát nơi mỗi trang vật lý xuất hiện trong các bản đồ bộ nhớ logic. Ví dụ, trong một hệ thống đặc biệt là nó có thể được thuận tiện để có bộ nhớ màn hình ở đầu rất của vùng nhớ logic 32M byte. Nói kích thước trang là 8K byte và 32K là cần thiết cho màn hình. Các MEMC sẽ được lập trình để bốn trang của RAM vật lý xuất hiện ở 32K byte đầu của không gian địa chỉ logic. Những bốn trang sẽ được truy cập vào chương trình chế độ giám sát ở cả hai vị trí này và ở nơi thích hợp trong bản đồ bộ nhớ vật lý, và các chương trình không giám sát tại chỉ vị trí bản đồ bộ nhớ logic.
Khi một chương trình truy cập vào bộ nhớ hợp lý, MEMC nhìn lên nơi tương ứng với bộ nhớ RAM vật lý và chuyển địa chỉ đó trên các chip RAM. Bạn có thể tưởng tượng các bus địa chỉ đi qua MEMC trên đường tới bộ nhớ, và được dịch trên đường. Bản dịch này là hoàn toàn minh bạch để các lập trình viên. Nếu một chương trình cố gắng truy cập vào một địa chỉ bộ nhớ hợp lý mà không có bộ nhớ RAM vật lý tương ứng (chỉ nhớ nhất 4M byte của 32M có thể có thể được chiếm đóng), một tín hiệu được gọi là 'dữ liệu hủy bỏ' được kích hoạt trên CPU. Điều này cho phép cố gắng để truy cập vào các địa điểm 'bất hợp pháp' để được xử lý.
Như các byte hạn 4M chỉ áp dụng cho các chip MEMC hiện tại, không có lý do tại sao một thiết bị sau này không nên có thể truy cập vào một khu vực lớn hơn nhiều bộ nhớ vật lý.
Bởi vì các bản dịch được thực hiện bởi MEMC, các địa chỉ logic được sử dụng để truy cập vào bộ nhớ RAM có thể được bất cứ nơi nào trong bản đồ bộ nhớ. Nhìn theo cách khác, điều này có nghĩa rằng một máy byte 1M sẽ không nhất thiết phải xuất hiện để có tất cả bộ nhớ RAM này ở dưới cùng của bản đồ bộ nhớ; nó có thể được phân tán vào các khu vực khác nhau. Ví dụ, một trong những 'đoạn' của bộ nhớ có thể được sử dụng cho màn hình và ánh xạ lên một địa chỉ cao, trong khi một khu vực khác, được sử dụng cho các chương trình ứng dụng nói, có thể bắt đầu từ một địa chỉ thấp như & 8000.
Thông thường, sự hiện diện của MEMC trong một hệ thống là nếu không có hậu quả cho một chương trình, nhưng nó giúp giải thích làm thế nào các bản đồ bộ nhớ của một máy tính dựa trên ARM dường như nó.
2.2 mô hình lập trình của
Phần này mô tả cách thức mà các ARM trình bày chính nó để lập trình. Thuật ngữ 'mô hình' được sử dụng bởi vì mặc dù nó mô tả những gì các lập trình viên thấy khi lập trình ARM, các đại diện nội có thể rất khác nhau. Vì vậy, miễn là chương trình phản ứng như mong đợi từ các mô tả được đưa ra, các chi tiết nội bộ là không quan trọng.
Đôi Tuy nhiên, một tính năng đặc biệt của hoạt động của bộ vi xử lý có thể được hiểu tốt hơn nếu bạn biết những gì ARM là nhận được lên đến trong nội bộ. Những tình huống này được giải thích khi chúng xuất hiện trong các mô tả dưới đây.
Như đã đề cập ở trên, ARM có một tổ chức đăng ký đặc biệt đơn giản, có lợi cho cả các lập trình viên nhân lực và trình biên dịch, mà còn cần phải tạo ra các chương trình ARM. Con người được phục vụ tốt bởi vì bộ não yếu ớt của chúng tôi không phải đối phó với những câu hỏi như "Tôi có thể sử dụng đăng ký X như một toán hạng với sự hướng dẫn Thanh? ' Những cây trồng lên khá thường xuyên khi lập trình trong lắp ráp trên máy vi nhất định, làm cho mã hóa một công việc mệt mỏi.
Có mười sáu đăng ký sử dụng. Họ là tất cả 32-bit rộng. Chỉ hai là dành; những người khác có chung mục đích và được sử dụng để lưu trữ các toán hạng, kết quả và các con trỏ tới bộ nhớ. Của hai thanh ghi chuyên dụng, chỉ một trong những được sử dụng vĩnh viễn cho một mục đích đặc biệt (nó là PC). Mười sáu là một con số khá lớn các thanh ghi để cung cấp, một số máy vi quản lý với chỉ một đăng ký mục đích chung. Chúng được gọi là bộ vi xử lý ắc-based, và 6502 là một ví dụ của một con chip như vậy.
Tất cả các thanh ghi của ARM có chung mục đích. Điều này có nghĩa rằng bất cứ một lệnh cần đăng ký để được xác định như một toán hạng, một trong số chúng có thể được sử dụng. Điều này cho phép các lập trình viên tự do tuyệt vời trong việc quyết định đăng ký để sử dụng cho mục đích đó.
Động lực cho việc cung cấp một bộ đăng ký quảng đại bắt nguồn từ cách thức mà ARM thực hiện hầu hết các hoạt động của nó. Tất cả các lệnh thao tác dữ liệu sử dụng đăng ký. Đó là, nếu bạn muốn thêm hai số 32-bit, cả hai con số phải được vào sổ đăng ký, và kết quả được lưu trữ trong một thanh ghi thứ ba. Nó không phải là có thể để thêm một số trong bộ nhớ để đăng ký một, hoặc ngược lại. Trong thực tế, thời gian chỉ ARM truy cập bộ nhớ là để lấy hướng dẫn và khi thực hiện một trong số ít các hướng dẫn chuyển đăng ký sang bộ nhớ.
Vì vậy, cho rằng hầu hết các xử lý được giới hạn sử dụng các thanh ghi bên trong nhanh chóng, nó chỉ là công bằng rằng một số lượng hợp lý của người được cấp. Các nghiên cứu của các nhà khoa học máy tính đã chỉ ra rằng tám thanh ghi mục đích chung là đủ cho hầu hết các loại chương trình, để 16 nên được rất nhiều.
Khi thiết kế ARM, Acorn có thể cũng đã bị cám dỗ để bao gồm thậm chí đăng ký nhiều hơn, nói 32, bằng cách sử dụng "quá nhiều không bao giờ đủ 'câu châm ngôn nói trên. Tuy nhiên, điều quan trọng là hãy nhớ rằng nếu một lệnh là để cho phép bất kỳ đăng ký như một toán hạng, số đăng ký phải được mã hóa trong hướng dẫn. 16 thanh ghi cần bốn bit mã hóa; 32 thanh ghi sẽ cần năm. Như vậy bằng cách tăng số lượng đăng ký, họ sẽ giảm số lượng bit có sẵn để mã hóa các thông tin khác trong hướng dẫn.
đánh đổi như thế là phổ biến trong thiết kế bộ xử lý, và các tiện ích của thiết kế phụ thuộc vào việc các quyết định đã được thực hiện một cách khôn ngoan. Trên toàn bộ, Acorn dường như đã đạt được sự cân bằng với ARM.
Có một minh họa của mô hình ở trang sau của lập trình viên.
Trong sơ đồ, 'undedicated' có nghĩa là phần cứng không áp đặt sử dụng cụ thể cho việc đăng ký. 'Chuyên dụng' có nghĩa là ARM sử dụng sổ đăng ký cho một chức năng đặc biệt - R15 là PC. 'Bán dành riêng' ngụ ý rằng đôi khi các phần cứng có thể sử dụng đăng ký cho một số chức năng (để lưu trữ các địa chỉ), nhưng lúc khác, nó là undedicated. 'Mục đích chung' chỉ ra rằng nếu một lệnh đòi hỏi đăng ký như là một toán hạng, bất kỳ đăng ký có thể được xác định.
Như R0-R13 là undedicated, đăng ký mục đích chung, không có gì nhiều hơn nhu cầu để nói về họ ở giai đoạn này.
R0Undedicated, mục đích chung
R1Undedicated, mục đích chung
R2Undedicated, mục đích chung
R3Undedicated, mục đích chung
R4Undedicated, mục đích chung
R5Undedicated, mục đích chung
R6Undedicated, mục đích chung
R7Undedicated, mục đích chung
R8Undedicated, mục đích chung
R9Undedicated, mục đích chung
R10Undedicated, mục đích chung
R11Undedicated, mục đích chung
R12Undedicated, mục đích chung
R13Undedicated, mục đích chung
R14Bán chuyên dụng, mục đích chung (liên kết)
R15Chuyên dụng, mục đích chung (PC)
đăng ký đặc biệt
Là hơi khác nhau từ phần còn lại, R14 và R15 là thú vị hơn, đặc biệt là R15. Điều này là đăng ký chỉ mà bạn không thể sử dụng trong cùng một cách như phần còn lại để giữ các toán hạng và kết quả. Lý do là ARM sử dụng nó để lưu trữ chương trình truy cập và ghi trạng thái. Hai thành phần này của R15 được giải thích dưới đây.
Đăng ký 14 thường là miễn phí để giữ bất kỳ giá trị mong muốn người dùng. Tuy nhiên, một trong những hướng dẫn, 'chi nhánh với liên kết', sử dụng R14 để giữ một bản sao của máy tính. Các chương tiếp theo mô tả chi nhánh với liên kết, cùng với phần còn lại của các tập lệnh, và sử dụng này của R14 được giải thích chi tiết hơn ở đó.
Chương trình truy cập
R15 được chia thành hai phần. Điều này được minh họa dưới đây:
31302928272625210
NZCVtôiFchương trình CounterS1S0
Bit 2-25 là đếm chương trình (PC). Đó là, họ giữ địa chỉ từ các lệnh kế tiếp để được lấy. Chỉ có 24 bit (như trái ngược với toàn bộ 26) bởi vì các hướng dẫn được xác định nằm trên ranh giới từ. Như vậy hai bit thấp nhất của địa chỉ của một hướng dẫn là luôn bằng không, và không có nhu cầu để lưu trữ chúng. Khi R15 được sử dụng để đặt các địa chỉ của lệnh tiếp theo trên bus địa chỉ, các bit 0 và 1 của xe buýt sẽ được tự động thiết lập để không.
Khi ARM được thiết lập lại, chương trình truy cập được thiết lập để không, và hướng dẫn được lấy bắt đầu từ vị trí đó. Thông thường, chương trình truy cập được tăng lên sau mỗi lệnh được nạp, do đó, một chương trình được thực hiện theo thứ tự. Tuy nhiên, một số hướng dẫn thay đổi giá trị của máy tính, gây ra các hướng dẫn không liên tiếp để được lấy. Đây là cách IF-THEN-ELSE và REPEAT-UNTIL loại cấu trúc được lập trình trong mã máy.
Một số tín hiệu kết nối với các chip ARM cũng ảnh hưởng đến các máy tính khi được kích hoạt. Đặt lại là một tín hiệu như vậy, và như đã đề cập ở trên nó gây ra các máy tính để nhảy đến vị trí số không.Những người khác là IRQ và FIQ, được đề cập dưới đây, và bộ nhớ hủy bỏ.
đăng ký hộ
Các bit còn lại của R15, bit 0, 1 và 26-31, tạo thành một thanh ghi trạng thái tám-bit. Điều này có chứa thông tin về trạng thái của bộ xử lý. Có hai loại thông tin trạng thái: trạng thái kết quả và tình trạng hệ thống. Các cựu đề cập đến kết quả của các hoạt động trước đó, ví dụ, cho dù một thực được tạo ra bởi một hoạt động bổ sung. Sau đó đề cập đến bốn chế độ hoạt động, trong đó ARM có thể được thiết lập, và liệu các sự kiện nhất định được phép gián đoạn chế biến của nó.
Dưới đây là cách bố trí của các phần ghi trạng của R15:
Kiểu
Một chút
Tên
Ý nghĩa
Kết quả31Ncờ kết quả âm tính
30ZKhông kết quả cờ
trạng thái29Ccờ carry
28Vcờ kết quả tràn
hệ thống27IRQCờ ngắt vô hiệu hóa
26FIQNhanh cờ ngắt vô hiệu hóa
trạng thái1S1Chế độ xử lý 1
0S0Chế độ xử lý 0

Những lá cờ trạng thái kết quả bị ảnh hưởng bởi các hoạt động dữ liệu đăng ký đến đăng ký. Cách chính xác trong đó các hướng dẫn thay đổi những lá cờ được mô tả cùng với các hướng dẫn. Không có hướng dẫn khác ảnh hưởng đến các cờ, trừ khi chúng được nạp một cách rõ ràng (cùng với phần còn lại của R15) từ bộ nhớ.
Như mỗi lá cờ được lưu trữ trong một chút, nó có hai trạng thái có thể. Nếu một bit cờ có giá trị 1, người ta nói là đúng, hoặc thiết lập. Nếu nó có giá trị 0, lá cờ là sai hoặc xóa. Ví dụ, nếu bit 31-28 của R15 là 1100, N và cờ Z sẽ được thiết lập, và V và C sẽ bị xóa.
Tất cả các hướng dẫn có thể thực hiện các điều kiện trên các lá cờ kết quả. Đó là để nói, một lệnh có thể được thực hiện chỉ khi kết hợp trao cờ tồn tại, nếu không hướng dẫn được bỏ qua. Ngoài ra, một lệnh có thể được vô điều kiện, vì vậy mà nó thực hiện bất kể trạng thái của các cờ.
Những lá cờ chế độ xử lý tổ chức một số có hai bit. Tình trạng của hai bit này xác định 'chế độ' trong đó ARM thực hiện như sau:
s1
s0
Chế độ
00Người dùng
01FIQ hoặc ngắt nhanh
10IRQ hoặc gián đoạn
11SVC hoặc giám sát
Phần lớn của cuốn sách này là có liên quan chỉ với chế độ người dùng. Các chế độ khác là 'hệ thống' chế độ mà chỉ được yêu cầu của các chương trình mà sẽ thường được viết trên máy bạn đang sử dụng.Tóm lại, chế độ giám sát được nhập khi ARM là loại thiết lập lại hoặc một số lỗi xảy ra. IRQ và FIQ chế độ được nhập dưới các điều kiện gián đoạn mô tả dưới đây.
Trong chế độ không sử dụng, ARM trông và hành xử theo một cách rất giống với chế độ người dùng (mà chúng tôi đã được mô tả). Sự khác biệt chính là đăng ký nhất định (ví dụ như R13 và R14 trong chế độ giám sát) được thay thế bởi "bản tin" chỉ có trong chế độ đó. Chúng được gọi là R13_SVC và R14_SVC. Trong chế độ người dùng, phiên bản chế độ giám sát của R13 và R14 là không nhìn thấy được, và ngược lại. Ngoài ra, S0 và S1 có thể không được thay đổi trong chế độ người dùng, nhưng có thể là trong các chế độ khác. Trong chế độ IRQ, sổ đăng ký thêm là R13_IRQ và R14_IRQ; trong chế độ FIQ có bảy trong số họ - R8_FIQ để R14_FIQ.
chế độ không dùng được sử dụng bởi các chương trình 'đặc quyền' mà có thể có quyền truy cập vào phần cứng mà người dùng không được phép chạm vào. Điều này có thể do một tín hiệu từ ARM phản ánh tình trạng của S0 và S1 phần cứng để bên ngoài có thể xác định nếu bộ xử lý là trong một chế độ người dùng hay không.
Cuối cùng, các bit trạng thái FIQ và IRQ được sử dụng để kích hoạt hoặc vô hiệu hóa hai ngắt được cung cấp bởi bộ vi xử lý. Một ngắt là một tín hiệu cho các chip đó, khi được kích hoạt, làm cho ARM để đình chỉ hành động hiện tại của mình (đã hoàn thành các hướng dẫn hiện hành) và thiết lập chương trình truy cập đến một giá trị xác định trước. Phần cứng như ổ đĩa sử dụng ngắt để yêu cầu sự chú ý khi họ yêu cầu phục vụ.
ARM cung cấp hai ngắt. IRQ (viết tắt ngắt yêu cầu) tín hiệu sẽ làm cho chương trình bị đình chỉ nếu bit IRQ trong đăng ký hộ sẽ bị xóa. Nếu bit được thiết lập, các ngắt sẽ bị bỏ qua bởi bộ vi xử lý cho đến khi nó là rõ ràng. Các FIQ (nhanh ngắt) hoạt động tương tự, ngoại trừ các bit FIQ cho phép / vô hiệu hóa nó. Nếu một FIQ ngắt được kích hoạt, các bit IRQ được thiết lập tự động, vô hiệu hóa bất kỳ tín hiệu IRQ. Điều ngược lại là không đúng sự thật tuy nhiên, và một FIQ ngắt có thể được xử lý trong khi một IRQ đang hoạt động.
Như đã đề cập ở trên, người giám sát, FIQ và chế độ IRQ hiếm khi quan tâm đến lập trình khác so với những người viết phần mềm 'hệ thống', và các bit trạng thái hệ thống của R15 chung có thể được bỏ qua.Chương Bảy bao gồm sự khác biệt về lập trình ARM trong chế độ không sử dụng.
2.3 Các hướng dẫn thiết lập
Để bổ sung cho các kiến ​​trúc thông thường của mô hình của lập trình viên, ARM có tổ chức tốt, hướng dẫn thiết lập thống nhất. Trong phần này, chúng tôi đưa ra một cái nhìn tổng quan về các loại hướng dẫn, và trì hoãn việc mô tả chi tiết cho đến khi các chương tiếp theo.
Thuộc tính chung
Hiện có một số thuộc tính mà tất cả các hướng dẫn đều có chung. Tất cả các hướng dẫn dài 32-bit (tức là họ chiếm một từ) và phải nằm trên ranh giới từ. Chúng ta đã thấy rằng địa chỉ tổ chức trong chương trình truy cập là một địa chỉ Word, và hai bit thấp nhất của địa chỉ được thiết lập để không khi một lệnh được lấy từ bộ nhớ.
Lý do chính cho việc áp đặt những hạn chế từ biên giới là một trong những hiệu quả. Nếu một lệnh được phép cỡi lên cả hai từ, hai truy cập vào bộ nhớ sẽ được yêu cầu tải một chỉ dẫn duy nhất. Vì nó là, ARM chỉ bao giờ có để truy cập vào bộ nhớ một lần theo hướng dẫn lấy. Một lý do thứ cấp là bằng cách làm cho hai bit thấp nhất của địa chỉ ngầm, dải địa chỉ chương trình của ARM được tăng từ 24 bit có sẵn trong R15 đến 26 bit - có hiệu quả gấp bốn lần phạm vi giải quyết.
Một chỉ thị 32-bit cho phép 2 32 hoặc khoảng 4 tỷ hướng dẫn có thể. Rõ ràng là ARM sẽ không có nhiều của một giảm máy tính tập lệnh nếu nó được sử dụng tất cả các để được hướng dẫn cực kỳ khác nhau.Tuy nhiên, nó sử dụng một số lượng lớn đáng ngạc nhiên của không gian giảng dạy lý thuyết này.
Từ hướng dẫn có thể được chia thành các "lĩnh vực" khác nhau. Một trường là một bộ (có lẽ chỉ là một) bit liền kề nhau. Ví dụ, bit 28-31 của R15 có thể được gọi là trường trạng thái kết quả. Mỗi lĩnh vực từ lệnh điều khiển một khía cạnh cụ thể của việc giải thích của các hướng dẫn. Nó không phải là cần thiết để biết được nơi các lĩnh vực này xảy ra trong vòng từ và ý nghĩa của chúng, như lắp ráp nào đó cho bạn sử dụng các đại diện văn bản của hướng dẫn.
Một lĩnh vực mà là đáng nói hiện nay là một phần điều kiện. Mỗi hướng dẫn ARM có một mã trạng mã hóa thành bốn bit của từ. Bốn bit cho phép lên đến 16 điều kiện để được chỉ định, và tất cả đều được sử dụng. Hầu hết các hướng dẫn sẽ sử dụng các điều kiện "vô điều kiện", tức là họ sẽ thực hiện bất kể trạng thái của các cờ. Các điều kiện khác là 'nếu không', 'nếu carry bộ', 'nếu ít hơn "và như vậy.
các lớp học hướng dẫn
Có năm loại giảng dạy. Mỗi lớp được mô tả chi tiết trong phần riêng của chương tiếp theo. Tóm lại, đó là:
dữ liệu hoạt động
Nhóm này hiện hầu hết các công việc. Có hướng dẫn mười sáu tuổi, và họ có định dạng rất giống nhau. Ví dụ về các hướng dẫn từ nhóm này được ADD và CMP , mà thêm và so sánh hai con số tương ứng. Như đã đề cập ở trên, các toán hạng của các hướng dẫn luôn vào sổ đăng ký (hoặc ngay lập tức số được lưu trong các hướng dẫn của chính nó), không bao giờ trong bộ nhớ.
Tải và tiết kiệm
Đây là một nhóm nhỏ của hai hướng dẫn: tải một đăng ký và lưu sổ đăng ký. Biến thể bao gồm liệu byte hoặc từ được chuyển giao, và làm thế nào các vị trí bộ nhớ được sử dụng thu được.
Nhiều tải và tiết kiệm
Trong khi đó, các hướng dẫn trong nhóm trước đây chỉ chuyển một đăng ký duy nhất, nhóm này cho phép từ một đến 16 đăng ký để được di chuyển giữa các bộ xử lý và bộ nhớ. Chỉ chuyển từ được thực hiện bởi nhóm này.
phân nhánh
Mặc dù các máy tính có thể được thay đổi bằng cách sử dụng dữ liệu hoạt động để gây ra một sự thay đổi trong chương trình truy cập, các chỉ dẫn chi nhánh cung cấp một cách thuận tiện để đạt được bất kỳ một phần của không gian địa chỉ 64M byte trong một chỉ dẫn duy nhất. Nó gây ra một chuyển để được thêm vào các giá trị hiện tại của PC. Các chuyển được lưu trữ trong các hướng dẫn của chính nó.
SWI
Nhóm một hướng dẫn này là rất quan trọng. Viết tắt là viết tắt của 'SoftWare ngắt'. Nó cung cấp cách thức cho các chương trình của người sử dụng để truy cập các cơ sở cung cấp bởi hệ điều hành. Tất cả các máy tính dựa trên ARM cung cấp một số tiền nhất định của phần mềm trước bằng văn bản để thực hiện các nhiệm vụ như in các ký tự trên màn hình, thực hiện đĩa I / O vv Bằng cấp SWI hướng dẫn, chương trình của người sử dụng có thể sử dụng phần mềm hệ điều hành này, loại bỏ việc cần phải viết các thói quen cho mỗi ứng dụng.
Floating point
Các chip ARM đầu tiên không cung cấp bất kỳ được xây dựng trong hỗ trợ cho các giao dịch với các điểm nổi, hay thực sự, con số. Thay vào đó, họ có một cơ sở cho việc thêm hợp bộ vi xử lý. Một bộ đồng xử lý là một chip riêng biệt mà thực hiện các lệnh chuyên dùng CPU ARM một mình không thể xử lý. Các bộ vi xử lý đầu tiên như vậy sẽ là một hướng dẫn để thực hiện điểm nổi. Những hướng dẫn đã được xác định, và hiện đang được thực hiện bởi phần mềm. Các mã máy được giao cho họ những hướng dẫn bất hợp pháp trên-I ARM nên phần mềm hệ thống có thể được sử dụng để 'bẫy' họ và thực hiện các hành động cần thiết, mặc dù chậm hơn rất nhiều so với bộ xử lý đồng sẽ.
Bởi vì các hướng dẫn điểm nổi không nằm trong các tập lệnh ARM cơ bản, họ không được thảo luận trong phần chính của cuốn sách này, nhưng được mô tả trong Phụ lục B.

1 Comment:

Cảm giác như dùng google dịch để dịch nội dung ấy híc. mong ad xem xét lại

Đăng nhận xét

Thank you for your comments!