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

7. Chế độ không sử dụng
Trong các chương trước, chúng ta đã hạn chế mình để thảo luận về ARM trong khi nó đang hoạt động trong chế độ người dùng. Đối với hầu hết các mục đích, đây là tất cả những gì cần thiết. Ví dụ, chương trình ARM lớn như bộ thông dịch BASIC BBC quản lý hoạt động hoàn toàn trong chế độ người dùng. Có lần, tuy nhiên, khi một chương trình phải thực hiện theo một trong các phương thức khác để làm việc một cách chính xác. Trong chương này, chúng tôi thảo luận về những đặc điểm của chế độ không sử dụng.
mô hình 7.1 Extended của lập trình viên
Đăng ký thành lập
Như đã mô tả ở Chương Hai, có bốn chế độ trong đó ARM có thể hoạt động. Hai bit dưới cùng của R15 (gọi là s1 và s0) xác định các phương thức, như tóm tắt dưới đây:
s1
s0
Chế độ
000 Thành viên (USR)
011 Nhanh ngắt (FIQ)
102 Ineterrupt (IRQ)
113 Supervisor (SVC)
Khi ARM là trong một chế độ không sử dụng, thiết lập sổ đăng ký của nó hơi khác so với mô hình chế độ người dùng. Việc đánh số của các thanh ghi là giống hệt nhau, nhưng một số con số cao hơn tham chiếu để đăng ký chất riêng biệt trong chế độ 1 đến 3. Các mô hình đăng ký đầy đủ cho tất cả các chế độ được hiển thị ở trang sau. Mỗi cột cho các thanh ghi được hiển thị trong chế độ 0, 1, 2 và 3 tương ứng.
Tên đăng ký mà không có một hậu tố tham khảo trong sổ đăng ký người sử dụng mà chúng ta đang sử dụng để đối phó với. Như các chương trình biểu đồ, mỗi chế độ không sử dụng có ít nhất hai thanh ghi mà có thể chất riêng biệt từ những chế độ người dùng. R14 là đăng ký liên kết, vì vậy tất cả các chế độ có liên kết đăng ký riêng của họ, và R13 là truyền thống được sử dụng như là con trỏ ngăn xếp, vì vậy mỗi chế độ có thể có stack riêng của mình. chế độ FIQ có năm đăng ký bổ sung riêng. Chúng được cung cấp để các thông tin quan trọng có thể được lưu trữ trong bộ xử lý để truy cập nhanh khi chế độ FIQ được nhập vào.
Trong tài liệu Acorn, chế độ thuật ngữ 'giám sát' được sử dụng để mô tả tất cả các chế độ không sử dụng. Chúng tôi sẽ áp dụng Công ước này cho phần còn lại của chương này. Trường hợp chế độ xử lý thực tế 3 là có nghĩa là, các hạn chế độ SVC sẽ được sử dụng.
Dưới đây là mô hình lập trình mở rộng của:
mở rộng hướng dẫn
Mặc dù không có hướng dẫn mà chỉ có thể được sử dụng trong chế độ giám sát, hoạt động của một số các hướng dẫn đã được mô tả trong các chương trước không thay đổi một chút. Những khác biệt này được bảo hiểm đối với từng nhóm hướng dẫn bên dưới.
một nhóm
Nhớ lại rằng trong chế độ người dùng, chỉ có các bit N, Z, V và C của thanh ghi trạng có thể được thay đổi bởi các hướng dẫn thao tác dữ liệu. Hai bit mặt nạ ngắt, F và tôi, và các bit chế độ S0 và S1, có thể được đọc, nhưng một nỗ lực để thay đổi chúng được bỏ qua.
Trong chế độ giám sát, tất cả tám bit của thanh ghi trạng có thể được thay đổi. Trong thực tế, hành động của nhập một chế độ giám sát có thể gây ra một sự thay đổi trong trạng thái của bốn bit đặc biệt. Ví dụ khi một SWI lệnh được sử dụng để gọi một thói quen chế độ giám sát, S0 và S1 được thiết lập để thập phân 3, tức là chế độ SVC, và IRQ bị vô hiệu hóa bởi tôi bit được thiết lập.
Cách dễ nhất để thiết lập F, I, S0 và S1 bit đến một nhà nước yêu cầu là để sử dụng TEQP hướng dẫn. Nhớ lại rằng các hướng dẫn:
TEQP pc, # giá trị
thực hiện một độc quyền-OR của R15 (máy tính và tình trạng cờ) và các giá trị tức thời, nhưng không lưu kết quả ở bất cứ đâu. Bởi vì R15 là hành động như một toán hạng bên trái, chỉ có các bit PC (2-25) được sử dụng trong tính toán, các bit trạng thái được thiết lập là 0. Hơn nữa, bởi vì P tùy chọn đã được xác định sau khi TEQ , kết quả của độc quyền hoạt động -Hoặc trên bit 0, 1 và 26-31 của các toán hạng được lưu trữ trực tiếp vào các bit tương ứng của R15. Như vậy kết quả ròng của các hướng dẫn là để lưu trữ 1 bit trong R15 mà giá trị có một bit, và 0s nơi giá trị là zero. Bạn có thể xem TEQP hướng dẫn như một 'load ghi trạng thái' hướng dẫn đặc biệt trong mẫu:
LDSR #VALUE
Như một ví dụ, giả sử chúng ta đang trong chế độ SVC (S0 = S1 = 1) với ngắt bị vô hiệu hóa (I = 1), và muốn chuyển sang chế độ FIQ (S0 = 1, S1 = 0) với cả hai loại ngắt bị vô hiệu hóa (I = F = 1). Các hướng dẫn sau đây sẽ đạt được kết quả mong muốn:
TEQP pc, # S0_bit + F_bit + I_bit
Các bài tập BASIC sau sẽ khởi tạo mặt nạ bit cho các bit trạng thái khác nhau, chẳng hạn như S0_bit , được sử dụng trên:
S0_bit = 1 << 1
S1_bit = 1 << 2
F_bit = 1 << 26
I_bit = 1 << 27
V_bit = 1 << 28
C_bit = 1 << 29
Z_bit = 1 << 30
N_bit = 1 << 31
Các TEQP hướng dẫn chỉ có thể được sử dụng để lưu trữ một mẫu nhất định của 1s và 0s vào các bit trạng thái của R15. Có gì đôi khi chúng ta cần là khả năng ảnh hưởng đến chỉ số bit mà không làm thay đổi người khác. Điều này đòi hỏi công việc nhiều hơn, như chúng ta phải đọc các bit hiện tại, sau đó thực hiện các hoạt động như mong muốn. Giả sử chúng ta muốn vô hiệu hóa cả hai loại ngắt mà không thay đổi các chế độ xử lý (tức là F = I = 1, S0, S1 không thay đổi). Dưới đây là một cách:
MOV temp, pc, Tải cờ hiện tại
Orr temp, temp, # F_bit + I_bit; Set ngắt mặt nạ
TEQP temp, # 0; Di chuyển lá cờ mới vào R15
Lần này, các quốc gia cờ hiện tại được nạp vào một đăng ký tạm thời sử dụng MOV hướng dẫn. Hãy nhớ rằng để đọc phần trạng thái của R15, nó phải xuất hiện như một toán hạng bên phải trong một nhóm một hướng dẫn. Các Orr được sử dụng để thiết lập các bit I và F mà không làm thay đổi những người khác. Cuối cùng, TEQP đặt các bit trạng thái từ temp.
Như một ví dụ cuối cùng, giả sử chúng ta muốn trở về chế độ người dùng (S0 = S1 = 0) mà không thay đổi phần còn lại của các lá cờ. Chúng ta có thể sử dụng các TST hướng dẫn để xóa S0 và S1, để lại những lá cờ khác không thay đổi:
MOV temp, # N_bit + V_bit + C_bit + Z_bit + I_bit + F_bit
TSTP temp, pc
Các MOV tải tạm thời với một mặt nạ của các bit được để được thay đổi, và TST làm một  điều này và đăng ký tình trạng hiện tại, đưa kết quả trong R15, như P tùy chọn được chỉ định.
nhóm hai
Chỉ có một sự khác biệt giữa việc sử dụng LDR và STR trong chế độ giám sát và chế độ người dùng. Nhớ lại rằng các hướng dẫn sau được lập chỉ mục của các hình thức:
LDR <reg>, [<base>] <bù đắp>
luôn luôn sử dụng ghi lại, do đó không cần bao gồm một ! ở cuối hướng dẫn để xác định nó. Vâng, các bit trong mã lệnh đó sẽ chỉ định ghi lại được sử dụng cho cái gì khác. Nó được bỏ qua trong chế độ người dùng, nhưng trong chế độ giám sát nó ảnh hưởng đến trạng thái của một tín hiệu (gọi SPVMD, được mô tả dưới đây) mà nói với các thiết bị ngoại vi nếu CPU đang thực hiện trong giám sát hoặc sử dụng chế độ.
Thông thường, khi các ARM thực hiện một LDR hoặc STR trong chế độ giám sát, tín hiệu SPVMD nói với thế giới bên ngoài "rằng đây là một chế độ hoạt động giám sát, do đó các thiết bị như bộ điều khiển bộ nhớ có thể quyết định việc chuyển giao dữ liệu yêu cầu là hợp pháp hay không. Nếu T (cho dịch) tùy chọn được đưa ra trong một STR / LDR hướng dẫn, tín hiệu SPVMD được thiết lập để chỉ một chuyển chế độ người dùng, ngay cả khi CPU thực sự là trong chế độ giám sát. Các T lựa chọn đưa ra sau khi các tùy chọn byte-mode B cờ, ví dụ
LDRBT R0, [R1], # 1
sẽ được tải một byte vào R0 quyết bằng R1, sau đó R1 sẽ được tăng thêm một. Bởi vì T là hiện nay, các hướng dẫn sẽ thực hiện với SPVMD cho thấy chế độ người dùng, ngay cả khi chương trình thực sự là chạy trong giám sát.
Lưu ý: Các T tùy chọn đã được bao gồm khi nó đã được dự kiến rằng các chương trình chế độ người dùng và người giám sát sẽ có không gian địa chỉ riêng hoàn toàn, với các cựu đi qua địa chỉ dịch và sau này không. Khi nó quay ra, không gian địa chỉ người dùng thực thi bởi các chip MEMC thực sự là một tiểu bộ không gian địa chỉ chế độ giám sát, do đó T lựa chọn thường không cần thiết. Cũng cần nhớ rằng việc sử dụng của nó chỉ có giá trị với hậu lập chỉ mục, nơi ! Lựa chọn là không cần thiết.
nhóm ba
Các LDM hướng dẫn cung cấp ^ tùy chọn. Nếu có, điều này quy định rằng nếu R15 được tải bởi các hướng dẫn, các bit trạng thái sẽ được ghi đè. Nếu ^ vắng mặt, các bit trạng thái của R15 sẽ không bị ảnh hưởng bởi một LDM , ngay cả khi phần còn lại của R15 được tải. Trong chế độ người dùng, chỉ có N, Z, V và C có thể được ghi đè; trong chế độ giám sát, tất cả các bit trạng thái bị ảnh hưởng.
Trong chế độ giám sát, các ^ lựa chọn là có liên quan ngay cả khi R15 không phải là trong tập các thanh ghi được nạp. Trong tình huống này, sự hiện diện của nó chỉ ra rằng đăng ký sử dụng chế độ nên được nạp, không phải là những người có liên quan đến chế độ hiện hành. Vì vậy, trong chế độ FIQ, ví dụ, hướng dẫn
LDMFD sp, {R0-R14} ^
sẽ được tải đăng ký sử dụng chế độ từ bộ nhớ. Tuy nhiên, nếu R15 là trong danh sách đăng ký để được nạp, hướng dẫn sẽ có tác dụng thông thường của nó bốc đăng ký phù hợp với chế độ FIQ tập lại và ^ sẽ chỉ ra rằng các bit trạng thái của R15 sẽ được nạp.
Đối với STM , không có nhu cầu tương ứng cho ^ , vì tất cả của R15 là luôn luôn được lưu nếu được chỉ định trong danh sách đăng ký. Tuy nhiên, trong chế độ giám sát, sự hiện diện của ^ trong một STM là vẫn còn có liên quan. Thông thường, một hướng dẫn như:
STMFD sp, {R0-R15}
tiết kiệm tất cả các đăng ký được hiển thị trong chế độ hiện hành. Ví dụ, nếu chế độ là SVC, sau đó R0-R12, R13_SVC, R14_SVC và R15 được sử dụng. Tuy nhiên, nếu ^ là quy định, tất cả các thanh ghi lưu được lấy từ ngân hàng người dùng, tức là hướng dẫn này
STMFD sp, {R0-R15} ^
sẽ gây ra R0-R15, tất cả từ ngân hàng người dùng đăng ký, để được cứu.
Lưu ý rằng nếu ghi lại được quy định trong một hướng dẫn như vậy, sau đó ghi chỉ số được cập nhật sẽ được viết lại cho ngân hàng người dùng thay vì các ngân hàng chế độ giám sát thích hợp. Vì vậy, bạn không nên chỉ định ghi lại cùng với ^ khi sử dụng STM hướng dẫn từ một chế độ giám sát.
nhóm bốn
Sự khác biệt duy nhất giữa việc sử dụng các chi nhánh ở người sử dụng và giám sát chế độ là, trong BL , đăng ký liên kết (R14) phù hợp với chế độ hiện tại được sử dụng thay vì sử dụng R14. Đây là như mong đợi, và không đòi hỏi bất kỳ sự chú ý đặc biệt.
nhóm năm
Khi một lệnh SWI được thực thi, địa chỉ trả về và cờ được lưu trữ trong R14_SVC. Điều này có nghĩa rằng khi SWI được sử dụng từ bất kỳ chế độ khác hơn SVC, không có biện pháp phòng ngừa cần thiết để tiết kiệm R14 trước SWI được gọi. Tuy nhiên, trong chế độ SVC, thực hiện một SWI sẽ ghi đè lên các nội dung hiện tại của R14_SVC. Do đó, thanh ghi này cần được bảo tồn qua các cuộc gọi đến SWI nếu nội dung của nó là rất quan trọng.
Để minh họa điều này, giả sử một thói quen viết để thực hiện trong chế độ người dùng có một cuộc gọi đến thói quen ghi nhân vật của hệ điều hành, nhưng không có cuộc gọi chương trình con khác. Nó có thể được viết như sau:
; làm một số công cụ
SWI WriteC; In char, R14_USR được bảo tồn
; làm một số chi tiết cụ
MOV pc, liên kết; Return sử dụng R14
Nếu thường trình tương tự được thực hiện trong chế độ SVC, các SWI WriteC sẽ gây ra các địa chỉ trở lại trong R14_SVC được viết lại. Những thói quen sẽ phải được mã hóa do đó để làm việc một cách chính xác:
! STMFD (sp), {link}; Lưu địa chỉ trả lại
; làm một số công cụ
SWI WriteC; In char, R14_SVC là tham nhũng
; làm một số nhiều thứ
! LDMFD (sp), {} pc; Return sử dụng địa chỉ xếp chồng lên nhau
bản đồ bộ nhớ
Chúng tôi đã đề cập trước đó rằng một số hệ thống ARM được trang bị với một bộ điều khiển bộ nhớ (MEMC) trong đó, trong số những thứ khác, chuyển địa chỉ phát ra từ CPU, thực hiện một ánh xạ từ địa chỉ logic sang địa chỉ vật lý. Nó cũng kiểm soát quyền truy cập vào các thiết bị khác, ví dụ ROM và I / O. MEMC kiểm soát truy cập của các bộ phận khác nhau của bản đồ bộ nhớ, hạn chế các hoạt động có thể được thực hiện trong chế độ người dùng. Các tín hiệu SPVMD sản xuất bởi CPU ARM kể MEMC nếu ARM là trong chế độ giám sát hay không. Điều này cho phép MEMC để thực thi một "chế độ giám sát chỉ 'quy tắc cho các địa điểm nhất định.
Nhớ lại rằng các byte 32M dưới cùng của không gian địa chỉ được phân bổ cho bộ nhớ RAM "logic". Này được chia thành các trang từ 8K và 32K byte, lên đến 128 trong số họ có mặt. Mỗi trang có một "mức độ bảo vệ 'liên kết với nó. Có bốn cấp độ, 0 là tiếp cận nhất, và 3 được những hạn chế nhất. Khi bộ xử lý là trong chế độ người dùng, các trang có mức độ bảo vệ 0 có thể được đọc và viết; trang ở cấp độ 1 có thể được đọc chỉ, và mức độ 2 và 3 là không thể tiếp cận. Trong chế độ giám sát, các cấp có thể được đọc hoặc viết không hạn chế. (Ngoài ra còn là một hình thức đặc biệt của chế độ người dùng, kiểm soát bởi MEMC, gọi là chế độ hệ điều hành. Điều này cho phép đọc / ghi của mức 0 và 1 và đọc-chỉ các cấp độ 2 và 3.)
Các byte 16M tiếp theo của bản đồ bộ nhớ được dành riêng cho bộ nhớ RAM vật lý. Này chỉ có trong chế độ giám sát. Các byte 16 triệu đầu được phân chia giữa ROM và I / O. ROM có thể được đọc trong bất kỳ chế độ xử lý, nhưng truy cập vào một số địa điểm I / O (ví dụ như những người mà kiểm soát hành vi của bản thân MEMC) được giới hạn chế độ giám sát.
Khi một nỗ lực được thực hiện để đọc hoặc viết một khu vực của bộ nhớ mà là không thể tiếp cận trong các chế độ hiện hành, một "ngoại lệ" xảy ra. Điều này làm cho bộ vi xử lý để vào chế độ SVC và nhảy đến một vị trí được xác định trước. Có nhiều cách khác, trong đó chế độ người dùng có thể được để lại, và chúng được mô tả tất cả các bên dưới. Hãy nhớ rằng, mặc dù, rằng các chương trình bộ nhớ được mô tả trong phần này chỉ đề cập đến hệ thống mà sử dụng Acorn MEMC, và có thể là khác nhau trên hệ thống của bạn.
7.2 Bỏ chế độ người dùng
Có một số trường hợp trong đó một chương trình thực hiện trong chế độ người dùng có thể nhập một trong các chế độ khác. Đây có thể được chia gần như thành hai nhóm, trường hợp ngoại lệ và ngắt. Một ngoại lệ xảy ra bởi vì một chương trình đã cố gắng thực hiện một hoạt động mà là bất hợp pháp cho các chế độ hiện hành. Ví dụ, nó có thể cố gắng để truy cập vào một vị trí bộ nhớ được bảo vệ, hoặc thực hiện một lệnh bất hợp pháp.
Ngắt Mặt khác, xảy ra một cách độc lập của các hành động của chương trình, và được khởi xướng bởi một số thiết bị bên ngoài tín hiệu CPU. Ngắt được gọi là sự kiện không đồng bộ, bởi vì thời gian của họ không có mối quan hệ với những gì xảy ra trong chương trình.
các vectơ
Khi một ngoại lệ hoặc gián đoạn xảy ra, bộ xử lý dừng lại những gì nó đang làm gì và đi vào một trong những chế độ không sử dụng. Nó tiết kiệm cho các giá trị hiện tại của R15 vào sổ đăng ký liên kết thích hợp (R14_FIQ, R14_IRQ hoặc R14_SVC), và sau đó nhảy đến một trong những địa điểm vector mà bắt đầu tại địa chỉ & 0000000. Vị trí này có chứa một B hướng dẫn trang trại đến các thói quen đó sẽ đối phó với sự kiện này.
Có tám vector, tương ứng với tám loại có thể của tình trạng đó gây ra các hoạt động hiện tại bị bỏ rơi. Chúng được liệt kê ở trang sau:
vector
Nguyên nhân
tôi
F
Chế độ
& 0000000thiết lập lại11SVC
& 0000004hướng dẫn xác định1XSVC
& 0000008Phần mềm gián đoạn (SWI)1XSVC
& 000000CAbort (prefetch)1XSVC
& 0000010Abort (dữ liệu)1XSVC
& 0000014địa chỉ ngoại lệ1XSVC
& 0000018IRQ1XIRQ
& 000001CFIQ11FIQ
Bảng này cho thấy địa chỉ của vector, những gì gây ra nhảy ở đó, làm thế nào các IRQ và FIQ vô hiệu hóa cờ bị ảnh hưởng (X có nghĩa là nó không bị ảnh hưởng), và chế độ nào bộ xử lý bước vào. Tất cả các sự kiện vô hiệu IRQ, và RESET và FIQ vô hiệu hóa FIQs quá. Tất cả các sự kiện ngoại trừ các ngắt gây ra chế độ SVC để được nhập vào.
Lưu ý rằng các vector FIQ là người cuối cùng, và bộ vi xử lý không có người sử dụng đặc biệt cho các vị trí ngay sau đó. Điều này có nghĩa rằng các thói quen để xử lý một FIQ có thể được đặt ở vị trí trực tiếp & 1C, thay vì một chi nhánh để nó.
Các phần sau đây mô tả các ngắt và ngoại lệ trong từng chi tiết. Đó là khả năng mà hầu hết người đọc sẽ chỉ là quan tâm đến việc sử dụng các vector ngắt, và có thể là SWI và những người hướng dẫn xác định.Phần còn lại thường được chăm sóc bởi hệ điều hành. Tuy nhiên, mô tả khá chi tiết về những gì xảy ra khi tất cả các vectơ gọi được đưa ra. Nếu không có gì khác, điều này có thể giúp bạn hiểu được mã của hệ thống hệ điều hành sử dụng để đối phó với chúng.
Điều quan trọng là cần lưu ý rằng rất nhiều các thói quen nhập thông qua các vectơ mong đợi để trở lại chương trình sử dụng mà bị gián đoạn. Để làm điều này một cách minh bạch, tất cả các đăng ký của người dùng phải được bảo tồn. Các máy tính và cờ được tự động lưu bất cứ khi nào một vector được gọi, vì vậy chúng có thể dễ dàng được phục hồi. Ngoài ra, tất cả các phương thức giám sát có ít nhất hai thanh ghi riêng các nội dung hay được ẩn từ các chương trình sử dụng. Tuy nhiên, nếu thường xuyên sử dụng bất kỳ đăng ký mà không tin vào chế độ thích hợp, chúng phải được lưu và khôi phục trước khi sử dụng chương trình được khởi động lại. Nếu điều này không được thực hiện, chương trình sẽ tìm thấy nội dung đăng ký thay đổi 'ngẫu nhiên' gây ra lỗi đó là cực kỳ khó khăn để theo dõi.
7.3 Reset
Các tín hiệu RESET được sử dụng để đảm bảo rằng toàn bộ hệ thống ở trong trạng thái được xác định rõ từ đó nó có thể bắt đầu hoạt động. RESET được áp dụng trong hai trường hợp trên hầu hết các hệ thống. Thứ nhất, khi có điện trở đầu tiên áp dụng cho hệ thống, cái gọi là quyền lực trên mạch reset đảm bảo rằng mức độ thích hợp được áp dụng cho các tín hiệu RESET của các mạch tích hợp trong máy tính. Thứ hai, thường có một công tắc hoặc nút mà có thể được sử dụng để Reset hệ thống bằng tay, điều này nên được yêu cầu.
Trên các hệ thống ARM điển hình, chip MEMC, trong đó có các mạch reset điện-on, được sử dụng để kiểm soát các cài đặt lại các phần còn lại của máy tính.
Khi nhận được một tín hiệu RESET, ARM ngay lập tức ngừng thực hiện các hướng dẫn hiện hành. sau đó nó chờ đợi trong trạng thái 'nhàn rỗi' cho đến khi các tín hiệu RESET được gỡ bỏ. Khi điều này xảy ra, các bước sau đây sẽ diễn ra:
  • chế độ SVC được nhập
  • R15 được lưu trong R14_SVC
  • Các FIQ và IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 0000000
