Giới thiệu: Ngôn ngữ Assembly Z80.

Một phần của tài liệu 20101005022225_lvmmt10 (Trang 55 - 58)

Ngôn ngữ assembly cung cấp ngữ nghĩa khi lập trình, không cần để ý đến cấu trúc lệnh máy. Nó cho phép dùng địa chỉ tượng trưng để phân biệt vị trí bộ nhớ và từ lệnh gợi nhớ ( mã lệnh và toán hạng ) để đại diện cho lệnh. Nhãn được dùng trong chương trình để đánh dấu điểm bắt đầu của lệnh. Toán hạng sau mỗi lệnh đại diện cho nơi chứa, các thanh ghi hay các hằng. Ngôn ngữ assembly hỗ trợ trực tiếp cho các lệnh dưới dạng mã máy. Chương trình được viết bằng ngôn ngữ assembly thì được gọi là chương trình nguồn. Mỗi câu viết trên một hàng và có thể chứa từ 1 đến 4 mục : Nhãn, phép toán, toán hạng, chú thích. Chương trình nguồn được dịch để thu được chương trình dưới dạng

Chỉ đến bảng ngắt, thanh ghi I là địa chỉ

cao, đáp ứng ngoại vi là địa chỉ thấp.

Địa chỉ phục vụ

ngôn ngữ máy (chương trình đối tượng), chương trình đối tượng có thể được thi hành trực tiếp bởi Z80 CPU.

Các cờ chỉ thị trạng thái.

Thanh ghi cờ ( F và F’) cung cấp thông tin cho người dùng về trạng thái Z80 ở bất kỳ thời điểm nào. Vị trí bit cho mỗi cờ được chỉ ra như sau :

S Z X N X P/V N C Trong đó : C : cờ carry N : Cộng hay trừ P/V : cờ Parity hay tràn H : cờ nủa carry Z : Cờ zero S : cờ dấu X : không dùng.

Một trong hai thanh ghi cờ Z80 bao gồm 6 bit mang thông tin về các trạng thái được set hay reset bởi các phép toán. ( bit 3 và bit 5 không được dùng ) 4 bit có thể kiểm tra ( C, P/V, Z và S ) dùng làm điều kiện cho các lệnh Jump, Call hay Return. Hai cờ không kiểm tra được là ( H và N ) và được dùng cho các phép toán số học BCD.

Cờ carry ( C ) :

Bit cờ Carry được set hay reset phụ thuộc vào phép toán được thi hành. Lệnh ‘ADD’ và lệnh ‘Subtract’ có thể set cờ Carry.

Trong các lệnh RLA, RRA, RLS, và RRS bit carry được dùng như là mối liên kết giữa LSB và MSB cho các thanh ghi hay bộ nhớ bất kỳ. Trong các lệnh RLCA, RLC và SLA cờ carry chứa giá trị cuối cùng được dịch ra từ bit 7 của thanh ghi hay bộ nhớ. Trong các lệnh RRCA, RRC, SRA, SRL carry chứa giá trị cuối cùng được dịch ra từ bit 0 của thanh ghi hay bộ nhớ. Trong các lệnh logic AND, OR, XOR carry sẽ bị reset.

Cờ carry cũng có thể được set ( SFC ) và bù ( CCF ).

Cờ này được dùng khi hiệu chỉnh thập phân thanh ghi tích lũy ( DAA ) để phân biệt lệnh ADD và SUBTRACT. Khi dùng lệnh ADD, N sẽ được đặt ở mức logic 0. Khi dùng lệnh SUBTRACT N sẽ được đặt ở mức logic 1.

Cờ chẵn lẻ / tràn ( P/V) :

Cờ này được set phụ thuộc vào phép toán được thi hành.

Với các phép toán số học, cờ này báo tràn khi kết quả trong thanh ghi tích lũy lớn hơn +127 hay nhỏ hơn -128. Điều kiện tràn có thể được xác định nhờ vào các bit dấu của các toán hạng.

Thêm vào đó các phép toán khác dấu sẽ không gây tràn. Khi cộng các toán hạng cùng dấu và kết quả là dấu khác, cờ tràn được set.

Ví dụ :

+120 = 0111 1000 ADDEND +105 = 0110 1001 AUGEND

+225 = 1110 0001 (-95) SUM

Hai số cộng lại và kết quả vượt quá +127 và 2 toán hạng dương có kết quả là số âm (-95), đây là kết quả sai. Cờ tràn được set.

Đối với phép trừ, tràn có thể xảy ra khi các toán hạng khác dấu. Các toán hạng cùng dấu sẽ không bao giờ gây tràn.

Ví dụ :

+127 0111 1111 MINUEND (-) -64 1100 0000 SUBTRAHEND

+191 1011 1111 DIFFERENCE

Cờ bán Carry ( H ) :

Cờ bán carry ( H ) sẽ được set hay reset phụ thuộc vào carry và borrow giữa bit 3 và 4 của phép toán số học 8 bit. Cờ này được dùng khi hiệu chỉnh thập phân thanh ghi tích lũy ( DAA ) để làm đúng kết quả của phép toán cộng hay trừ số BCD. Cờ H sẽ là set(1) hay reset (0) theo bảng sau :

H Cộng Trừ

1 Carry từ bit 3 đến bit 4 Mượn từ bit 4

0 Không có Carry từ bit 3 đến bit 4 Không mượn từ bit 4

Cờ zero được set hay reset nếu kết quả của lệnh là 0.

Đối với các phép toán logic và số học 8 bit, cờ Z sẽ được set lên 1 nếu nội dung thanh ghi tích lũy là 0.

Đối với lệnh so sánh, cờ Z sẽ được set lên 1 nếu nội dung của thanh ghi tích lũy và nội dung của bộ nhớ được chỉ bởi cặp thanh ghi HL giống nhau.

Khi kiểm tra bit trong thanh ghi hay bộ nhớ, cờ Z sẽ chứa trạng thái bù của bit được chỉ định ( xem Bit b,s ).

Khi đang nhập hay xuất 1 byte giữa bộ nhớ với thiết bị I/O ( INI, IND, OUTI, OUTD ) nếu kết quả của B-1 là 0 thì cờ Z được set. Đối với byte được nhập từ thiết bị I/O dùng IN r,(C) , cờ Z sẽ được set để cho biết byte nhập bằng zero.

Cờ dấu ( S ) :

Cờ dấu chứa trạng thái của bit có trọng số lớn nhất của thanh ghi tích lũy ( Bit 7 ).Một số dương được phân biệt bởi ‘0’ ở bit 7 và số âm là ‘1’.

Khi nhập byte từ thiết bị I/O vào thanh ghi, IN r,(C) cờ S sẽ chỉ hoặc số dương (S=0) hoặc số âm (S=1).

Một phần của tài liệu 20101005022225_lvmmt10 (Trang 55 - 58)

Tải bản đầy đủ (DOC)

(181 trang)
w