Khác biệt giữa bản sửa đổi của “Kiến trúc Universal”

Bách khoa toàn thư mở Wikipedia
Nội dung được xóa Nội dung được thêm vào
Panfider (thảo luận | đóng góp)
Không có tóm lược sửa đổi
Panfider (thảo luận | đóng góp)
Dòng 174: Dòng 174:
| 70 || SYSRET || sysret || 11111111111111111 || Trở về
| 70 || SYSRET || sysret || 11111111111111111 || Trở về
|}
|}
{| class="wikitable"
|-
! STT !! Tên !! bit !! Mô tả
|-
| 1 || z/e || 000 || Bằng
|-
| 2 || nz/ne || 001 || Không bằng
|-
| 3 || cz/a || 010 || Lớn hơn
|-
| 4 || c/b || 011 || Nhỏ hơn
|-
| 5 || znc/ae || 100 || Lớn hơn hoặc bằng
|-
| 6 || be || 101 || Nhỏ hơn hoặc bằng
|-
| 7 || od || 110 || Trật tự
|-
| 8 || un || 111 || Không trật tự
|}

== Trình biên dịch ==
== Trình biên dịch ==



Phiên bản lúc 04:05, ngày 14 tháng 10 năm 2010

Kiến trúc Universal Architecture là kiến trúc 128 bit của bộ vi xử lý UAx. Kiến trúc này là kiến trúc hoàn toàn 128 bit ngay từ đầu khi thiết kế. Mục tiêu của kiến trúc này là nền tảng tính toán cho hầu hết tất cả thiết bị.
UAx cũng có thể dành cho các thiết bị nhúng, hoặc máy tính cầm tay.

Tổng quát

UA có 128 thanh ghi đa dụng 128 bit dành cho tính số nguyên. Số nguyên có thể là số âm hoặc không âm. Vì độ dài 128 bit khá lớn nên nó cũng có tập lệnh cho tính toán vector cho số nguyên. Ví dụ để tính phép tính cộng cho 4 số nguyên, nó cộng và dư carry của mỗi số ra thanh ghi da dụng khác tại vị trí dư bit
Ngoài ra UA cũng có 128 thanh ghi chấm động 128 bit.

127                      63            31            0
[-------------------------|------------|-------------] 

UA có một thanh ghi cờ có độ dài 128 bit gọi là uflag. Nó dùng kèm với các chỉ lệnh có điều kiện như CMOVcc, Jcc.
Mặc dù kích thước vi lệnh thay đổi từ 1 byte đến 10 bytes nhưng nó được thiết kế rất dễ giải mã. Điều này làm cho nó có sự lai giữa RISCCISC, nên cực kì linh động trong mã hoá vi lệnh.

Thực hiện

Hiện tại thiết kế này chưa có bản ngôn ngữ mô tả phần cứng và cũng chưa có phiên bản hiện thực.

Kiến trúc

Chuơng trình

Không gian địa chỉ bộ nhớ là không gian tuyến tính, nghĩa là các dãy địa chỉ liên tục 128 bit địa chỉ cho mỗi byte bộ nhớ. Do đó UA có thể có lên đến 340,282,366,920,938,463,463,374,607,431,768,211,456 bytes. Vì địa chỉ khác lớn cho một chuơng trình trong bộ nhớ, nên không gian này được chia ra thành đoạn. Một chuơng trình có thể có tới 4 đoạn, đoạn mã,2 đoạn dữ liệu,đoạn ngăn xếp. Thanh ghi này có chiều dài 64 bit.Bit thứ 63 là bit phân biệt bit mode hạt nhân hay ứng dụng.

+------------------------------------------------+ 
+ S + +
+------------------------------------------------+

Thanh ghi đoạn này chỉ đến mảng cấu trúc mô tả đoạn.

Ngắt

Kiến trúc UA cho phép tới 8 bit ngắt tức 256 ngắt, trong đó 32 ngắt đầu tiên được sử dụng cho bộ vi xử lý. Có nhiều tín hiệu ngắt, một số nguồn của ngắt :

  1. Vi lệnh, do một số vi lệnh sinh ra (syscall)
  2. Ngắt từ thiết bị bên ngoài
  3. Ngắt do bộ định thời
  4. Ngắt liên-nhân

Bộ vi xử lý thường được tích hợp bộ định thời (có thể lập trình được ) để thực hiện việc ngắt từ các ứng dụng và ngắt liên nhân cho đa xử lý đối xứng. Hệ điều hành sử dụng cơ chế này để thực hiện đa luồng và đa tác vụ. Việc điều khiển ngắt được thực hiện qua cấu trúc dữ liệu và các thanh ghi trong bộ vi xử lý. Vi lệnh mov dùng để sao tải từ bộ nhớ đến thanh ghi điều khiển ngắt và ngược lại.