Mặc dù chương trình truy cập giá trị khi RESET xảy ra được lưu, nó không phải là khả năng là một nỗ lực sẽ được thực hiện để trở lại chương trình đã được thực hiện. Trong số các lý do khác, ARM có thể là nửa chừng một lệnh dài (ví dụ STM với nhiều đăng ký), do ảnh hưởng của trở lại là không thể đoán trước. Tuy nhiên, địa chỉ và tình trạng bit có thể được in bằng các hệ điều hành như là một phần của thông tin 'gỡ rối'.
hành động có khả năng được đưa vào thiết lập lại là khởi động các thiết bị I / O, lập vị trí bộ nhớ hệ thống, có thể kết thúc với kiểm soát được thông qua một số chương trình chế độ người dùng, ví dụ như BASIC.
7.4 hướng dẫn Không xác định
Không phải tất cả các opcodes 32-bit có thể là ARM có thể gặp phải được xác định. Những người mà không được định nghĩa để làm bất cứ điều gì được 'mắc kẹt' khi ARM cố gắng để giải mã chúng. Khi đó một mã lệnh không được công nhận là gặp phải, sau đây xảy ra:
  • chế độ SVC được nhập
  • R15 được lưu trong R14_SVC
  • IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 0000004
Bộ đếm chương trình được lưu trữ trong R14_SVC giữ địa chỉ của lệnh sau khi một trong đó gây ra những cái bẫy. Những hành động bình thường của các thói quen mà xử lý cái bẫy này là cố gắng để giải mã các hướng dẫn và thực hiện các hoạt động thích hợp. Ví dụ nổi-điểm emulator Acorn IEEE giải thích một loạt các hướng dẫn số học dấu chấm. Sau khi thực hiện điều này, các mô phỏng có thể nhảy trở lại chương trình của người dùng bằng cách sử dụng máy tính được lưu trong R15_SVC.
By bẫy hướng dẫn xác định theo cách này, ARM cho phép mở rộng trong tương lai để hướng dẫn thiết phải được thực hiện một cách minh bạch. Ví dụ, một nhà lắp ráp có thể tạo ra (hiện không được công nhận) mã máy cho các hoạt động khác nhau. Đây sẽ được giải thích trong phần mềm bằng cách sử dụng bẫy hướng dẫn xác định cho bây giờ, nhưng khi một phiên bản mới của ARM (hoặc một bộ đồng xử lý) có sẵn trong đó nhận ra các hướng dẫn, họ sẽ được thực hiện trong phần cứng và các bẫy hướng dẫn xác định sẽ không được kích hoạt. Sự khác biệt duy nhất là người dùng sẽ nhận thấy là tốc độ-up trong các chương trình của mình.
7,5 phần mềm ngắt
Vector này được sử dụng khi một SWI thực hiện lệnh. SWI không thực sự là một ngoại lệ, cũng không phải là một gián đoạn thích hợp kể từ khi nó được bắt đầu đồng bộ của các chương trình. Đó là, tuy nhiên, một tính năng rất hữu ích vì nó cho phép các chương trình dùng để gọi thói quen, thường là một phần của hệ điều hành, được thực hiện trong chế độ giám sát đặc quyền.
Khi một SWI được thực thi, sau xảy ra:
  • chế độ SVC được nhập
  • R15 được lưu trong R14_SVC
  • IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 0000008
