A+1, A+2,Ầ, A+ND

Một phần của tài liệu Giáo tình kiến trúc máy tính của thầy Vũ Đức Lung (Trang 101 - 110)

Gi6 sl chúng c/n ựư'c chuy(n t%i v\ trắ nh%: B, B+1, B+2,Ầ, B+ND1

Và gi6 sl ta dùng l nh máy

MOVE B,A

ự( chuy(n n i dung v\ trắ nh% A ự n v\ trắ nh% B. Máy thi hành l nh này và sau ựó sla l2i thành

MOVE B+1,A+1

rxi thi hành l nh này, rxi l2i sla l2i, l2i thi hànhẦ. cd l+p ựi l+p l2i chu kỳ này cho ự n khi t[t c6 N word ựư'c copy xong.

Bài toán như th ựư'c gi6i quy t t,t nh[t bhng cách sl d?ng m t thanh ghi gZi là thanh ghi chU s, (Index register ) và chúng làm vi c như sau:

Trư&ng ự\a chU s có hai ph/n: m t con s, c a thanh ghi chU s, và m t hhng s,. Trong vắ d? trên n u c6 hai ự\a chU ự.u ựư'c ựánh chU s, sl d?ng m t index register (IR) có chda s, nguyên k, thi l nh MOVE B,A s chuy(n n i dung c a v\ trắ nh% A+k t%i B+k. Bhng cách khSi t2o cho IR giá tr\ ban ự/u 0 và tăng nó lên bhng kắch thư%c m t word m{i khi copy xong m t word, thì chúng ta chU c/n sl d?ng m t thanh ghi cho vòng l+p copy.

Vi c ựánh ự\a chU Index ựư'c sl d?ng r ng rãi ự( ựánh ự\a chU m t trư&ng t2i m t kho6ng cách ựã bi t tắnh tV ựi(m ự/u c a c[u trúc d3 li u ựã cho.

g) đFa chG ngăn x p Ờ Stack

Ể trên ta ựã ựưa ra các tiêu chắ thi t k d2ng thdc l nh, mà m t trong các tiêu chắ là l nh càng ngon càng t,t ự( ti t ki m th&i gian c a CPU và ti t ki m b nh%. Gi%i h2n cu,i cùng c a vi c gi6m chi.u dài ự\a chU là làm cho l nh không còn trư&ng ự\a chU n3a, chU có opcode thôi. Th t ựáng ng2c nhiên là ựi.u này có th( thPc hi n ựư'c bhng cách sl d?ng m t c[u trúc d3 li u có tên là Stack.

Stack chda các ph/n tl d3 li u (words, characters,Ầ) theo tr t tP liên ti p trong b nh%. Ph/n tl ự/u tiên ựư'c ựRy lên Stack ựư'c gZi là nhm S ựáy c a Stack, ph/n tl sau cùng vVa m%i ựRy lên Stack ựư'c gZi là nhm S ựUnh c a Stack. D3 li u ựư'c ựưa vào và l[y ra theo phương thdc vào ự/u tiên thì ra sau cùng FILO (first in last out). M{i Stack ựư'c gon v%i m t thanh ghi hay word b nh% chda ự\a chU ựUnh Stack và ựư'c gZi là con tr} Stack.

Hình 6.9 cho ta th[y các ch ự l p ự\a chU c a d3 li u trong các máy tắnh m%i nh[t và các vắ d? tương dng v%i nó. Trong hình này và trong cu,n sách này chúng ta dùng ph/n mS r ng c a ngôn ng3 l p trình C ự( bi(u dicn các câu l nh. Ể ựây chúng ta dùng m6ng Mem như là tên c a b nh% chắnh và Regs ự( chU Registers. Vắ d? chúng ta ghi Mem[Regs[R1]] ự( chU m t ô nh% có ự\a chU ựư'c ghi trong thanh ghi tên là R1. Trong b6ng này m{i ch ự l p ự\a chU s có m t vắ d? minh hZa ựư'c ựưa ra, ựxng th&i gi6i thắch ý nghĩa c a nó và cho bi t nó ựư'c dùng khi nào.

Chương VI: Ki n trúc b l nh

Hình 6.9. Các ch ự l p ự\a chU thông d?ng

Vắ d? S ch ự l p ự\a chU Ộthanh ghiỢ (Register) ự( làm phép toán c ng hai s, ta dùng câu l nh:

Add R<, R3.

Ch ự Vắ dG DiHn giIi

Chương VI: Ki n trúc b l nh

Câu l nh này cho th[y S ch ự thanh ghi các toán h2ng ự.u là các thanh ghi. Ể ựây R3 và R4 là hai toán h2ng c a phép toán c ng. Ý nghĩa c a câu l nh này có nghĩa là:

Regs[R4] Regs[R4] + Regs[R3]

Tdc là toán h2ng thd nh[t nhm trên thanh ghi có tên R4 và toán h2ng thd hai nhm trên thanh ghi có tên là R3 s ựư'c c ng l2i và k t qu6 cu,i cùng s lưu vào thanh ghi R4. Mũi tên chU ra k t qu6 s ựư'c lưu vào ựâu. đ+c bi t trong câu l nh v%i tham chi u b nh% (Memory indirect) hay trong C ta gZi là v%i con tr} ta th[y S toán h2ng thd hai có thêm d[u Ộ@Ợ ự( chU toán h2ng ựó là m t ự\a chU và S ự\a chU ựó chda m t ự\a chU khác, mà S ự\a chU cu,i này m%i chda giá tr\ th t c a toán h2ng này. Gi6 sl trong câu l nh

Add R1, @(R3)

R1 chda giá tr\ 5, R3 chda giá tr\ 16 thì l nh này có th( ựư'c dicn gi6i rõ hơn như hình 6.9. Trong R3 chda giá tr\ 16 là m t ự\a chU, mà trong ự\a chU này chda giá tr\ 4 là m t ự\a chU khác, mà trong ự\a chU 4 này m%i chda giá tr\ th t 7 c a toán h2ng thd hai. Giá tr\ toán h2ng thd nh[t là 5 c ng v%i giá tr\ toán h2ng thd hai là 7, ựư'c 12 và giá tr\ này l2i ghi trS l2i vào R1.

6.4. B l nh

Trong ph/n này chúng ta s xem xét các lo2i l nh cơ b6n c a các ki n trúc ph/n m.m ựư'c dùng nhi.u nh[t, ự( cho th[y các ki thu t S mdc ngôn ng3 máy dùng ự( thi hành các c[u trúc trong các ngôn ng3 c[p cao. đa s, ngày nay, ự( vi t các chương trình cho máy tắnh, ngư&i ta dùng các ngôn ng3 c[p cao dc hi(u va tiên l'i hơn như C, Pascal, C#,.. Quá trình biên d\ch tV m t ngôn g3 c[p cao sang ngôn ng3 máy ti n hành như trong hình 6.10.

0 4 7 8 12 16 4 20 R1 = 5 R3 = 16 5 7 12

Hình 6.9. L nh Add v%i tham chi u b nh%

Do m{i l nh trong máy tắnh là tu h'p các con s, nh\ phân 0, 1 nên r[t khó nh%. đ( khoc ph?c ựi(m y u này ngư&i ta dùng h'p ng3 Assembly ự( mô t6 các mã l nh nh\ phân bhng các tV ngon gZn mà ta gZi là tc g i nhd mã l0nh. Ngoài ra trong quá trình dicn gi6i chúng ta còn dùng các khái ni m thanh ghi ựắch, thanh ghi nguxn 1, thanh ghi nguxn 2.

T g i nh! mã l nh mô t% ng&n g'n tác v) ph%i thi hành trên các thanh ghi ngu+n, k t qu% ựư c lưu gi. trong thanh ghi ựắch.

M{i l nh c a ngôn ng3 c[p cao ựư'c xây dPng bhng m t l nh mã máy ho+c m t chu{i nhi.u l nh mã máy. L nh nh6y (GOTO) ựư'c thPc hi n bhng các l nh h'p ng3 v. nh6y (JUMP) ho+c l nh h'p ng3 v. vòng. Chúng ta phân bi t l nh nh6y làm cho b ự m chương trình ựư'c n2p vào ự\a chU tuy t ự,i nơi ph6i nh6y ự n (PC ← ự\a chU tuy t ự,i nơi ph6i nh6y t%i), v%i l nh vòng theo (adsbygoogle = window.adsbygoogle || []).push({});

Chương trình bhng ngôn ng3 c[p cao Chương trình bhng h'p ng3 Chương trình bhng ngôn ng3 máy Trình biên d\ch ( Compiler) B d\ch h'p ng3 (Assempler)

Chương VI: Ki n trúc b l nh

ựó ta chU c/n c ng thêm m t ự d&i vào b ự m chương trình (PC ← PC + ự d&i).

Ngoài ra do m{i ki(u ki n trúc máy tắnh có cách mã hóa l nh và tên các câu l nh khác nhau, do ựó trong ph/n này chúng ta chU ự( ý ự n ki(u c[u trúc RISC.

6.4.1. Nhóm l nh truyOn dP li u

Nhóm l nh này nhhm truy.n d3 li u (a word or a block) tV m t nguxn có th( là thanh ghi ho+c b nh% ự n m t ựắch. Ph/n l%n trong nhóm này là nh3ng l nh truy.n d3 li u gi3a các thanh ghi khác nhau trong CPU. Vi c truy.n d3 li u tV m t thanh ghi ự n m t thanh ghi khác có th( thông qua l nh sau:

MOVE Ri, Rj // truy.n d3 li u tV thanh ghi Rj ự n

thanh ghi Ri

Ể ựây d3 li u tV thanh ghi nguxn Rj ựư'c ghi ựè lên thanh ghi ựắch Ri, còn d3 li u c a Rj thì không thay ựui.

M t s, vắ d? c a l nh MOVE như trong b6ng 6.4.

đ( n2p m t giá tr\ tV b nh% vào thanh ghi ho+c lưu m t giá tr\ tV thanh ghi vào b nh% ta dùng các l nh sau:

LOAD ựắch, nguen

vắ d?: LOAD Ri, M (ự\a chU) // Ri M[ự\a chU] STORE ựắch, nguen

vắ d?: STORE M(ự\a chU), Ri // M[ự\a chU] ←Ri Trong b6ng 6.5 cho ta th[y m t s, các l nh và ý nghĩa c a nó

Chương VI: Ki n trúc b l nh

đắch NguRn Vắ dG GiIi thắch

B nh% Thanh ghi

MOVE 100H, AX Chuy(n n i dung trong

AX vao v\ trắ nh% 100H Thanh

ghi

B nh% MOVE AX,MEM1 Chuy(n n i dung trong v\ trắ nh% MEM1 chU ra vào thanh ghi AX

Thanh ghi

Thanh ghi

MOVE AX, BX Chuy(n n i dung trong

thanh ghi BX vào thanh ghi AX Thanh ghi Hhng s, MOVE AX, 0FFFFH Chuy(n giá tr\ hhng s, S h 16: FFFF vào thanh ghi AX, s, 0 S ự/u ự( chU rõ FFFFH là m t giá tr\ hhng chd không ph6i là m t nhãn

B6ng 6.4. M t s, vắ d? l nh MOVE

L nh truyOn dP li u Ý nghĩa

MOVE Di chuy(n (m t tV hay m t kh,i) tV ự\a chU nguxn (thanh ghi hay b nh% trong) ự n ự\a chU ựắch.

LOAD đZc d3 li u tV b nh% vào thanh ghi

STORE Lưu d3 li u tV thanh ghi vào b nh% (adsbygoogle = window.adsbygoogle || []).push({});

PUSH Lưu d3 li u thV thanh ghi vào ngăn x p

POP Nh n d3 li u tV ngăn x p vào thanh ghi

6.4.2. Nhóm l nh tắnh toán sY hZc:

Các l nh s, hZc bao gxm b,n phép tắnh s, hZc cơ b6n là c ng, trV, nhân, chia và ự6o d[u toán h2ng.

ADD/SUB

D2ng tung quát c a các l nh c ng (add) và trV (subtract) như sau:

ADD ựắch, nguxn // ựắch ựắch + nguxn SUB ựắch, nguxn // ựắch ựắch Ờ nguxn

trong ựó các toán h2ng ựắch và nguxn có th( tắm ựư'c theo các ự\a chU khác nhau, nhưng ph6i chda d3 li u có cùng ự dài và không ựư'c phép ựxng th&i là hai ô nh% và cũng không ựư'c là thanh ghi ựo2n

Vắ d? 1:

ADD AX, BX // AX AX + BX ADD AL,74H // AL AL + [74H] SUB CL, AL // CL CL Ờ AL SUB AX, 0405H // AX AX Ờ 0405H Vắ d? 2: Vi t ựo2n chương trình bhng ngôn ng3 Assembly ự( c ng 5H v%i 3H, dùng các thanh ghi AL và BL. K t qu6 c a phép c ng lưu vào b nh% t2i ự\a chU 100H.

MOV AL, 05H // AL 05H MOV BL, 03H // BL 03H ADD AL, BL // AL AL + BL MOV 100H, AL // MEM[100H] AL: di

// chuy(n k t qu6 tV AL vào // v\ trắ nh% DS:100H

B6ng 6.6 cho ta tóm tot các l nh tắnh toán s, hZc và ý nghĩa tương dng c a nó Tên l nh Ý nghĩa ADD C ng ADDD C ng s, có d[u ch[m ự ng, chắnh xác kép SUB TrV SUBD TrV s, có d[u ch[m ự ng, chắnh xác kép MUL Nhân DIV Chia

INC Tăng lên 1

DEC Gi6m ựi 1

NEG đ6o d[u toán h2ng

B6ng 6.6. Các l nh tắnh toán s, hZc cơ b6n

6.4.3. Nhóm l nh logic:

TthPc hi n phép tắnh logic NOT, AND và OR cho tVng bit m t. L nh NOT ự6o t[t c6 các bit trong toán h2ng, các l nh AND/OR thPc hi n các phép tắnh AND/OR ự,i v%i m t ựôi bit trong toán h2ng nguxn và toán h2ng ựắch.

AND/OR

D2ng tung quát c a l nh AND/OR như sau: AND ựắch, nguxn

OR ựắch, nguxn

AND/OR thPc hi n phép toán Boolean ự,i v%i các toán h2ng nguxn và ựắch. Phép AND thư&ng dùng ự( che ựi ho+c gi3 l2i m t vài bit nào ựó c a m t toán h2ng bhng cách nhân logic toán h2ng ựó v%i toán h2ng tdc th&i có các bit 0/1 t2i các v\ trắ c/n che/ gi3 l2i tương dng. Phép OR thư&ng dùng ự( l p m t vài bit nào ựó c a toán h2ng bhng cách c ng logic toán h2ng ựó v%i toán h2ng tdc th&i có các bit 1 t2i các v\ trắ tương dng c/n thi t l p (toán h2ng tdc th&i trong nh3ng trư&ng h'p này còn ựư'c gZi là m+t n2)

Vắ d?:

AND AL, BL // N i dung thanh ghi BL ựư'c giao // v%i n i dung trong thanh ghi AL

Chương VI: Ki n trúc b l nh

// và k t qu6 ựư'c lưu l2i vào trong // thanh gh AL. N u con s, trong // AL là 00001101B và trong BL là // 00110011B thì k t qu6 trong thanh // ghi AL sau phép AND là 00000001B

6.4.4 Nhóm các l nh d ch chuyBn s, hZc ho+c logic (SHIFT ),

quay vòng (ROTATE) có ho+c không có s, gi3 S ngã vào, sang ph6i ho+c sang trái. Các l nh này ựư'c thPc hi n trên m t thanh ghi và k t qu6 lưu gi3 trong thanh ghi khác. S, l/n d\ch chuy(n (m{i l/n d\ch sang ph6i ho+c sang trái m t bit) thư&ng ựư'c xác ự\nh trong thanh ghi thd ba. Hình 6.11 minh ho2 cho các l nh cơ b6n nh[t c a nhóm này.

SRL (Shift Right Logical D d\ch ph6i logic): Các bit c a word ựư'c d\ch chuy(n sang ph6i, bit th[p nh[t (bit 0) m[t ựi còn tr\ nh\ phân Ộ0Ợ s d\ch chuy(n vào bit cao nh[t (adsbygoogle = window.adsbygoogle || []).push({});

SLL (Shift Left Logical D d\ch trái logic): Các bit c a word ựư'c d\ch chuy(n sang trái, tr\ nh\ phân Ộ0Ợ s d\ch chuy(n vào bit th[p nh[t (bit 0) , còn bit cao nh[t s m[t ựi

SRA (Shift Right Arithmetic D d\ch ph6i s, hZc): Bit cao nh[t là bit d[u s ựư'c gi3 l2i, các bit còn l2i s d\ch chuy(n sang ph6i còn bit th[p nh[t s m[t ựi.

SLA (Shift Left Arithmetic Ờ d\ch trái s, hZc): Bắt cao nh[t là bit d[u s ựư'c gi3 nguyên, các bit d\ch sang trái, bắt k bit d[u m[t ựi, tr\ nh\ phân Ộ0Ợ d\ch chuy(n vào bit th[p nh[t.

Tương tP cho các l nh quay vòng như trong hình 6.11.

Chương VI: Ki n trúc b l nh

6.4.5. Nhóm các l nh có ựiOu ki n và l nh nhIy (không ựiOu ki n)

L nh có ựiOu ki n có d ng :

N u <ựi.u ki n> thì <chu{i l nh 1> n u không <chu{i l nh 2> (IF <condition> THEN <instructions1> ELSE <instructions2>)

L nh này bu c ph6i ghi nh% ựi.u ki n và nh6y vòng n u ựi.u ki n ựư'c tho6.

Ghi nhd ựiLu ki0n .

B tắnh toán logic s, hZc ALU cung c[p k t qu6 S ngã ra tuỳ theo các ngã vào và phép tắnh c/n làm. Nó cũng cho m t s, thông tin khác v. k t qu6 dư%i d2ng các bit tr2ng thái (Hay các bit c& D flag). Các bit này là nh3ng ự2i lư'ng logic đÚNG ho+c SAI

(hình 6.12).

Trong các bit tr2ng thái ta có:

+ bit d[u S (Sign D đúng n u k t qu6 âm),

+ bit troc nghi m zero Z (Zero D đúng n u k t qu6 bhng không),

+ bit tràn OVF (Overflow) đÚNG n u phép tắnh s, hZc làm thanh ghi không ự kh6 năng lưu tr3 k t qu6,

+ bit s, gi3 C (carry) đÚNG n u s, gi3 S ngã ra là 1 ....

Các bit trên thư&ng ựư'c gZi là bit mã ựi.u ki n.

Có hai ki thu t cơ b6n ự( ghi nh% các bit tr2ng thái

Cách th/ nh<t, ghi các tr2ng thái trong m t thanh ghi ựa d?ng. Vắ d? l nh CMP Rk, Ri, Rj

L nh trên s làm phép tắnh trV Ri D Rj mà không ghi k t qu6 phép trV, mà l2i ghi các bit tr2ng thái vào thanh ghi Rk. Thanh ghi này ựư'c dùng cho m t l nh nh6y có ựi.u ki n. đi(m l'i c a ki thu t này là giúp lưu tr3 nhi.u tr2ng thái sau nhi.u phép tắnh ự( dùng v. sau. đi(m b[t l'i là ph6i dùng m t thanh ghi ựa d?ng ự( ghi l2i tr2ng thái sau m{i phép tắnh mà s, thanh ghi này l2i b\ gi%i h2n S 32 trong các b xl lý hi n ự2i.

Cách th/ hai, là ự( các bit tr2ng thái vào m t thanh ghi ự+c bi t gZi là thanh ghi tr2ng thái. V[n ự. lưu gi3 n i dung thanh ghi này ựư'c gi6i quy t bhng nhi.u cách. Trong ki n trúc SPARC, chU có m t s, gi%i h2n l nh ựư'c phép thay ựui thanh ghi tr2ng thái vắ d? như l nh ADDCC, SUBCC (các l nh này thPc hi n các phép tắnh c ng ADD và phép tắnh trV SUB và còn làm thay ựui thanh ghi tr2ng thái). Trong ki n trúc PowerPC, thanh ghi tr2ng thái ựư'c

ALU Toán h2ng 1 Toán h2ng 2 S, mang vào (Carry in) K t qu6 Bit S Bit Z Bit OVF Bit C

Chương VI: Ki n trúc b l nh

phân thành 8 trư&ng, m{i trư&ng 4 bit, v y là thanh ghi ựã phân

Một phần của tài liệu Giáo tình kiến trúc máy tính của thầy Vũ Đức Lung (Trang 101 - 110)