Vi lệnh UA

Mã vi lệnh của UA không cố định vì thế khá tốt cho nén mã. Điều này có thể làm được thông qua trình biên dịch. Chiều dài tối đa của mã lệnh là 4 bytes , trường hợp đặc biệt là 10 bytes. Các kiểu mã hoá vi lệnh:

kiểu 3 toán hạng

Kiểu này có 3 bit mode và 3 toán hạng, kiểu này phổ dụng nhất trong UA. Tuỳ theo mức độ thi công mà mode có thể. Tuy nhiên mode 000 là mode của thanh ghi-thanh ghi. Kiểu này không mã hoá được displacement như x86 vì bị đóng trong 4 bytes.

 8 bit     3 bit  7 bit   7 bit    7 bit
+--------+------+-------+--------+--------+
+ inst + mode + dst + rop1 + rop2 +
+--------+------+-------+--------+--------+

Kiểu 2 toán hạng

Chiều dài cũng 4 bytes

  8 bit    4bit  3 bit     3bit   7 bit r   7bit r  
+--------+------+-------+-------+--------+---------+
+ inst + 0000 + mode + size + op1 + op2 +
+--------+------+-------+-------+--------+---------+

Kiểu 1 toán hạng

Chiều dài 2 bytes

  8 bit  1bit    7 bit 
+--------+----+----------+
+ inst + M + op1 +
+--------+----+----------+

Kiểu này dành cho lệnh jmp hoặc call và các lệnh chỉ có một toán hạng. Bit M dùng để xác dịnh thanh ghi hay địa chỉ. Điều này cũng không cần thiết cho lệnh jmp và call.

Một byte

Kiểu này có thể không có toán hạng hoặc được bao hàm vi lệnh.

+---------------+
+  instruction  +
+---------------+

Kiểu đặc biệt

Kiểu này dành cho giá trị tức thời mã trong vi lệnh. Vì kích thước giá trị tức thời thay đổi từ 2,4,8 bytes nên độ dài của vi lệnh từ 4,6,10 bytes.

  8 bit     1   7 bit  
+---------+---+-------+--------------------+ 
+ inst + M + op1 + 16 bit immediate +
+---------+---+-------+--------------------+


+---------+---+-------+-------------------------------------------------+ 
+ inst + M + op1 + 32 bit immediate +
+---------+---+-------+-------------------------------------------------+

Bộ tập lệnh

Lệnh tính toán có thể tương tác trực tiếp với bộ nhớ mà không cần phải tải/lưu. Danh sách bộ tập lệnh :

  • Tính toán
  1. ADD
  2. ADDC
  3. SUB
  4. SUBC
  5. MUL
  6. DIV
  7. NOT
  8. NEG
  9. SHL, SHR
  10. SSL, SSR
  11. ROL, ROR, RSL, RSR
  12. AND
  13. OR
  14. XOR
  15. CMP So sánh 2 số nguyên
  16. TEST
  17. POPCNT
  • Di chuyển dữ liệu
  1. MOV Di chuyển từ thanh ghi điều khiển <=> thanh ghi đa dụng
  2. CMOVcc Di chuyển có điều kiện giữa các thanh ghi
  3. LDF/STF tải/lưu thanh ghi uflag
  4. XCHG Hoán chuyển 2 toán hạng
  5. CALL gọi hàm, thủ tục
  6. RET Trở về nơi gọi
  7. JI nhảy vô điều kiện
  8. JIcc nhảy có điều kiện
  9. JR nhảy tới [R]
  10. SYSCALL
  11. SYSRET
  12. IDLE Nghỉ

Bảng mã opcode

Các toán tử của vi lệnh là thanh ghi, tuy nhiên chỉ được một trong 2 hoặc 3. Dấu ghạch ngang '-' là thay đổi tuỳ thuộc vào câu lệnh. Mỗi opcode là tương ứng cho một lệnh của hợp ngữ điều này tạo điều kiện cho lập trình viên dễ hiểu hơn khi lập trình.