Như với các hướng dẫn xác định, giá trị máy tính lưu trữ trong R14_SVC là một trong những từ sau SWI chính nó. Những thói quen gọi qua SWI vector có thể kiểm tra các mã tổ chức tại thấp hơn 24 bit củaSWI hướng dẫn và có những hành động thích hợp. Hầu hết các hệ thống có một bộ được xác định rõ các hoạt động mà có thể truy cập thông qua các SWI s, và mở kết thúc hệ thống cũng cho phép người sử dụng thêm của riêng mình SWI xử lý.
Để quay trở lại chương trình của người sử dụng, các SWI chuyển thói quen R14_SVC vào R15.
7,6 bộ nhớ hủy bỏ và ảo
Một 'hủy bỏ' được gây ra bởi một nỗ lực để truy cập vào một bộ nhớ hoặc I / O vị trí đó là ngoài giới hạn cho chương trình hiện đang được thực hiện. Một hủy bỏ được báo hiệu bởi một số thiết bị bên ngoài với ARM khẳng định một tín hiệu trên đường dây Abort của CPU. Trong một hệ thống điển hình, điều này sẽ được thực hiện bởi các MEMC, kiểm soát tất cả các truy cập vào bộ nhớ và I / O. lý do điển hình cho một abort xảy ra là những nỗ lực để:
  • viết thư cho một chỉ đọc trang RAM logic
  • RAM truy cập vật lý hoặc I / O trong chế độ người dùng
  • truy cập vào một chế độ chỉ giám sát trang hợp lý trong sử dụng hoặc hệ điều hành chế độ
  • truy cập vào một chế độ chỉ OS trang hợp lý trong chế độ người dùng
  • truy cập vào một trang logic mà không có trang vật lý tương ứng
