III. Chương trình ngođn ngữ Assembly cụa 8951:
3. Sự saĩp đaịt chương trình ngođn ngữ Assmebly:
3. Sự saĩp đaịt chương trình ngođn ngữ Assmebly:
Chương trình ngođn ngữ Asembly bao goăm: Các leơnh máy, lời chư chị cụa trình bieđn dịch, sự đieău khieơn bieđn dịch và các chú thích.
Các leơnh máy là các kỹ xạo cụa leơnh có theơ thực thi (ví dú như ANL). Các chư thị cụa trình bieđn dịch là các leơnh đeơ trình bieđn dịch định câu trúc chương trình, các dữ lieơu, ký hieơu, haỉng, … (ví dú Org ). Các sự đieău khieơn trình bieđn dịch set các mode cụa trình bieđn dịch và đieău khieơn sự cháy chương trình Assembly (ví dú STILLE ).
Các chú thích hốt đoơng cụa leơnh.
Các leơnh phại ghi theo nguyeđn taĩc rõ ràng đeơ được trình bieđn dịch hieơu. Sự saĩp xêp cụa chúng như sau:
(Label:) mnemonic [operand][:operand][...][:comment] 3.1 Vùng nhãn (label Field ):
3.1 Vùng nhãn (label Field ):
Moơt nhãn tượng trưng cho địa chư cụa leơnh (hoaịc dữ lieơu ) theo sau nhãn. Khi các rẽ nhánh đên leơnh này, nhãn được dùng trong vùng toán háng cụa nhánh (hoaịc leơnh nhạy).
Các “nhãn“ là moơt kieơu ký hieơu, sau nhãn phại có dâu hai châm (:) còn sau ký hieơu thì khođng.
Các kieơu ký hieơu được quy cho các giá trị hoaịc quy cho vieơc dùng các chư thị như: EQU, SEGMENT, BIT, DATA, … Các ký hieơu có theơ là địa chư, haỉng, data, teđn các segment hoaịc sự xađy dựng khác được hieơu bởi người laơp trình. Sau đađy là moơt ví dú đeơ phađn bieơt nhãn và ký hieơu:
PRA EQU 500 : PRA là ký hieơu tượng trưng giá trị 500
START :MOV A , #0FFH :START là nhãn tương trưng địa chư leơnh MOV
Moơt ký hieơu hoaịc moơt nhãn phại baĩt đaău moơt chữ cái dâu “?”, hoaịc dâu “-“; phại được theo sau baỉng moơt chữ cái, các sô, dâu “?” hay “-“, và có theơ chứa tới 31 ký tự.
3.2 Vùng thuaơt nhớ (Mnemonic Field ):
3.2 Vùng thuaơt nhớ (Mnemonic Field ):
Các thuaơt nhớ hay các chư chị bieđn dịch đi vào vùng thuaơt nhớ theo sau vùng nhãn. Ví dú các thuaơt nhớ leơnh như: ADD, MOV, DIV, INC, … ; các chư thị bieđn dịch như : ORG , EQU.
3.3 Vùng toán háng (Operand Field):
3.3 Vùng toán háng (Operand Field):
Vùng toán háng theo sau vùng thuaơt nhớ. Vùng này chứa địa chư hay dữ lieơu được dùng bởi leơnh. Moơt nhãn có theơ dùng đeơ tượng trưng cho haỉng dữ lieơu. Các khạ naíng cho phép vùng toán háng phú thuoơc lớn vào các hốt đoơng. Moơt vài hốt đoơng khođng có toán háng như : RET, NOP trong khi các hốt đoơng khác cho phép nhieău toán háng được phađn ra baỉng dâu phaơy.
3.4 Vùng chú thích (Comment Field ):
3.4 Vùng chú thích (Comment Field ):
Các chú thích phại deê hieơu đaịt đeơ giại thích leơnh, và có dâu châm phaơy ở đaău. Khôi chú thích trong khung đeơ giại thích tính chât chung cụa phaăn chương trình được caĩt ra beđn dưới.
3.5 Các ký hieơu bieđn dịch đaịc bieơt (Special Assembler Symbol ):
3.5 Các ký hieơu bieđn dịch đaịc bieơt (Special Assembler Symbol ):
Các ký hieơu bieđn dịch đaịc bieơt được dùng trong các mode định vị thanh ghi cú theơ chúng bao goăm các thanh ghi A, Ro – R7, DPTR, PC,C, AB, hay các ký hieơu $ được dùng đeơ quy vào giá trị hieơn hành cụa boơ đêm Location.
Ví dú : leơnh JNZ T1 , $ tương đương với leơnh sau : HERE : JNZ T1, HERE
3.6 Địa chư gián tiêp (Indirect Address):
3.6 Địa chư gián tiêp (Indirect Address):
Đôi với moơt sô leơnh dùng toán háng có theơ xác định thanh ghi mà nó chứa địa chư gián tiêp và nó chư có theơ dùng với R0, R1 , DPTR. Ví dú leơnh MOV A, @R0 khođi phúc lái byte dữ lieơu từ RAM noơi tái địa chư được định rõ trong R0.
Leơnh MOVC, @A + PC khođi phúc lái byte dữ lieơu từ boơ nhớ dữ lieơu ngoài tái địa chư được táo thành bởi vieơc coơng noơi dung thanh ghi tích lũy A và boơ đêm chương trình.
3.7 Dữ lieơu tức thời (Immediate Data ):
3.7 Dữ lieơu tức thời (Immediate Data ):
Các leơnh dùng sự định vị tức thời cung câp dữ lieơu vào vùng toán háng, ký hieơu # đaịt trước dữ lieơu tức thời. Ví dú:
CONSTANT EQU 100 MOV A, 0FFH
ORL 40H, # CONSTANT
3.8 Địa chư dữ lieơu (Data Address):
3.8 Địa chư dữ lieơu (Data Address):
Nhieău leơnh truy xuât các vùng nhớ dùng sự định vị trực tiêp và đòi hỏi moơt địa chư nhớ dữ lieơu tređn chip (00 – FFH) hay moơt địa chư SFR (80H – FFH) tređn vùng toán háng. Các ký hieơu đã được định nghĩa có theơ được dùng cho các địa chư SFR. Ví dú:
MOV A, 45H hay MOV A, SBUF.
3.9 Địa chư Bit (Bit Address):
3.9 Địa chư Bit (Bit Address):
Moơt trong những đieơm mánh cụa 8951 là khạ naíng truy xuât các bit rieđng lẹ, khođng caăn các hốt đoơng trang bị tređn byte. Các leơnh truy xuât các bit định vị phại cung câp moơt địa chư trong boơ nhớ dữ lieơu noơi (00H – 7FH) hoaịc địa chư bit trong các SFR (80H - FFH).
Có 3 cách đeơ xác định địa chư bit trong ođ nhớ dữ lieơu: Dùng địa chư bit trực tiêp, dùng hốt đoơng đieơm giữa địa chư byte và địa chư bit, dùng ký hieơu bieđn dịch đã được định nghĩa.
Ví dú:
SETB 0E7H : Dùng địa chư trực tiêp. SETB ACC, 7 :Dùng hốt đoơng đieơm.
JNZ T1 ,$ : Dùng ký hieơu được định nghĩa “TT”.
3.10 Địa chư mã (Code Address):
3.10 Địa chư mã (Code Address):
Địa chư mã được dùng trong toán háng cho các leơnh nhạy, bao goăm các sự nhạy tương đôi (như SJMP và các leơnh nhạy có đieău kieơn), các sự nhạy và các sự gĩi tuyeơt đôi (ACALL , AJMP). Địa chư mã thường được cho ở dáng nhãn sau:
HERE: _ _ _
SJMP HERE
ASM51 sẽ xác định địa chư mã đúng và loăng vào Offset đúng được ký hieơu 8 bit leơnh, địa chư trang 11 bit hoaịc địa chư dài 16 bit cho thích hợp.
3.11 Các sự nhạy và gĩi chung ( generic Jump and Calls):
3.11 Các sự nhạy và gĩi chung ( generic Jump and Calls):
ASM51 cho phép người laơp trình dùng thuaơt nhớ JMP chung hay CALL chung. Leơnh “JMP “có theơ được dùng thay cho “SJMP, AJMP, LJMP“ và “CALL” có theơ thay cho ACALL hay LCALL. Sự bieđn dịch biên đoơi thuaơt nhớ chung đêm moơt leơnh “thực tê“ sau vài qui luaơt đơn giạn, thuaơt nhớ chung biên đoơi thành dáng tuyeơt đôi nêu nhạy hay gĩi trong trang 2k. Nêu các dáng ngaĩn và tuyeơt đôi khođng dùng thì sẽ được chuyeơn thành dáng dài.