STT Tên Hợp ngữ Mã hoá Mô tả
1 ADD add %rd,%rs,%rt 00000001 ---ddddddsssssssttttttt Cộng, %rd=%rs+%rt
2 ADC adc %rd,%rs,%rt 00000010 ---ddddddsssssssttttttt Cộng với carry
2 ADDU addu %rd,%rs,%rt 00000011 ---ddddddsssssssttttttt Cộng không dấu, %rd=%rs+%rt
4 ADDIW addiw %rd,$0xfff 00000100 -dddddddiiiiiiiiiiiiiiii Cộng hằng, %rd=%rd+$imm16
5 SUB sub %rd,%rs,%rt 00001000 ---dddddddsssssssttttttt Trừ
6 SUBC subc %rd,%rs,%rt 00001001 ---dddddddsssssssttttttt Trừ mượn carry
7 MUL mul %rn,%rs,%rt 00010000 ---dddddddsssssssttttttt Nhân có dấu %rn+%r{n+1}=%rs+%rt, giá trị trả về 256 bits
8 UMUL smul %rn,%rs,%rt 00010001 ---dddddddsssssssttttttt Nhân không dấu, trả về 256 bits
9 DIV div %rq,%rs,%rt 00001111 ---dddddddsssssssttttttt Chia có dấu, trả về, %rq=%rs/%rt, remainer= %r{q+1)
10 UDIV udiv %rq,%rs,%rt 00001110 ---dddddddsssssssttttttt Chia không dấu , như trên
11 SHR shr %rd,%rs,$imm7 00001111 tttdddddddsssssssiiiiiii rd=rs>>imm7, 3 bits t size
12 SHL shl %rd,%rs,$imm7 00000000 tttdddddddssssssiiiiiii rd=rs<<imm7,
13 ROTR rotr $rd,%rs,$imm7 00000000 tttdddddddssssssiiiiiii rotate right
14 ROTL rotl %rd,%rs,$imm7 00000000 tttdddddddssssssiiiiiii rotate left
15 BCNT bcnt %rd,%rs 00000000 tttdddddddsssssss------- Điếm số bit có trong %rs -> %rd
20 AND and %rd,%rs,%rt 00000000 ---dddddddssssssssttttttt and logic
21 OR or %rd,%rs,%rt 00000000 ---dddddddssssssssttttttt or logic
22 XOR xor %rd,%rs,%rt 00000000 ---dddddddssssssssttttttt xor logic
23 CMP cmp %rd,%rs,%rt 00000000 ---dddddddssssssssttttttt rd = rs cmp rt
30 JI ji $imm24 bit 10000000 imm24 Nhảy vô điều kiện tới 20 bits liên quan
31 JIcc jiCC $imm21 bit 10000001 ccc imm21 Nhảy điều kiện tới 20 bit liên quan, 3 bít điều kiện là c
32 JR jmp (%rr) 10000101 -rrrrrrr Nhảy vô điều kiện tới thanh ghi (%rr),opcode 2 bytes
33 JRcc Jcc %rd,(%rr) 10000111 cccdddddddrrrrrrr 8 bit offset Nhảy có điều kiện tới (%rr)+$offset
60 L{B,W,D,Q} lb 0xoff_t(%rs),%rd 11000000 tt sssssss ddddddd + 8 bit off_t tải 1,2,4,8 byte bộ nhớ (%rs)+offset vào thanh ghi %rd
62 LQD lqd 0xoffset(%rs),%rd 11000001 ---sssssssddddddd + 7 bit off_t tải 16 bytes bộ nhớ (%rs)+offset vào thanh ghi %rd
63 S{B,W,D,Q} Ls 0xoff_t(%rs),%rd 11111111 ---sssssssddddddd + 7 bit off_t Lưu 1,2,3,4,8 bytes từ %rd vào (%rs)+offset
64 SQD sqd 0xoff_t(%rs),%rd 11111111 ---sssssssddddddd + 7 bit off_t Lưu 16 bytes từ %rd vào (%rs)+offset
65 LIR li $imm16,%rd 11111111 -ddddddd + imm16 Lưu imm16 vào %rd
66 ICALL icall $imm24 11111111 + imm24 Gọi tới địa chỉ tuơng đối 24 bit
67 RCALL rcall %rr 11111111 + -ddddddd Gọi tới địa chỉ tuyệt đối trong (%rr),opcode 2 bytes
68 RET ret 11111111 1-------- trở về từ ICALL hoặc RCALL,ret hỗ trợ 2 mode trả về,opcode 2 bytes
69 SYSCALL syscall 11111111 111111111 gọi đến hàm hệ thống,opcode 2 bytes
70 SYSRET sysret 11111111111111111 Trở về
STT Tên bit Mô tả
1 z/e 000 Bằng
2 nz/ne 001 Không bằng
3 cz/a 010 Lớn hơn
4 c/b 011 Nhỏ hơn
5 znc/ae 100 Lớn hơn hoặc bằng
6 be 101 Nhỏ hơn hoặc bằng
7 od 110 Trật tự
8 un 111 Không trật tự

Trình biên dịch

Xem thêm