Có hai loại hủy bỏ, mỗi vector riêng của mình. Một trong đó được sử dụng phụ thuộc vào những gì ARM đã cố gắng để làm gì khi truy cập bất hợp pháp đã diễn ra. Nếu nó xảy ra như ARM sắp lấy một lệnh mới, nó được biết đến như là một tiền nạp hủy bỏ. Nếu nó xảy ra trong khi ARM đã cố gắng để tải hoặc lưu trữ dữ liệu trong một LDR / STR / LDM / STM hướng dẫn, nó được biết đến như một hủy bỏ dữ liệu.
Bộ nhớ ảo
Ngoại trừ các lỗi lập trình, đến nay là nguyên nhân phổ biến nhất của một abort là khi hệ thống đang chạy những gì được gọi là bộ nhớ ảo. Khi bộ nhớ ảo được sử dụng, không phải tất cả các chương trình được lưu giữ trong bộ nhớ RAM vật lý cùng một lúc. A (có thể đa số) là một phần của nó được giữ trên một phương tiện lưu trữ lớn nhanh như một đĩa Winchester.
Giả sử một máy tính được trang bị với 1M byte RAM, và nó là cần thiết rằng một chương trình 'thấy' một không gian bộ nhớ của 4M byte. byte 4M Điều này có thể được đặt ở phần đầu tiên của bộ nhớ đồ hợp lý, từ địa chỉ & 0000000 để & 003FFFFF. Trên đĩa Winchester, 4M byte được trích lập để đại diện cho không gian địa chỉ ảo của chương trình. Bây giờ như chỉ 1M byte của bộ nhớ RAM có sẵn, chỉ có một phần tư của không gian địa chỉ ảo này có thể được lưu trữ trong bộ nhớ RAM vật lý của máy tính. Trong trang sau biểu đồ, 1M byte đầu tiên của khu vực đĩa được nạp vào bộ nhớ RAM vật lý và ánh xạ vào megabyte thấp nhất của không gian địa chỉ logic.
Miễn là chương trình duy nhất truy cập hướng dẫn và dữ liệu nằm trong
megabyte đầu tiên của không gian địa chỉ logic, một ánh xạ vào bộ nhớ RAM vật lý
sẽ được tìm thấy bởi các MEMC và không có vấn đề sẽ xảy ra. Giả sử, tuy nhiên, các chương trình cố gắng truy cập 2,000,0000 địa chỉ logic. Không có bộ nhớ RAM vật lý tương ứng với địa chỉ logic này, vì vậy MEMC sẽ báo hiệu thực tế này đến bộ xử lý sử dụng dòng hủy bỏ nó.
Chương trình xử lý hủy bỏ đáp ứng một hủy bỏ theo cách sau. Đầu tiên, nó phát hiện ra những gì địa chỉ logic của chương trình đã cố gắng để truy cập. Sau đó phân bổ một trang của bộ nhớ RAM vật lý mà có thể giữ các trang bộ nhớ ảo tương ứng với địa chỉ này. Các dữ liệu thích hợp được nạp từ đĩa, và hợp lý để đồ địa chỉ vật lý trong MEMC điều chỉnh để khi xử lý cố gắng tiếp theo để truy cập vào vị trí mà gây ra việc hủy bỏ, các dữ liệu mới nạp sẽ được truy cập.
Bây giờ khi một trang mới của bộ nhớ ảo được nạp từ đĩa, các nội dung trước đó của các khu vực của bộ nhớ vật lý được sử dụng để lưu trữ nó phải được loại bỏ. Điều này có nghĩa rằng một loạt các địa chỉ mà sử dụng để có thể truy cập tại sẽ gây ra một hủy bỏ nếu một nỗ lực được thực hiện để truy cập chúng. Hơn nữa, nếu trang đó chứa dữ liệu đã thay đổi kể từ khi nó lần đầu tiên được nạp từ đĩa, nó phải được viết lại vào đĩa trước khi trang mới có thể được nạp. Điều này đảm bảo rằng bộ nhớ ảo trên đĩa là phù hợp với những gì đang diễn ra trong bộ nhớ RAM.
Đó là vào các phần mềm trong đó đề với hủy bỏ quyết định trang để loại bỏ khi lấy một trang mới từ đĩa, và liệu nó cần phải được viết ra trước khi nó bị phá hủy bởi các dữ liệu mới. (Nếu trang tái phân bổ có chứa một phần của chương trình, hoặc chỉ đọc dữ liệu, sau đó nó không phải là cần thiết để ghi nó vào đĩa đầu tiên, kể từ khi các bản sao đã được lưu trữ ở đó sẽ được chính xác.) Có một số thuật toán đó là sử dụng để quyết định cách thức mà trang này được cấp lại trong phản ứng để hủy bỏ (thường được gọi là 'lỗi trang'). Ví dụ, cái gọi là thuật toán 'gần đây nhất được sử dụng' sẽ sử dụng các trang mà không được truy cập trong thời gian dài nhất của thời gian, dựa trên giả định rằng nó không phải là khả năng được yêu cầu trong tương lai gần.
tất cả điều này có thể có vẻ cực kỳ chậm và nặng nề, nhưng trong thực tế các hệ thống bộ nhớ ảo theo nhu cầu paged làm việc tốt vì những lý do sau đây. Hủy bỏ là không thường xuyên như các chương trình dành nhiều thời gian của họ trong vòng nhỏ. hệ thống ARM sử dụng MEMC có một kích thước trang khá lớn (giữa 8K và 32K) do đó, một chương trình có thể dành nhiều thời gian của mình trong một trang duy nhất mà không gặp phải "mất tích" RAM. Ngoài ra, bộ nhớ ảo thường được sử dụng trên các hệ thống đa tác vụ, có nhiều hơn một chương trình chạy cùng một lúc bằng cách chia sẻ các CPU cho các khe thời gian ngắn. Trong khi việc chuyển tương đối chậm của dữ liệu giữa RAM và đĩa đang diễn ra, một chương trình khác có thể được sử dụng CPU. Điều này có nghĩa rằng mặc dù một chương trình có thể được tổ chức chờ đợi cho một phân đoạn của không gian địa chỉ ảo của nó được nạp từ đĩa, một chương trình khác mà chương trình và dữ liệu trong bộ nhớ RAM vật lý có thể tiến hành.
Các chủ đề của bộ nhớ ảo là một phức tạp mà được bao phủ trong một loạt các cuốn sách văn bản. Một trong những tốt là 'Các thiết kế của các hệ điều hành Unix' bởi MJ Bạch, xuất bản bởi Prentice-Hall.
Pre-fetch hủy bỏ
Khi tìm nạp trước abort xảy ra, ARM đã hoàn tất các hướng dẫn (s) trước khi một trong đó 'nhi. Khi hướng dẫn này đến để được thực thi, nó sẽ bị bỏ qua và sau đây xảy ra:
  • chế độ SVC được nhập
  • R15 được lưu trong R14_SVC
  • IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 000000C
