اصول درس: دکتر رحمتی http://ee.iust.ac.ir/rahmati/index.htm آدرس Email و Website براي تکالیف و... : rahmati@iust.ac.ir http://eel.iust.ac.ir/rahmati/ ١ فصل ششم فصل ششم ا شنايی با دستورالعملهای Z8 و مقدمهای بر برنامه نويسی به زبان Assembly ٢ فصل ششم ١
مدل نرم افزاري Z8 Accumulator A B D H Index Register IX Index Register IY Stack Pointer SP Program Counter PC Interrupt ector I Flags F C E L Memory Refresh R Accumulator A B D H Flags: Flags F C E L 7 6 5 4 3 2 1 S Z X HX P NC ٣ فصل ششم 7 6 5 4 3 2 1 SZXHX P NC رجیستر پرچم ) Register ( Flag S Sign Flag (1:negative)* Z Zero Flag (1:Zero) H Half Carry Flag (1: Carry from Bit 3 to Bit 4)** P Parity Flag (1: Even) Overflow Flag (1:Overflow)* N Operation Flag (1:previous Operation was subtraction)** C Carry Flag (1: Carry from Bit n-1 to Bit n, with n length of operand) *: 2-complement number representation **:used in DAA-operation for BCD-arithmetic ٤ فصل ششم ٢
دستورالعمل (Instruction) عبارت است از فرمانی که به میکرو پروسسور براي انجام عملی خاص روي دیتاي مشخصی داده می شود. مجموعه دستورالعمل ها( Set (Instruction : عبارت است از مجموعه دستورالعمل هایی که یک میکروپروسسور می تواند انجام دهد(اجرا کند). ٥ فصل ششم نکات مهم مجموعه دستورالعمل ها( Set (Instruction میکروپروسسور درانجام کارها می باشد. نشان دهنده قدرت عملیاتی و توان در حالت کلی مجموعه دستورالعمل ها Set) (Instruction منحصر به فرد است. براي هر میکروپروسسور ٦ فصل ششم ٣
آشنایی با دستورالعمل هاي Z8 دستورالعمل هاي Z8 از نظر طول (تعداد بایت) به چهار دسته تقسیم می شوند دستورالعمل هاي یک بایتی. مثال: Opcode Operand Bytes MC/Tstates Hex Code LD A, B 1 1/4 78 (8Bit) ٧ فصل ششم دستورالعمل هاي دو بایتی. مثال: Opcode LD Operand B, 32H Bytes 2 MC/Tstates 2/ 7(4+3) Hex Code 6H 32H دستورالعمل هاي سه بایتی. مثال: Opcode LD Operand HL, 25H Bytes 3 MC/Tstates 3/ 1(4+3+3) Hex Code 21 5 2 ٨ فصل ششم ٤
دستورالعمل هاي چهار بایتی. مثال: Opcode LD Operand IX, 2H Bytes 4 MC/T-states 4/ 14(4+4+3+3) Hex Code DD 21 2 ٩ فصل ششم دستورالعمل هاي Z8 از نظر نوع عمل به شش دسته تقسیم می شوند کپی کردن دیتا 1- Data Copy or Load operation عملیات ریاضی 2- Arithmetic Operation عملیات منطقی 3- Logic Operation عملیات روي بیت ها -4 Bit Manipulation 5- Branch Operation (Program Control عملیات انشعاب (دستورالعمل هاي کنترل برنامه) Instruction) عملیات کنترل 6- Machine Control Instructions CPU ١٠ فصل ششم ٥
دستورالعمل هاي Z8 را باجزي یات بیشتر می توان به شانزده دسته تقسیم کرد 8-bit loads (Copy) CPU Control Instructions 16-bit loads (Copy) Rotates and Shifts Exchanges Memory Block Moves Memory Block Searches 8-bit arithmetic and logic 16-bit arithmetic General purpose Accumulator & Flag Operations Bit Set, Reset and Test Input and Output Jumps Calls Restarts Returns ١١ فصل ششم Destination دستورالعمل هاي کپی یا Load Copy Source Load Direct Data ROM Input Devices Microprocessor r 1 r 2 Output Devices R/W Stack Memory Memory فصل ششم ١٢ ٦
d = any 8-bit destination register or memory location dd = any 16-bit destination register e = 8-bit signed 2's complement displacement used in relative jumps and indexed addressing L= 8 special call locations in page zero. In Hex notation these are, 8, 1, 18, 2, 28, 3 and 38 n = any 8-bit binary number nn= any 16-bit binary number r = any 8-bit general purpose register (A, B, C, D, E, H, or L) s = any 8-bit source register or memory location s b = a bit in a specific 8-bit register or memory location ss = any 16-bit source register or memory location subscript "L" = the low order 8 bits of a 16-bit register subscript "H" = the high order 8 bits of a 16-bit register ( ) = the contents within the ( ) are to be used as a pointer to a memory location or I/O port number 8-bit registers are A, B, C, D, E, H, L, I and R 16-bit register pairs are AF, BC, DE and HL 16-bit registers are SP, PC, IX and IY ١٣ فصل ششم 8-bit loads (Copy) Mnemonic LD r, s LD d, r LD d, n LD A, s LD d, A Symbolic Operation r s d r d n A s d A Comments s = r, n, (HL), (IX + e), (IY + e) d = (HL), r (IX + e), (IY + e) d = (HL), r (IX + e), (IY +e ) s = (BC), (DE), (nn), I, R d = (BC), (DE), (nn), I, R ١٤ فصل ششم ٧
دستورات (Copy) 16-bit loads LD dd, nn LD dd, (nn) LD (nn), ss LD SP, ss PUSH ss POP dd dd nn dd (nn) (nn) ss SP ss (SP-1) ss H ; (SP-2) ss L dd L (SP); dd H (SP+ 1) dd = BC,DE, HL, SP, IX, IY dd = BC, DE, HL, SP, IX, IY ss = BC, DE, HL, SP, IX, IY ss = HL, IX, IY ss= BC, DE, HL, AF, IX, IY dd = BC, DE, HL, AF, IX, IY ١٥ فصل ششم دستورات Exchanges Mnemonic EX DE, HL Symbolic Operation DE HL Comments EX AF, AF' AF A F' EXX EX (SP), ss BC B C DE D E' HL H L' (SP) ss L, (SP+ 1) ss H ss = HL, IX, IY ١٦ فصل ششم ٨
دستورات Memory Block Moves Mnemonic LDI LDIR LDD LDDR Symbolic Operation (DE) (HL), DE DE+1 HL HL+1, BC BC-1 (DE) (HL), DE DE+ 1 HL HL+1, BC BC-1 Repeat until BC = (DE) (HL), DE DE-1 HL HL-1, BC BC-1 (DE) (HL), DE DE-1 HL HL-1, BC BC-.1 Repeat until BC = Comments ١٧ فصل ششم مقایسه اعداد اثر مقایسه روي پرچم (Flag) ها A s = : C =, Z = 1 A s > : C =, Z = A s < : C =1, Z = ١٨ فصل ششم ٩
دستورات Memory Block Searches Mnemonic CPI Symbolic Operation A-(HL), HL HL+1 BC BC - 1 Comments ١٩ فصل ششم CPIR CPD CPDR A - (HL), HL HL+ 1 BC BC-1, Repeat until BC = or A = (HL) A (HL), HL HL-1 BC BC-1 A-(HL), HL HL -1 BC BC -1, Repeat until BC= or A = (HL) A-(HL) Sets the flags only. A is not affected دستورات ریاضی ومنطقی 8 بیتی Mnemonic ADD s ADC s SUB s SBC s AND s OR s XOR s Symbolic Operation A A+ s A A + s + Cy A A- s A A -s-cy A A AND s A A OR s A A XOR s Comments Cy is the carry flag s= r, n, (HL) (lx+ e), (ly+ e) ٢٠ فصل ششم ١٠
دستورات ریاضی ومنطقی 8 بیتی (ادامه) Mnemonic CP s INC d DEC d Symbolic Operation) A - s d d +1 d d -1 Comments s = r, n, (HL), (IX+e), (IY+e) d = r, (HL) (lx+ e), (IY+ e) ٢١ فصل ششم دستوراتریاضی ومنطقی 16 بیتی ADD HL, ss ADC HL, ss SBC HL, ss ADD IY, ss ADD IX, ss INC dd DEC dd HL HL + ss HL HL + ss + CY HL HL - ss - CY IY IY + ss IX IX + ss dd dd+ 1 dd dd -1 ss = BC, DE, HL, SP ss= BC, DE,IX,SP ss = BC, DE, IY, S dd = BC,DE, HL,SP, IX, IY dd = BC, DE, HL, SP, IX,IY ٢٢ فصل ششم ١١
عملیات عمومی روي Acc و Flag ها CPL NEG CCF SCF A A A -A Cy Cy Cy 1 ٢٣ فصل ششم دستورات کنترل CPU NOP HALT DI EI 1M 1M 1 1M 2 No operation Halt CPU Disable Interrupts Enable Interrupts Set interrupt mode Set interrupt mode I Set interrupt mode 2 88A mode Call to O38H Indirect Call ٢٤ فصل ششم ١٢
دستورات چرخش (Rotate) RLC s s= r, (HL), (IX+ e), (IY+ e) Cy 7 s ٢٥ فصل ششم دستورات چرخش( Rotate ) RL s s= r, (HL), (IX+ e), (IY+ e) Cy 7 s ٢٦ فصل ششم ١٣
دستورات انتقال (Shift) SL A s s= r, (HL), (IX+ e), (IY+ e) Cy 7 s ٢٧ فصل ششم دستورات عمل روي bit ها Mnemonic BIT b, s SET b, s RES b, s Symbolic Operation Z Sb s b 1 s b Comments Z is zero flag s= r, (HL), (lx+e),(ly+ e) ٢٨ فصل ششم ١٤
دستورات IN Mnemonic IN A, (n) IN r, (C) INI INIR IND INDR Symbolic Operation A (n) r (C) (HL) (C),HL HL+ 1 B B- 1 (HL) (C),HL HL + 1 B B-1 Repeat until B = (HL) (C), HL HL -1 B B-1 (HL) (C), HL HL-l B B-1 Repeat until B = Comments Set flags ٢٩ فصل ششم دستورات OUT Mnemonic OUT (n), A OUT (C), r OUTI OTIR OUTD Symbolic Operation (n) A (C) r (C) (HL), HL HL + 1 B B-1 (C) (HL), HL HL + 1 B B-1 Repeat until B = (C) (HL), HL HL -1 B B-1 Comments OTDR (C) (HL), HL HL -1 B B-1 Repeat until B = ٣٠ فصل ششم ١٥
دستورات JUMP Mnemonic JP nn Symbolic Operation PC nn Comments NZ PO JP cc, nn If condition cc is true PC nn, else continue cc Z NC PE P JR e PC PC + e C M JR kk, e JP (ss) DJNZ e If condition kkis true PC PC + e, else continue PC ss B B -1, if B = continue, else PC PC + e kk : NZ, Z, NC, C ss = HL, IX, IY ٣١ فصل ششم دستورات CALL Mnemonic CALL nn Symbolic Operation (SP-l) PC H (SP-2) PC L, PC nn Comments NZ PO CALL cc, nn If condition cc is false continue, else same as CALL nn cc Z NC PE P C M ٣٢ فصل ششم ١٦
دستورات RST Mnemonic RST L Symbolic Operation (SP-1) PC H (SP-2) PC L PC H PC L L Comments L =, 8, 1, 18, 2, 28, 3, 38 H ٣٣ فصل ششم دستورات RET Mnemonic RET RET cc RETI Symbolic Operation PC L (SP), PC H (SP+1) If condition cc is false continue, else same as RET Return from interrupt, same as RET Comments NZ PO Z PE cc NC P C M RETN Return from non-maskableinterrupt ٣٤ فصل ششم ١٧
مثال هايی از دستورات کپی: Opcode Operand Bytes MC/Tstates Hex Code LD A, B 1 1/4 78 (8Bit) Opcode LD Operand B, 32H Bytes 2 MC/Tstates 2/ 7(4+3) Hex Code 6H 32H Opcode LD Operand HL, 25H Bytes 3 MC/Tstates 3/ 1(4+3+3) Hex Code 21 5 2 ٣٥ فصل ششم Opcode Operand Bytes MC/T-states Hex Code LD A, (28H) 3 4/ 13(4+3+3+3) 3A 8 2 Opcode Operand Bytes MC/T-states Hex Code IN A, (1H) 2 3/ 11(4+3+4) DB 1 Opcode Operand Bytes MC/T-states Hex Code OUT (7H), A 2 3/ 11(4+3+4) D3 7 ٣٦ فصل ششم ١٨
Opcode PUSH Operand BC Bytes 1 MC/Tstates 3/ 1(4+3+3) Hex Code C5 B SP Register Contents Before Instruction 4 299 F8 C 297 298 299 Stack F8 4 XX B SP Register Contents After Instruction 4 297 F8 C ٣٧ فصل ششم Opcode Operand Bytes MC/T-states Hex Code POP BC 1 3/ 1(4+3+3) C1 B SP Register Contents Before Instruction XX 297 XX C 297 298 299 Stack F8 4 XX B SP Register Contents After Instruction 4 299 F8 C ٣٨ فصل ششم ١٩
Opcode Operand Bytes MC/T-states Hex Code EXX 1 1/ 4 D9 اين دستورالعمل محتويات رجيسترهای عمومی را با رجيسترهای پريم دار عوض می کند Accumulator A Flags F Accumulator A Flags F B C B C D E D E H L H L ٣٩ فصل ششم مثال: دستورالعمل هاي لازم براي جمع دو بایت محتويات رجيسترها قبل از اجرای دستورالعمل ها A XX XX F B XX XX C محتويات رجيسترها پس از اجرای دستورالعمل های Load LD A, 53H A 53 XX F LD B, F5H B F5 XX C محتويات رجيسترها پس از اجرای دستورالعملADD ٤٠ فصل ششم ADD A, B A B 48 F5 C=1, Z= F XX C ٢٠
استفاده از فلوچارت براي نوشتن برنامه Start Load 1 Hex Numbers LD B, 32H LD C, A2H LD A, C 2 Add Numbers ADD A, B Display Sum 3 OUT (O١H), A End 4 HALT ٤١ فصل ششم Mnemonics LD B, 32H LD C, A2H LDA, C ADD A, B OUT (O1H), A HALT Hex Code 6 32 E A2 79 8 D3 1 76 2-byte instruction 2-byte instruction 1-byte instruction 1-byte instruction 2-byte instruction 1-byte instruction ٤٢ فصل ششم ٢١
اگر اولین بایت کدهاي ماشین این برنامه در خانه 2 حافظه باشدآدرس بقیه بایت ها را معین کنید. Mem. Add. Hex Code Label Instruction (Opcode) (Operand) Comments 2 6 START: LD B, 32H ; Load first byte 21 32 22 E LD C, A2H ; Load second byte to be added 23 A2 24 79 LD A, C ; Copy one of the bytes into A 25 8 ADD A, B ; Add two bytes 26 D3 OUT (OlH), A ; Display the result 27 1 28 76 HALT ; End ٤٣ فصل ششم نحوه تهیه وآماده کردن یک برنامه براي اجرا Flowchart Z8 Mnemonics Manual Look up Hex Code Monitor Program Binary Code To Memory for Storage ٤٤ فصل ششم ٢٢
تمرین: برنامه اي بنویسید که دو بایت را با هم جمع کند. اگر حاصل از یک بایت زیادتر شد به علامت سرریز عدد 1 را در پورت PORT7 نشان دهد. درغیر این صورت حاصل جمع را در همان پورت بنویسد. ٤٥ فصل ششم Start step 1 Load Numbers In Registers LD B, 32H LD A, A2 step 2 Add Numbers ADD A, B step 3 No Is There Carry? JP NC, DSPLAY Yes step 4 Get Ready to Display 1H LD A, 1H step 5 Display DSPLAY OUT (PORT7), A step 6 End HALT ٤٦ فصل ششم ٢٣
جدول دستورالعمل ها Flags Instruction Opcode Clks Comment S Z H P/ N C ADC HL, HL EC6A 15 HL = HL + HL + Cy? ADC HL, SP ED7A 15 HL = HL + SP + Cy? ADD A, (HL) 86 7 A = A + (HL) ADD A, (lx +dd) DD86dd 19 A = A + (lx+dd) ADD A, (IY+dd) FD86dd 19 A = A + (IY+dd) ADD A, B 8 4 A = A+B ADD A, C 81 4 A = A + C ADD A, D 82 4 A = A + D ADD A, E 83 A = A + E ADD A, H 84 4 A = A + H ٤٧ فصل ششم Instruction OpCode Clks Comment S Z Flags H P/ N C ADC A, (HL) 8E 7 A = A + (HL) + Cy ADC A, (lx+dd) DD8Edd 19 A = A + (IX +dd)+ Cy ADC A, (ly+dd) FD8Edd 19 A = A + (ly+ dd)+cy ADC A, B 88 4 A = A + B + Cy ADC A, C 89 4 A = A + B + Cy ADC A, D SA 4 A = A + D + Cy ADC A,E 88 4 A = A + E + Cy ADC A, H 8C 4 A=A + H + Cy ADC A, L 8D 4 A = A + L + Cy ADC A, A 8F 4 A = A + A + Cy ADC A, d8 CEd8 7 A = A + d8 + Cy ADC HL, BC ED4A 15 HL = HL+ BC + Cy? ADC HL, DE ED5A 15 HL = HL+ DE + Cy? ٤٨ فصل ششم ٢٤
مودهاي آدرس دهی Z8 (Z8 Addressing Modes) مودا درس دهی عبارت است از نحوه مشخص کردن Data يا محلی که Data در ا ن قرار دارد ٤٩ فصل ششم مودهاي آدرس دهی Z8 1-Immediate 3-Immediate extended 5-Modified Page Zero 7-Relative 9-Extended 2-Indexed 4-Register 6-Implied 8-Register Indirect 1- Bit ٥٠ فصل ششم ٢٥
1-Immediate Addressing Mode 1 -آدرس دهی بلافصل Data جزي ی ) کی بایت) از دستورالعمل است مثال: LD C, 3H ٥١ فصل ششم 2-Immediate Extended Addressing Mode 2 -آدرس دهی بلافصل توسعه یافته Data یا آدرس جزي ی (دو بایت) از دستورالعمل است مثال: LD BC, 213H JP 2H ٥٢ فصل ششم ٢٦
3-Register Addressing Mode 3 -آدرس دهی با ثب ات Operand در رجیستر داخلی Z8 قرار دارد مثال: LD B, C ٥٣ فصل ششم 4-Register Indirect Addressing Mode 4 -آدرس دهی با ثبات بطور غیر مستقیم آدرس Data در رجیسترهاي داخلی Z8 قرار دارد مثال: (HL) LD A, ٥٤ فصل ششم ٢٧
5- Extended Addressing Mode 5 -آدرس دهی توسعه یافته آدرس Data به صورت دو بایت (داخل پرانتز) دردستورالعمل مشخص می گردد مثال: (123H) LD A, ٥٥ فصل ششم 6- Implied Addressing Mode 6 -آدرس دهی ضمنی (تلویحی) در این نوع آدرس دهی محل Operand معلوم است مثال: ADD A, B ADD B ٥٦ فصل ششم ٢٨
7- Indexed Addressing Mode 7 -آدرس دهی اندیس دار در این نوع آدرس دهی یک بایت(به صورت مکمل ( 2 داده می شود تا با رجیستر اشاره گر جمع شود وآدرسOperand بدست آید مثال: (IY+5H) LD A, ٥٧ فصل ششم 8- Relative Addressing Mode 8 -آدرس دهی نسبی در این نوع آدرس دهی یک بایت(به صورت مکمل 2) داده می شود تادر دستور Jump نسبی مورد استفاده قرار گیرد مثال: JR F7H F7H = -9 ٥٨ فصل ششم ٢٩
9- Modified Page Zero Addressing Mode 9 -آدرس دهی بااستفاده از صفحه صفر اصلاح شده این نوع آدرس دهی به Call هاي یک بایتی نیز معروف هستند. این 8 دستور عبارتند از: RST H RST 8H RST 1H RST 18H RST 2H RST 28H RST 3H RST 38H 8 دستور RST ٥٩ فصل ششم 1- Bit Addressing Mode 1 -آدرس دهی بیتی در این نوع آدرس دهی یک بیت در یک بایت مشخص می شود. SET 3, B RES 2, C BIT, (HL) ٦٠ فصل ششم ٣٠
صفحه اصلی خلاصه فصل ششم ٦١ فصل ششم ٣١