III. Chương trình ngođn ngữ Assembly cụa 8951:
5. Các chư thị bieđn dịch:
5. Các chư thị bieđn dịch:
ASM51 cung câp các chư thị sau:
Sự đieău khieơn tráng thái bieđn dịch (ORG, AND, USING)
Sự xác định ký hieơu (SEGMENT, EQU, SET, DATA, NDATA,
BIT, CODE)
Sự khởi gán lưu trữ hay đeơ dành trước sự lưu trữ (DS, DBIT, DB, DW)
Sự kêt nôi chương trình (PUBLIC, EXTRN, NAME)
Sự chĩn segment (PSEG, CSEG, DSEG, ISEG, BSEG, XSEG)
5.1 Sự đieău khieơn tráng thái bieđn dịch:
5.1 Sự đieău khieơn tráng thái bieđn dịch:
Chư thị ORG thay đoơi boơ đêm vùng nhớ đeơ đaịt sự khởi đaău moơt chương trình mới bởi tráng thái theo sau đó, dáng cụa chư thị ORG là: ORG Expression
Chư thị END đaịt ở cuôi cùng trong file nguoăn. Dáng cụa nó là END.
Chư thị USING cung câp cho ASM51 dãy thanh ghi tích cực hieơn hành. Dáng chư thị cụa nó là USING Expression
Vieơc dùng địa chư các thanh ghi ký hieơu được định nghĩa trước AR0-AR7 sẽ biên thành địa chư trực tiêp phù hợp cụa dãy thanh ghi tích cực.
Ví dú : USING 3 : Dùng Bank 3 trong dãy thanh ghi. PUSH AR7 : Push R7 (R7=1FH)
PUSH AR7 : Push R7 (R7=0FH)
5.2 Định nghĩa ký hieơu (Symbol Definition):
5.2 Định nghĩa ký hieơu (Symbol Definition):
Dáng chư thị cụa segment như sau: symbol SEGMENT segmenttype
Trong đó symbol là teđn cụa segment có theơ đoơi choê được. Các kieơu segment có theơ CODE (segment mã), XDATA (vùng dữ lieơu ngoài), DATA (vùng dữ lieơu noơi) có theơ truy xuât baỉng sự định vị trực tiêp từ (00H-7FH), IDATA (toàn boơ vùng dữ lieơu noơi), BIT (vùng BIT từ 20H-2FH dữ lieơu noơi).
Ví dú : EPROM SEGMENT CODE cho biêt EPROM cụa moơt segment kieơu code.
Dáng chư thị EQU : symbol EQU Expression Dáng chư thị BIT : symbol BITExpression
Lưu ý raỉng nêu ta dùng chư thị BIT như FLAGS BIT 05H thì ta có theơ SETB FLAGS mà khođng được dùng leơnh MOV.
5.3 Sự khởi gán/dành lưu trữ trước (Storage Initilization/Reservation)
5.3 Sự khởi gán/dành lưu trữ trước (Storage Initilization/Reservation)
Các chư thị cụa Storage Initilization khởi gán và Storage Reservation đeơ dành moơt vùng nhớ trong từ, byte hoaịc các đơn vị bit. Vùng được dành trước khi baĩt đaău tái vùng nhớ được chư rõ bởi giá trị hieơn hành cụa boơ đêm vùng nhớ trong segment tích cực đang hieơn hành. Các chư thị này có theơ đứng trước moơt nhãn.
5.3.1 Khai báo lưu trữ DS (Define Storage)
Dáng phát bieơu DS là : [label:]DS Expression
Phát bieơu DS dành moơt vùng nhớ trong đơn vị byte. Nó có theơ được dùng trong bât kỳ phát bieơu segment nào ngối trừ BIT. Khi phát bieơu DS được baĩt gaịp trong chương trình thì boơ đêm vị trí location cụa segment hieơn hành được taíng leđn moơt khoạng baỉng giá trị cụa bieơu thức. Toơng cụa boơ đêm location và bieơu thức đã được định rõ sẽ khođng vược quá sự hán chê cụa vùng hieơn hành.
Phát bieơu sau táo ra moơt vùng đeơm 40 byte trong segment dữ lieơu noơi.
DSEG AT 30 : Đaịt vào segment data noơi. LENGTH EQU 40
Nhãn BUFFER tượng trưng cho địa chư cụa location đaău tieđn cụa vùng nhớ được lưu trữ. Trong ví dú tređn buffer đaĩt đaău ở địa chư 30H bởi từ “AT 30” được định rõ bởi DSEG. Vùng đeơm này có theơ xoá như sau:
MOV R7,#LENGTH : R7 chứa con sô LENGTH là 40
MOV R0,#BUFFER : R0 chứa địa chư tái buffer là 30H
LOOP : MOV @R0,#0 : Laăn lượt xoá DJNZ,R7,LOOP
(continue)
Đeơ táo ra vùng đeơm 1000 byte trong RAM ngối baĩt đaău tái địa chư 4000H, các chư thị sau đađy có theơ được dùng:
XSTART EQU 4000H XLENGTH EQU 1000H
XSEG AT XSTART : Phađn đốn data ngoài baĩt đaău ở 4000H
XBUFFER: DS XLENGTH : Táo ra moơt vùng đeơm có đoơ dài 1000byte
Các leơnh sau đađy có theơ dùng đeơ xoá vùng đeơm tređn :
MOV DPTR,#BUFFER: Đưa địa chư 4000H và DPTR
LOOP : CLR A
MOVX @DPTR : Xoá noơi dúng từ địa chư 4000H trở đi INC DPTR : Taíng theđm 1 ( trường hợp đaău trở thành 4001H) MOV A,DPL
CJNZ A,#LOW (XBUFFER=LENGTH+1),LOOP MOV A,DPH
CJNZ A,HIGH (XBUFFER=XLENGTH+1),LOOP (Continue)
Nêu so sánh hai cách dùng tređn dành cho byte thâp và byte cao DPTR, Vì leơnh CJNZ chư làm nhieơm vú đôi với thanh ghi A hoaịc thanh ghi Rn, do đó byte thâp hoaịc byte cao cụa boơ đêm dữ lieơu phại được MOV vào A trước khi đên leơnh CJNZ. Vòng laịp chư kêt thúc khi boơ đêm dữ lieơu đã được đĩc địa chư XBUFFER+XLENGTH+1
5.3.2 Khai báo DBIT (Define Bit)
Chư thị DBIT dành trước vùng nhớ các đơn vị bit, nó có theơ được dùng trong 1 segment bit. Khi phát bieơu này được baĩt gaịp trong chương trình thì boơ đêm vị trí cụa segment hieơn hành được coơng theđm giá trị cụa bieơu thức.
5.3.3 Khai báo byte DB (Define Byte)
Sự thành laơp chư thị ĐAỊC BIEƠT : [label:] ĐAỊC BIEƠT Expression [,Expression] [...]
Chư thị DB khởi gán boơ mã neđn segment CODE phại tích cực. Danh sách bieơu thức là moơt chuoêi cụa moơt hay nhieău giá trị byte (moêi cách có theơ là moơt bieơu thức) được phađn ra bởi dâu phaơy.
Chư thị DB cho phép các chuoêi ký tự (được kèm trong dâu ngoaịc kép đơn) dài hơn 2 ký tự. Moêi ký tự trong chuoêi được biên thành mã ASCII tương ứng. Nêu moơt nhãn được dùng thì nhãn đó đã được ân định địa chư cụa byte đaău tieđn.
Ví dú : CSEG AT 0100H
DSQUARES : DB 0,1,4,9,16,25 :Bình phương từ 0-5
Kêt quạ cụa sự phađn chia boơ nhớ hexa cụa boơ nhớ mã ngoài như sau :
Address Content Note
0100H 00H Cửa sô 0 0101H 01H Cửa sô 1 0102H 04H Cửa sô 4 0103H 9H Cửa sô 9 0104H 10H Cửa sô 16 0105H 19H Cửa sô 25
5.3.4 Khai báo từ DW (Define Word)
Sự thành laơp : [label:]DW Expression [,Expression][...]
Chư thị giông chư thị DB ngối trừ hai vị trí nhớ 16 bit được chia làm moêi khoạng dữ lieơu.
Ví dú :
CSEG AT 200H DW 1234H,2
0200H 12H Byte cao 1234H
0201H 34H Byte thâp 1234H
0202H 00H Byte cao cụa 2