Các giá trị PC lưu là một trong những hướng dẫn sau khi đã gây ra những hủy bỏ. Những thói quen mà đề với các tìm nạp trước hủy bỏ phải thực hiện một số hành động, như đã nêu ở trên, mà sẽ cho phép các lệnh được tái cố gắng và lần này thành công.
Một single-tasking đơn giản (một chương trình cùng một lúc) hệ điều hành chạy bộ nhớ ảo có thể thực hiện các bước sau đây về tiếp nhận một tìm nạp trước hủy bỏ:
  • xác minh rằng nó là một vấn đề thiếu trang (không truy cập vi phạm)
  • cho phép IRQ
  • tìm thấy một trang phù hợp bộ nhớ RAM vật lý
  • tải các trang tương ứng với địa chỉ logic cần thiết
  • thiết lập MEMC để lập bản đồ vật lý để trang logic
  • thử lại các hướng dẫn bằng cách nhảy đến R14_SVC trừ 4
Điều quan trọng là để kích hoạt lại IRQ để phục vụ bình thường của các ngắt không bị xáo trộn trong khi các trang mới đang được nạp vào. Bước thứ ba có thể tự nó là khá tham gia, vì một quyết định đã được thực hiện về những trang vật lý phù hợp cho tải trong phần mới của chương trình và xem nội dung hiện tại của nó phải được lưu lại, như đã đề cập ở trên.
dữ liệu hủy bỏ
Một hủy bỏ dữ liệu là một chút phức tạp hơn, kể từ ARM là nửa chừng chỉ đạo của thời gian hủy bỏ xảy ra. Nếu chỉ lệnh là một LDR hoặc STR , nó bị bỏ rơi và không có đăng ký được thay đổi (đặc biệt, đăng ký cơ bản là không thay đổi, ngay cả khi ghi lại được chỉ định).
Nếu chỉ lệnh là một LDM hoặc STM , hướng dẫn hoàn thành (mặc dù không có đăng ký được thay đổi trong một LDM ), và đăng ký cơ sở được cập nhật nếu ghi lại được kích hoạt. Lưu ý rằng nếu đăng ký cơ sở đã được đưa vào danh sách đăng ký để được nạp, nó không phải là quá viết như bình thường sẽ là trường hợp. (Có thể được viết lại) giá trị được giữ nguyên vẹn. Sau đó:
  • chế độ SVC được nhập
  • R15 được lưu trong R14_SVC
  • IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 0000010
