THIẾT KẾ PHẦN MỀM
A.THIẾT KẾ PHẦN MỀM Z80: IV.1.Tập lệnh Z80:
IV.1.Tập lệnh Z80:
Tập lệnh bao gồm câc chỉ thị để cho vi xử lý thực hiện câc hoạt động chính xâc. Lệnh vă dữ liệu lă câc con số nhị phđn đưa văo CPU theo Bus dữ liệu vă đưa văo vùng nhớ để có sự khâc nhau duy nhất lă vi xử lý cất lệnh văo thanh ghi vă cơ cấu giải mê còn dữ liệu thì đưa đến thanh ghi dữ liệu hay ALU. Mây tính nhận lệnh đưa văo dưới dạng lệnh nhị phđn, dạng năy gđy khó khăn cho người viết chương trình do vậy người ta thường viết chương trình dưới dạng gợi nhớ sau đó chuyển sang nhị phđn để đưa văo CPU. Ở dạng gợi nhớ được chia lăm hai phần :
- Mê công tâc ( operation code ): cho biết thao tâc phải thực hiện.
- Tâc tố ( operand ): được viết sau mê công tâc cho biết trị số liệu cần xử lý. Câc bộ vi xử lý khâc nhau thì câc tập lệnh cũng khâc nhau. Tập lệnh của CPU Z80 có khoảng 158 lệnh chia thănh 4 nhóm lệnh chính:
- Nhóm lệnh xử lí dữ liệu. - Nhóm lệnh truyền dữ liệu.
- Nhóm lệnh kiểm sốt chương trình. - Nhóm lệnh kiểm sốt trạng thâi.
IV.1.1. Câc phương phâp định vị địa chỉ. IV.1.1.1. Mục đích.
Có nhiều phương phâp chỉ ra địa chỉ thanh ghi hay bộ nhớ mă lệnh sẽ sử dụng người ta chọn trong câc phương phâp năy tùy theo mục đích sau:
- Dùng lệnh với điạ chỉ căng ngắn căng tốt để giảm yíu cầu về dung lượng bộ nhớ cũng như thời gian truy xuất
- Để vùng truy xuất bộ nhớ với số byte căng lớn căng tốt
- Muốn có thể thay đổi giâ trị địa chỉ thực sự mă không lăm thay đổi lệnh . - Muốn định vị căng nhanh căng tốt .
- Phương phâp định vị căng đơn giản căng tốt .
IV.1.1.2. Câc phương phâp định vị địa chỉ.
Câc phương phâp định vị thường dùng lă: - Định vị trực tiếp .
- Định vị giân tiếp. - Định vị tức thời. - Định vị chỉ số. - Định vị tương đối.
- Định vị trực tiếp thanh ghi. - Định vị giân tiếp thanh ghi. - Định vị ngăn xếp.
Người ta thường dùng một hay phối hợp câc kiểu định vị trín
IV.1.1.3. Định vị địa chỉ của Z80.
a> Định vị tức thời.
Trong phương phâp định vị năy, byte theo sau OP CODE trong bộ nhớ chính lă tâc tố.
- OP CODE 1-2 byte - OPRAND D7- D0
Một ví dụ của lệnh loại năy lă lệnh đưa một hằng số văo thanh ghi tích lũy, hằng số năy lă byte theo sau OPCODE.
b> Định vị tức thời mở rộng.
Kiểu định vị năy tương tự như trín những byte theo sau OPCODE lă tâc tố. - OP CODE 1-2 byte
- OPERAND nữa cao
Ví dụ lệnh của loại năy đưa văo cặp thanh ghi HL 16 bit dữ liệu
c> Định vị trong ô bổ chính.
Z80 có một byte đặt biệt lă Call. Lệnh Call đặt thanh ghi PC đến một địa chỉ ở trang O. Lệnh năy cho phĩp theo sau nó lă một địa chỉ 16 bit chỉ tới một vùng nhớ năo đó .
d>Định vị tương đối.
Kiểu định vị năy cho phĩp dịch chuyển 1 tầm địa chỉ lă –128-127 từ địa chỉ A+2 . 8 bit theo sau OPCODE lă địa chỉ A .
e> Định vị trực tiếp.
Chỉ đến nội dung của ô nhớ (nn)
f> Định vị chỉ số.
Dùng hai thanh ghi IX vă IY mỗi thanh ghi 16 bit.
g> Định vị trực tiếp thanh ghi.
Sử dụng trực tiếp câc thanh ghi trong CPU như A, B, C, D, E, H, L.
h> Định vị hiểu ngầm.
Dùng thanh ghi tích luỹ ACC như lă nơi chứa kết quả của phĩp tính số học.
i> Định vị giân tiếp thanh ghi.
Sử dụng cặp thanh ghi (HL) , (BC), ( IX +d),(IY+d)
j> Định vị bit.
Trong câc lệnh SET, RESET, BIT.Cho phĩp CPU kiểm sốt đến từng bit trong ô nhớ chỉ định .
k> Định vị ngăn xếp.
Dùng thanh ghi con trỏ ngăn xếp SP.
l> Kết hợp câc phương phâp định vị.
Nhiều lệnh có hơn một tâc tố, chẳng hạn như lệnh số hay lệnh dịch chuyển dữ liệu .Trong trường năy có hai phương phâp được định vị sử dụng .
IV.1.2.Nhóm lệnh truyền dữ liệu.
IV.1.2.1. Lệnh truyền bộ nhớ vă thanh ghi.
Lệnh Load di chuyển bộ nhớ bín trong giữa câc thanh ghi của CPU hay giữa thanh ghi vă bộ nhớ. Tất cả câc lệnh năy đều phải chỉ ra nguồn vă đích tốn hạng nguồn không thay đổi bởi lệnh LOAD. Ngôn ngữ gợi nhớ cho loại lệnh năy lă LD, cú phâp lệnh như sau:
LD DEST, SOURCE
Câc kiểu định vị cho tốn hạng nguồn vă đích lă tùy ý.Trong kiểu định vị trực tiếp hay tức thời mở rộng (lệnh có hai byte dữ liệu ngồi mê lệnh ) byte thấp đi trước, byte cao đi sau.
Một số câc qui ước để dể nhớ như sau : r: Câc thanh ghi A,B,C,D,E,H,L.
S: Câc thanh ghi A,B,C,D,E,H,L,(HL),(IX+d),(IY+d) dd: BC,DE, HL, SP
dd”:BC,DE,HL,nn qq: AF,BC,DE,DP ii: IX,IY
IV.1.2.1.1.Nhóm lệnh truyền 8 bit.
a> LD S’,S: lệnh nạp văo S’ với thanh ghi S.
b> LDA,(dd’): nạp văo thanh ghi A với nội dung ô nhớ có địa chỉ vă nội dung trong thanh ghi dd’.
c> LD(dd’), A: nạp văo ô nhớ có địa chỉ lă nội dung của thanh ghi dd’với nội dung của thanh ghi A.
e> LD I,A:A-I.
f> LD A,R : A-R.
g> LDR,A : A-R.
IV.1.2.1.2. Nhóm lệnh truyền 16 bit.
a> LD dd nn: Đưa trực tiếp dữ liệu 16 bit nn văo thanh ghi dd .
b> LD dd (nn): đưa nội dung của ô nhớ có địa chỉ ô nhớ có địa chỉ nn văo thanh ghi dd.
c> LD (nn), dd: nạp nội dung của thanh ghi dd văo ô nhớ có địa chỉ nn.
d> LD ii, nn : đưa trực tiếp 16 bit dữ liệu nn văo ii.
e> LD ii (nn) : đưa nội dung của ô nhớ có địa chỉ nn văo ii.
f>EX DE,HL : Hóan đổi thanh ghi HL với thanh ghi DE.
g> EX AF,AF’: hốn đổi thanh ghi AF ‘với thanh ghi AF.
h> EX X : hốn đổi một lúc nội dung của 3 thanh ghi BC ⇔ BC’
DE ⇔ DE’ HL ⇔ HL’
i> EX (SP),HL: hốn đổi nội dung của 2 thanh ghi HL H( = ) SP +1
L (= ) SP
j> EX ( SP)< ii: hốn đổi nội dung ii(L) (=) SP +1
ii(H) (=) SP
IV.1.2.2. Lệnh văo ra.
a> IN A, (n): nội dung của cổng có địa chỉ n (8 bit) được nạp văo thanh ghi A.
b>IN r , (C) : nội dung của cổng có địa chỉ C được nạp văo thanh ghi R.
c>OUT(n) , A: xuất nội dung thanh ghi A đưa ra cổng có địa chỉ n.
d>OUT (C), R: xuất nội dung có thanh ghi R ra cổng có địa chỉ C
IV.1.2.3. Lệnh ngăn xếp.
a> LD SP, HL: nạp nội dung của ô nhớ chỉ ra bởi thanh ghi HL văo ngăn xếp.
b>LD SP, ii: nạp nội dung của ô nhớ chỉ ra bởi ii văo ngăn xếp .
c>PUSH qq: chuyển dữ liệu qq văo ngăn xếp. Đầu tiín nội dung của ngăn xếp giảm đi 1(SP-1) byte cao của cặp thanh ghi được đưa văo thanh ô nhớ có địa chỉ lă nội dung cua SP. Nội dung của SP lại giảm thím một (SP-2) byte thấp của cặp thanh ghi được đưa văo ô nhớ có địa chỉ lă nội dung của SP.
d>PUSH ii: chuyển dữ liệu từ thanh ghi văo ngăn xếp.
e>POP qq: chuyển dữ liệu văo ngăn xếp ra thanh ghi qq, dữ liệu của ô nhớ trong ngăn xếp có địa chỉ chứa trong SP được chuyển văo nữa thấp của thanh ghi, sau đó nội dung của ngăn xếp tăng lín 1.
f>POP ii : chuyển dữ liệu từ ngăn xếp ra thanh ghi ii.
g>IND : nạp nội dung của ô nhớ chỉ ra bởi thanh ghi C vẵ nhớ chỉ ra bởi thanh ghi HL, thanh ghi HL lă B giảm 1.
IV.1.2.4. Lệnh truyền khối.
a> LDI : dịch chuyển nội dung có ô nhớ có nội dung lă HL vă ô nhớ có địa chỉ lă DE,tăng câc thanh ghi HL vă DE lín 1. Giảm thanh ghi PC xuống 1.
b> LDIL : lă lệnh LDI vă được lập cho đến khi năo thanh ghi PC bằng không.
c> LDD : dịch chuyển nội dung của ô nhớ có địa chỉ HL văo ô hớ có địa chỉ lă DE ,nội dung của câc thanh ghi DE vă HL , PC giảm 1.
d>LDDR: lă lệnh LDD vă được lặp lại cho đến khi năo thanh ghi PC bằng không.
e> INI: Dịch chuyển nội dung ô nhớ chỉ ra bởi thanh ghi C văo ô nhớ địa chỉ có nội dung của HL ,thanh ghi HL tăng 1, thanh ghi B giảm 1.
f> INIR: lă lệnh INI lập đến khi B bằng không.
h> OUTI: nạp nội dung ô nhớ chỉ ra bởi HL văo ô nhớ chỉ ra bởi C,HL giảm 1,B giảm 1.
i> OTIR: lă lệnh OUTI cho dến khi B bằng không.
j> OUTD: nạp nội dung ô nhớ chỉ ra bởi HL văo ô nhớ chỉ ra bởi C. Nội dung của HL vă B giảm 1.
k> OTDR: lă lệnh OUTD lập đến khi B bằng không.
IV.1.3.Nhóm lệnh xử lí dữ liệu. IV.1.3.1. Lệnh số học vă luận lí 8 bit
a> ADD A,S: lệnh cộng dữ liệu trong thanh ghi S với thanh ghi A ,không chú ý đến số nhớ, dữ liệu kết quả được chứa tại A.
b> ADC A,S : Cộng dữ liệu trong thanh ghi S với thanh ghi A vă cộng luôn số nhớ ,tất cả chứa trong A.
c> SUB A,S : lấy nội dung của thanh ghi A trừ đi thanh ghi S, không lưu ý đến số nhớ.
d> SBC A,S : lệnh trừ có lưu ý đến số nhớ,với dữ liệu trong thanh ghi A ,kết quả chứa tại A.
e> ORS : thực hiện phĩp ( OR) giữa dữ liệu trong thanh ghi A với dữ liệu trong thanh ghi C kết quả chứa tại A.
f> XOR S : thực hiện phĩp XOR giữa nội dung trong thanh ghi S với nội dung trong thanh ghi A, kết quả chứa tại A.
g> INCS : tăng nội dung thanh ghi S lín 1.
h>DECS : giảm nội dung trong thanh ghi S xuống 1.
IV.1.3.2. Lệnh số học 16 bit.
a> ADD, HL,dd: cộng dữ liệu trong thanh ghi dd với dữ liệu trong thanh ghi HL, kết quả chứa tại thanh ghi HL, không lưu ý đến số nhớ.
b> ADC HL,dd : cộng dữ liệu trong thanh ghi dd với dữ liệu trong thanh ghi HL vă luôn cả số nhớ, kết quả chứa tại HL.
c> SBC HL,dd : lấy dữ liệu trong thanh ghi HL trừ đi dữ liệu trong thanh ghi dd vă trừ luôn số nhớ, kết quả tại thanh ghi HL.
d> ADD IX,pp : cộng dữ liệu trong thanh ghi IX với dữ liệu trong thanh ghi pp kết quả chứa tại thanh ghi IX.
e> ADD IY,pp: cộng dữ liệu trong thanh ghi IY với dữ liệu trong thanh ghi pp kết qủa chứa tại thanh ghi IY.
f> INC dd : tăng nội dung của thanh ghi dd lín 1.
g> DEC dd: giảm nội dung của thanh ghi dd xuống 1.
h> INC ii : tăng nội dung của cặp thanh ghi ii lín 1.
i>DEC ii : giảm nội dung của cặp thanh ghi xuống 1.
IV.1.3.3. Lệnh quay vòng dịch.
a> RRD : đẩy dữ liệu thanh ghi A về phía phải 1 bit, bit O đưa văo CY.
b> RLA : đẩy dữ liệu trong thanh ghi A về phía trâi 1 bit, bit thứ 7 đưa văo CY.
c> RRCA : đẩy dữ liệu trong thanh ghi A bit 0 đưa văo CY .Dữ liệu của Cy văo bit thứ 7.
d> RLCA : đẩy dữ liệu trong thanh ghi A về phía trâi 1 bit,bit thứ 7 đưa văo Cy dữ liệu từ Cy đưa văo bit 0.
e> RRS : đẩy dữ liệu văo thanh ghi S văo phía phải 1 bit, bit bo đưa văo Cy.
f> RLS : đẩy dữ liệu trong thanh ghi S về phía trâi 1 bit ,bit b7 văo Cy.
g> RRCS : đẩy dữ liệu trong thanh ghi S về phía phải 1 bit, bit b0 văo Cy vă dữ liệu từ Cy văo b7.
h> RLCS : đẩy dữ liệu trong thanh ghi S về phía trâi 1 bit, bit b7 văo Cy, dữ liệu từ Cy văo bit b0.
i> SLAS : dữ liệu trong thanh ghi S dịch trâi 1 bit, bit b7 bảo tồn bit b0 bị xóa.
j> SRAS : dữ liệu trong thanh ghi S dịch phải 1 bit bit b0 bảo tồn bit b7 bị xóa.
k> SRLS : dữ liệu trong thanh ghi S dịch phải 4 bit câc bit trống bị xóa.
l> RLD : dịch 4 bit thấp dữ liệu trong thanh ghi A đưa văo nữa thấp dữ liệu chứa trong ô nhớ chỉ ra bởi thanh ghi HL ,4 bit thấp dịch lín cao ,4 bit cao đưa văo nữa thấp của thanh ghi A .
m> RRD: dịch 4 bit thấp dữ liệu trong thanh ghi A văo nữa cao của dữ liệu nằm trong ô nhớ chỉ ra bởi thanh ghi HL, 4 bit cao của ô nhớ dịch xuống nữa thấp, 4 bit thấp đưa lại văo thanh ghi A.
IV.1.3.4. Lệnh so sânh
a> CPS : thực hiện phĩp so sânh giữa nội dung trong thanh ghi A với nội dung trong thanh ghi S, kết quả tâc động đến câc cờ. Trạng thâi không ảnh hưởng đến thanh ghi A.
b> CPI : thực hiện phĩp so sânh giữa nội dung của thanh ghi A với nội dung chứa trong thanh ghi HL , kết quả không ảnh hưởng đến nội dung trong thanh ghi A, đồng thời thực hiện tăng nội dung thanh ghi HL lín 1. Kết quả được đưa văo thanh ghi HL vă thực hiện phĩp trừ nội dung thanh ghi B đi 1 kết quả chứa lại văo B.
c> CPIR : lă lệnh so sânh CPI cho đến khi nội dung trong thanh ghi A bằng với nội dung của ô nhớ chỉ ra bởi thanh ghi HL vă nội dung của thanh ghi B trở về 0
d> CPB : thực hiện phĩp trừ giữa nội dung trong thanh ghi A với nội dung của ô nhớ chỉ ra bởi nội dung HL, kết quả không ảnh hưởng đến thanh ghiA vă đồng thời tăng nội dung HL lín 1 vă giảm nội dung trong thanh ghi B xuống 1.
e> CPDK : thực hiện lệnh CPI cho đến khi thanh ghi A bằng với nội dung ô nhớ chỉ ra bởi thanh ghi HL vă nội dung thanh ghi B trở về 0.
IV.1.4.Lệnh kiểm sốt chương trình.
Ký hiệu cc chỉ câc cờ trạng thâi, ký hiệu cho câc cờ như sau : + NONZERO : (NZ)Z =O
+ Cờ ZERO (Z) ,Z=1 + NON CARRY (NC) Y= 0 + CARRY (C) C= 0
+ PARITY ADD (OP) , P = 0 + PARITY EVEN ( PE) ,P = 1
a> JP nn : rẻ nhânh sang địa chỉ nn.
b> JP cc, nn : nếu thỏa mên câc điều kiện của cờ trạng thâi thì thực hiện JP nn ,nếu không tiếp tục.
c> JR e : nhảy sang địa chỉ PC + e ,trong đó e lă số bù 2 của địa chỉ kế tiếp.
không thì tiếp tục.
e> JP (HL) : nhảy sang địa chỉ lă nội dung của thanh ghi HL.
f> JP (ii) :nhảy sang địa chỉ lă nội dung của thanh ghi ii.
g> DJNZ: được nạp B- 1 văo B, với 2 khả năng : + nếu B =0 tiếp tục
+ nếu B = 0 nhảy sang địa chỉ kế tiếp + e
h>CALL nn : cắt byte cao của địa chỉ kế tiếp văo ngăn xếp SP –1. Cất byte thấp của địa chỉ kế tiếp SP – 2 gân cho địa chỉ kế tiếp.
i> CALL cc, nn : nếu thỏa mên cờ trạng thâi cc thì thực hiện nếu không thì tiếp tục.
j> RET : gân ngăn xếp cho byte thấp của địa chỉ kế tiếp. Gân ngăn xếp kế tiếp cho byte cao của địa chỉ kế tiếp.
k> RET cc : nếu thỏa mên cờ trạng thâi cc thì thực hiện RET nếu không thì tiếp tục.
l> RETN : gọi Ret từ chương trình phục vụ ngắn NMI (ngắt không mặt nạ).
m> RETI : gọi Ret từ chương trình phục vụ ngắt INT.
n> RSTP :
+Gân ngăn xếp SP-1 cho byte cao của địa chỉ kế tiếp. + Gân ngăn xếp SP-2 cho byte thấp của địa chỉ.
+ Nhập 0 văo byte cao của địa chỉ kế tiếp. + Nhập p văo byte thấp của địa chỉ kế tiếp.
IV.1.5.Nhóm lệnh kiểm sốt CPU vă kiểm tra bit. IV.1.5.1.Lệnh kiểm sốt CPU.
a> DAA : chỉnh BCD cho phĩp +.
b> CPT : nghịch đảo bộ tích lũy biến đổi bit 0 thănh bit 1 vă ngược lại.
c> NEG : che 4 bit thấp vă thanh ghi A. Kết quả ghi văo A.
d> CCF : lệnh đảo bit CARRY.
e> SCF : lệnh thiết lập bit Carry ở trạng thâi không tâc động.
f> NOP : khi gặp lệnh năy CPU không lăm gì cả chờ chu kỳ mới.