Khác biệt giữa bản sửa đổi của “Kiến trúc Universal”
Dòng 87: | Dòng 87: | ||
+ JI + imm24 + |
+ JI + imm24 + |
||
+--------+-----------------------------------------+ |
+--------+-----------------------------------------+ |
||
Nhảy vô điều kiện tới địa chỉ tương đối imm24, địa chỉ này là có dấu |
|||
</pre> |
</pre> |
||
Nhảy với 4 bit điều kiện |
Nhảy với 4 bit điều kiện |
||
Dòng 93: | Dòng 94: | ||
+ JIcc + cccc + imm20 + |
+ JIcc + cccc + imm20 + |
||
+--------+------+----------------------------------+ |
+--------+------+----------------------------------+ |
||
Nhảy với 4 bit điều kiện tới imm20,địa chỉ này có dấu |
|||
</pre> |
</pre> |
||
<pre> |
<pre> |
||
+----------+--- |
+----------+-------+----+---------------------------+ |
||
+ |
+ ins + opr + m + imm16 + |
||
+----------+--- |
+----------+-------+----+---------------------------+ |
||
</pre> |
</pre> |
||
* ADDIW,SUBIW,MULIW,DIVIW $imm16,%rd: %rd=imm16 op %rd |
|||
* LIW $imm16,opr : Tải imm16 vào opr,opr có thể là thanh ghi hay địa chỉ bộ nhớ |
|||
=== Kiểu 1 toán hạng === |
=== Kiểu 1 toán hạng === |
Phiên bản lúc 03:31, ngày 16 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 RISC và CISC, 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
Thanh ghi
Kiến trúc UA khá nhiều thanh ghi, bao gồm :
- Thanh ghi đa dụng: R0->R127 (128 bit)
- Thanh ghi cờ : RF dài 128 bit
- Thanh ghi điều khiển : CR0->CR7
- Thanh ghi đặc biệt :
:RC : khi gọi IP->RC,dùng để ret :RS,RR : hỗ trợ cho syscall và sysret
Đối với các thanh ghi đặc biệt như CRn,RC,RS,RR dùng lệnh mov để thay đổi, đây là chỉ lệnh hệ thống nên chỉ phần mềm hệ thống mới thay đổi đượ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.
Cấu trúc mô tả đoạn
127 0
+-------------------------------------------------------------------------+
+ limitation +
+-------------------------------------------------------------------------+
+ type + 112 bit base address +
+-------------------------------------------------------------------------+
Cấu trúc mô tả đoạn bao gồm:
- Địa chỉ cơ sở 112 bit
- 16 bit phân loại đoạn
- Giới hạn của đoạn 128 bit
Cấu trúc địa chỉ đoạn được lưu trong bảng cấu trúc mô tả đoạn. Bảng này được lưu trong bộ nhớ và thanh ghi DTR lưu địa chỉ cơ sở của đoạn. Vì vậy đoạn rỗng là đoạn có tất cả 256 bit đều bằng không.
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 :
- Vi lệnh, do một số vi lệnh sinh ra (syscall)
- Ngắt từ thiết bị bên ngoài
- Ngắt do bộ định thời
- 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 7 bit 7 bit 7 bit 3 bit
+----------+--------+---------+---------+--------+
+ inst + rd + rs + rt + --- +
+----------+--------+---------+---------+--------+
- add,sub,mul,div,and,or,xor
- umul,udiv,uadd,usub
- not,neg
- shl,shr,ssl,ssr,rotl,rotr (shift sử dụng 3 bit để xác định kích thước toán hạng)
các vi lệnh có thể sử dụng 3 bit cuối để xác định điều kiện thực thi
Kiểu 2 toán hạng
Chiều dài cũng 4 bytes
Phù hợp với lệnh cp với 4 bit điều kiện,3 bit mode cho thanh ghi hay địa chỉ bộ nhớ,size qui đinh kích cỡ toán hạng.
8 bit 7 bit r 7bit r cond. mode size +--------+---------+---------+-------+-------+---------+ + inst + rd + rs + cccc + mmm + zzz + +--------+---------+---------+-------+-------+---------+
- LB,LW,LD,LQ,LDQ (%rs),%rd (bit mode dùng để xác định trường hợp r-r hay r-m
- SB,SW,SD,SQ,SDQ %rs,(%rd)
- JRcc *(%rd),%rs,: jump to rd lưu RIP vào %rs theo điều kiện cccc
+----------+---------+---------+----------+----+ + inst + rd + rs + imm8 + -- + +----------+---------+---------+----------+----+
- ADDIB, SUBIB,MULIB,DIVIB :%rd=%rs op imm8
Kiểu tích hợp hằng
Chiều dài 4 bytes
+--------+-----------------------------------------+ + JI + imm24 + +--------+-----------------------------------------+ Nhảy vô điều kiện tới địa chỉ tương đối imm24, địa chỉ này là có dấu
Nhảy với 4 bit điều kiện
+--------+------+----------------------------------+ + JIcc + cccc + imm20 + +--------+------+----------------------------------+ Nhảy với 4 bit điều kiện tới imm20,địa chỉ này có dấu
+----------+-------+----+---------------------------+ + ins + opr + m + imm16 + +----------+-------+----+---------------------------+
- ADDIW,SUBIW,MULIW,DIVIW $imm16,%rd: %rd=imm16 op %rd
- LIW $imm16,opr : Tải imm16 vào opr,opr có thể là thanh ghi hay địa chỉ bộ nhớ
Kiểu 1 toán hạng
Chiều dài 2 bytes
8 bit 1bit 7 bit <br /> +--------+----+----------+ <br /> + inst + M + op1 + <br /> +--------+----+----------+ <br />
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.
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
- ADD
- ADDC
- SUB
- SUBC
- MUL
- DIV
- NOT
- NEG
- SHL, SHR
- SSL, SSR
- ROL, ROR, RSL, RSR
- AND
- OR
- XOR
- CMP So sánh 2 số nguyên
- TEST
- BCNT
- Di chuyển dữ liệu
- MOV Di chuyển từ thanh ghi điều khiển <=> thanh ghi đa dụng
- MOVcc Di chuyển có điều kiện giữa các thanh ghi
- LDF/STF tải/lưu thanh ghi uflag
- XCHG Hoán chuyển 2 toán hạng
- CALL gọi hàm, thủ tục
- RET Trở về nơi gọi
- JI nhảy vô điều kiện
- JIcc nhảy có điều kiện
- JR nhảy tới [R]
- SYSCALL
- SYSRET
- IDLE Nghỉ
Bảng mã opcode
Tập lênh Các toán tử của vi lệnh là thanh ghi với thanh ghi ngoại trừ L/S có thể thanh ghi - bộ nhớ. 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 ---dddddddsssssssttttttt | Cộng, %rd=%rs+%rt |
2 | ADC | adc %rd,%rs,%rt | 00000010 ---dddddddsssssssttttttt | Cộng với carry |
2 | ADDU | addu %rd,%rs,%rt | 00000011 ---dddddddsssssssttttttt | Cộng không dấu, %rd=%rs+%rt |
4 | ADDI | addiw %rd,$0xfff | 00000100 ---dddddddsssssssiiiiiii | Cộng toán tử với hằng 7 bit, %rd=%rs+$imm7 |
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 |
25 | ADDIW | addiw %rd,imm16 | 00000000 -ddddddd + imm16 | Cộng, %rd=%rd+imm16 |
26 | SUBIW | subiw %rd,imm16 | 00000000 -ddddddd + imm16 | Trừ, %rd=%rd+imm16 |
30 | JI | ji $imm24 | 10000000 imm24 | Nhảy vô điều kiện tới 24 bits tuơng đối |
31 | JIcc | JICC $imm20 bit | 10000001 cccc imm20 | Nhảy điều kiện tới 20 bit tuơng đối, 4bit diều kiện |
32 | JR | jmp (%rr) | 10000101 -rrrrrrr | Nhảy vô điều kiện tới thanh ghi (%rr),opcode 2 bytes |
33 | JRcc | JRcc (%rd),%rs | 10000111 ---dddddddssssssscccc--- | Nhảy có điều kiện tới (%rd),lưu IP vào %rs 4 bit điều kiện |
60 | Lzz | lb (%rs),%rd | 11000000 mmmsssssssdddddddcccczzz | tải 1,2,4,8,16 bytes bộ nhớ (%rs) vào thanh ghi %rd |
63 | Szz | Ls (%rs),%rd | 11111111 mmmsssssssdddddddcccczzz | Lưu 1,2,3,4,8,16 bytes từ %rd vào (%rs) |
65 | LIR | li $imm16,%rd | 11111111 Mddddddd + imm16 | Lưu imm16 vào op, bit M là mode của op(thanh ghi hay bộ nhớ) |
66 | CALLI | icall $imm24 | 11111111 + imm24 | Gọi tới địa chỉ tuơng đối 24 bit,IP lưu vào |
67 | CALLR | 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ề từ lời gọi hàm |
80 |
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 điều kiện |