Lần này, R14_SVC được thiết lập để hướng dẫn hai từ sau khi bị phá thai một, không phải một. Những thói quen xử lý hủy bỏ phải có những hành động sau đây. Nó phải kiểm tra hướng dẫn bị phá để tìm ra các loại và địa phương, và lùi ảnh hưởng của bất kỳ điều chỉnh đăng ký cơ sở do viết lại. Nó có thể lấy được địa chỉ của dữ liệu mà gây ra việc hủy bỏ để xảy ra từ các cơ sở đăng ký và thực hiện một quá trình phân trang tương tự như mô tả cho tìm nạp trước hủy bỏ. Nó có thể sau đó lại thực hiện lệnh, bằng cách nhảy để giải quyết R14_SVC trừ 8 bằng một lệnh chẳng hạn như:
pc SUB, liên kết, # 8
Thời gian để giải mã các hướng dẫn mà gây ra việc hủy bỏ và thực hiện các hoạt động thích hợp thay đổi tùy theo loại hướng dẫn, số lượng đăng ký (đối với LDM / STM ), loại chỉ mục (cho LDR / STR ) và liệu ghi lại được kích hoạt. Các tính toán được thực hiện từ kết quả đang hủy bỏ-xử lý điển hình trong thời gian từ 20 giây + 41n-chu kỳ cho các trường hợp tốt nhất và 121 s + 36 n-chu cho trường hợp xấu nhất. Trên hệ thống 8MHz ARM, các dịch vào khoảng 13.4us và 27.1us tương ứng.
7,7 Địa chỉ ngoại lệ
Một ngoại lệ địa chỉ xảy ra nếu một nỗ lực được thực hiện để truy cập vào một vị trí bên ngoài phạm vi của bus địa chỉ 26-bit của ARM. Điều này có thể được gây ra bởi địa chỉ hiệu dụng (cơ sở cộng với bất kỳ offset) của một LDR / STR hướng dẫn vượt quá giá trị & 3FFFFFF, hoặc nếu đăng ký cơ sở trong một LDM / STM hướng dẫn có chứa một giá trị lớn hơn này.
Lưu ý rằng trong các trường hợp sau, trường hợp ngoại lệ sẽ chỉ xảy ra nếu đăng ký cơ sở là bất hợp pháp khi các hướng dẫn bắt đầu thực hiện. Nếu đó là pháp lý để chuyển dữ liệu đầu tiên, và sau đó vượt quá & 3FFFFFF đã được tự động tăng, không có ngoại lệ xảy ra. Thay vào đó các địa chỉ "kết thúc tốt đẹp tròn 'và tải hoặc các cửa hàng tiếp theo sẽ diễn ra trong vài địa điểm đầu tiên của bản đồ bộ nhớ.
Không giống như các aborts mô tả ở trên, ngoại trừ địa chỉ được phát hiện trong nội bộ của ARM, và không phải bởi sự khẳng định của một tín hiệu của một số thiết bị bên ngoài. Giống như dữ liệu hủy bỏ, tuy nhiên, các hướng dẫn không chính xác là bị bỏ rơi hoặc 'hoàn thành' như mô tả ở trên.
Ngày phát hiện các lỗi địa chỉ, ARM gây ra những điều sau đây sẽ diễn ra:
  • chế độ SVC được nhập
  • R15 được lưu trong R14_SVC
  • IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 0000014
Nếu nó là cần thiết rằng các hướng dẫn được tái bắt đầu sau khi một ngoại lệ địa chỉ đã được tạo ra, các địa chỉ trong R14_SVC trừ 4 có thể được sử dụng. Tuy nhiên, thường là không nhiều điểm và hành động thông thường là để nhập một chương trình 'màn hình' mà có thể được sử dụng để thử để chẩn đoán những gì đã đi sai.
7.8 IRQ
IRQ là viết tắt của Interrupt yêu cầu, và là một trong hai đầu vào ngắt trên ARM. Một tín hiệu thiết bị bên ngoài với ARM mà nó đòi hỏi sự chú ý bằng cách khẳng định dòng IRQ. Vào cuối thực hiện mọi hướng dẫn, kiểm tra ARM cho sự hiện diện của một IRQ. Nếu một yêu cầu ngắt đã được thực hiện, và IRQ được kích hoạt, sau đây xảy ra:
  • chế độ IRQ được nhập
  • R15 được lưu trong R14_IRQ
  • IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 0000018
Nếu IRQ bị vô hiệu hóa, bởi vì các bit IRQ vô hiệu hóa trong đăng ký hộ được thiết lập, các ngắt được bỏ qua và tiếp tục xử lý ARM bình thường của nó. Lưu ý rằng trên bắt đầu một thói quen IRQ, các Stes ARM IRQ, vì vậy IRQ hơn nữa là người khuyết tật.
Những thói quen xử lý ngắt phải có những hành động thích hợp, sẽ dẫn đến việc thiết bị gián đoạn loại bỏ yêu cầu của nó. Ví dụ, một thiết bị truyền thông nối tiếp có thể gây ra một IRQ khi một byte có sẵn để đọc. Những thói quen IRQ, khi phát hiện thiết bị nào gây ra gián đoạn, sẽ đọc các byte dữ liệu được trình bày bởi các chip nối tiếp, và đệm nó ở đâu đó để sau này đọc bởi một chương trình. Các hành động đọc một byte từ chip nối tiếp thường thông báo cho thiết bị IRQ của nó đã được phục vụ và nó 'giảm' yêu cầu ngắt.
Trên ARM, các bit vô hiệu hóa ngắt và bit chế độ xử lý vào sổ đăng ký tình trạng không thể được thay đổi trong chế độ người dùng. Điều này có nghĩa rằng chương trình chế độ sử dụng thường thực hiện với cả hai loại ngắt được kích hoạt, do đó công việc 'nền' cho việc phục vụ các thiết bị gián đoạn có thể xảy ra. Tuy nhiên, đôi khi nó là mong muốn để vô hiệu hóa tất cả các ngắt, và có thường là một SWI cuộc gọi cung cấp bởi hệ điều hành cho phép các mặt nạ ngắt phải được thay đổi bởi các chương trình chế độ người dùng.
Các đoạn sau đây tham khảo các văn bản của cả hai thói quen IRQ và FIQ.
ngắt phải nhanh chóng thực hiện, bởi vì trong khi ngắt đang được phục vụ, các chương trình chính không thể tiến bộ. Acorn IOC (I / O điều khiển) chip cung cấp một số hỗ trợ để đối phó với các ngắt mà làm cho chế biến của họ hiệu quả hơn. Ví dụ, nó cung cấp một số đầu vào IRQ để nhiều thiết bị có thể chia sẻ dòng IRQ của ARM. Các đầu vào có thể được lựa chọn bật / tắt, và một thanh ghi trong IOC chưa đọc để tìm những thiết bị mà bất cứ lúc nào cần bảo dưỡng.
Một thói quen ngắt thường có những hạn chế đối với những gì nó có thể làm. Ví dụ, nó là không mong muốn cho một xử lý ngắt để kích hoạt lại ngắt. Nếu có, một IRQ có thể đi cùng mà nguyên nhân xử lý để được gọi là một lần nữa, tức là thường xuyên được tái nhập vào.
Có thể viết mã mà có thể đối phó với điều này, và thói quen như vậy được gọi là tái ký dự thi. Trong số những thứ khác, góc lõm thói quen không phải sử dụng bất kỳ không gian làm việc tuyệt đối và phải bảo toàn nội dung của tất cả các đăng ký mà họ sử dụng (trong đó tất cả các ngắt thói quen nên làm anyway). Hạn chế đầu tiên có nghĩa là ngăn xếp nên được sử dụng cho tất cả các yêu cầu về không gian làm việc của các thói quen, bao gồm tiết kiệm trong sổ đăng ký. Điều này đảm bảo rằng mỗi phiên bản lại vào của hàm này sẽ có khu vực làm việc riêng của mình.
Thật không may, nó thường được tìm thấy rằng hệ điều hành thói quen là không thể để viết trong một thời trang tái ký dự thi. Điều này có nghĩa rằng nó không thể sử dụng rất nhiều thói quen hệ điều hành từ bên trong mã gián đoạn dịch vụ. Một ví dụ phổ biến là để thấy rằng thói quen nhân vật đầu ra của máy được thực hiện với các ngắt được kích hoạt và không được tái ký dự thi. (Lý do là trong một số trường hợp, ví dụ như xóa màn hình, các thói quen đầu ra có thể mất vài giây, hoặc thậm chí vài giây, và nó sẽ là không khôn ngoan để vô hiệu hóa ngắt lâu như thế này.)
Bạn nên tham khảo tài liệu hướng dẫn của hệ thống của bạn để tìm ra những hạn chế chính xác về thói quen sử dụng hệ điều hành từ bên trong mã gián đoạn dịch vụ.
ngắt cũng nên cẩn thận không làm hư bộ nhớ có thể được sử dụng bởi các chương trình foreground '. Sử dụng ngăn xếp cho tất cả các không gian làm việc là một cách để tránh vấn đề này. Tuy nhiên, điều này không phải lúc nào cũng có thể (ví dụ, nếu thường xuyên IRQ có để truy cập vào một bộ đệm được sử dụng bởi các chương trình foreground). Bạn nên luôn luôn cố gắng để hạn chế việc chia sẻ các địa điểm bằng ngắt và không ngắt mã để một mức tối thiểu. Nó là rất khó để theo dõi các lỗi đó là do địa điểm bị thay đổi bởi một cái gì đó bên ngoài sự kiểm soát của các chương trình được xem xét.
Để trở lại chương trình sử dụng, các thói quen IRQ trừ 4 từ các máy tính được lưu trong R14_IRQ và những nơi này trong R15. Lưu ý rằng phiên bản lưu này sẽ có IRQ vô hiệu hóa chút rõ ràng, vì vậy cũng như trở về chương trình chính, việc chuyển nhượng gây IRQ được tái kích hoạt.
7,9 FIQ
FIQ đứng cho Fast Interrupt Request. Một tín hiệu đầu vào FIQ của ARM gây chế độ FIQ được nhập vào, nếu được kích hoạt. Như với IRQ, kiểm tra ARM vào cuối mỗi lệnh cho một FIQ. Nếu cả hai loại ngắt xảy ra cùng một lúc, các FIQ được xử lý đầu tiên. Ở khía cạnh này, nó có một ưu tiên cao hơn IRQ. Về ứng phó với một FIQ, ARM khởi hành động sau đây:
  • chế độ FIQ được nhập
  • R15 được lưu trong R14_FIQ
  • Các FIQ và IRQ vô hiệu hóa bit được thiết lập
  • Các máy tính được thiết lập để giải quyết & 000001C
Chú ý rằng một FIQ vô hiệu hóa FIQs và IRQ tiếp theo, vì vậy mà trong khi một FIQ thể làm gián đoạn một IRQ, ngược lại là không đúng sự thật (trừ khi xử lý FIQ cho phép một cách rõ ràng IRQ).
Thuật ngữ 'nhanh' cho loại ngắt được bắt nguồn từ một vài thuộc tính của nó. Thứ nhất, chế độ FIQ có đăng ký nhiều hơn "tư nhân" hơn so với chế độ giám sát khác. Điều này có nghĩa rằng để cho một thói quen FIQ để làm công việc của nó, nó phải dành ít thời gian bảo quản bất kỳ người sử dụng đăng ký mà nó sử dụng hơn một thói quen IRQ sẽ. Thật vậy, nó được phổ biến cho một thói quen FIQ không sử dụng bất kỳ đăng ký sử dụng ở tất cả, những người tin là đủ. Thứ hai, các vector FIQ đã khéo léo làm người cuối cùng. Điều này có nghĩa rằng không có cần thiết phải có một chỉ dẫn chi nhánh tại địa chỉ & 000001C. Thay vào đó, thói quen tự nó có thể bắt đầu ở đó, tiết kiệm micro có giá trị (hoặc các phần phân đoạn của chúng).
Để trở lại chương trình sử dụng, các thói quen FIQ trừ 4 từ các máy tính được lưu trong R14_FIQ và những nơi này trong R15 (tức là máy tính). Lưu ý rằng phiên bản lưu này sẽ có FIQ vô hiệu hóa chút rõ ràng, vì vậy cũng như trở lại với chương trình bị gián đoạn, việc chuyển nhượng gây FIQs được tái kích hoạt.

1 Comment:

Làm sao để đọc dữ liệu từ R0 đến R9 ra ô nhớ ạ? em cảm ơn!

Đăng nhận xét

Thank you for your comments!