Bài ging hp ng Chng II: Các lnh c bn ca hp ng 15 CHNG II: CÁC LNH C BN CA HP NG 2.1 Cu trúc chng trình 2.1.1 Ví d có cái nhìn tng quát v mt chng trình hp ng, ta xét ví d sau ây: TITLE VI DU 1 .MODEL SMALL .STACK 100H .DATA A DB 4 B DB 6 C DB ? .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV AL, A ADD AL, B MOV C, AL MOV AX, 4C00H INT 21H MAIN ENDP END MAIN Bc u ta cha cn quan tâm ti ý ngha ca các lnh mà ch cn quan tâm ti b c ca chung chng trình, các t khoá c bn, cách vit các câu lnh 2.1.2 Gii thích Nhìn chung, cu trúc ca mt chng trình hp ng có 3 phn: Phn tên, phn khai báo và phn mã lnh. a) Phn tên Tên chng trình c vit sau t khoá TITLE u chng trình. Tên có th cha u cách và các kí tc bit khác. Thông thng phn tên s cho ta bit mc ích, nhim v hoc ni dung tóm tt ca chng trình. Ví d: TITLE VI DU 1 b) Phn khai báo Trong hp ng có nhiu ni dung cn phi khái báo nh kiu b nh, ngn xp, bin, ng • Khai báo kiu b nh Kiu b nhc vit sau t .MODEL. Kiu b nh s quy nh kích thc ca n mã và d liu trong chng trình. Trong chng trình phn 2.1.1, kiu b nh là SMALL, ngha là kiu b nh nh, mã lnh s nm trong 1 n nh, d liu nm trong 1 n nh. Ngoài kiu SMALL còn có nhiu kiu b nh khác: MEDIUM Mã lnh chim nhiu hn 1 n liu trong 1 n COMPACT Mã lnh trong 1 n Bài ging hp ng Chng II: Các lnh c bn ca hp ng 16 liu chim nhiu hn 1 n LARGE Mã lnh chim nhiu hn 1 n liu chim nhiu hn 1 n Không có mng nào ln hn 64 KB HUGE Mã lnh chim nhiu hn 1 n liu chim nhiu hn 1 n Các mng có th ln hn 64 KB • Khai báo kích thc ngn xp Kích thc ngn xp c vit sau t .STACK Ví d: .STACK 100H Khí ó kích thc vùng b nh dùng làm ngn xp là 100H Bytes (các vn v ngn xp s trình bày k trong chng 6) • Khai báo d liu Khai báo d liu c vit sau t .DATA. Các bin ca chng trình sc khai báo phn này. Ví d 1: A DB 4 Trong ó: A là tên bin, DB là kiu d liu (bin kiu DB s có kích thc 1 byte), 4 là giá tr ban u ca bin. Ví d 2: B DW ? Trong ví d này, bin B s có kiu là DW (1 Word) và không có giá tr khi to. Khai báo hng: Ví d: H EQU 2Bh ng H s nhn giá tr bng 2Bh. Quy tc t tên (Bin, hng, nhãn, th tc): + Tên có chiu dài ti a 31 kí t. + Có th cha ch cái, ch s và các kí tc bit (? . @ _ $ %). + Không c bt u bng s. + Nu dùng du chm thì nó phi ng u tiên. + Tên không c cha du cách. Nói chung, trong hp ng không phân bit ch hoa và ch thng. c) Phn mã lnh Phn này bao gm các th tc c vit sau t .CODE. Trong s các th tc này phi chn mt th tc làm chng trình chính, tên ca th tc ó c vit sau t END cui chng trình. Tên chng trình chính thng t là MAIN, cng có th chn mt tên khác. • u trúc mt th tc: <Tên th tc> PROC Lnh 1 Lnh 2 Lnh 3 <Tên th tc> ENDP Bài ging hp ng Chng II: Các lnh c bn ca hp ng 17 • u trúc chung ca phn mã lnh: .CODE <Tên chng trình chính> PROC Lnh 1 Lnh 2 Lnh 3 <Tên chng trình chính> ENDP Các th tc khác END <Tên chng trình chính> 2.2 Mt s lnh thng dùng 2.2.1 Cu trúc câu lnh hp ng Mt câu lnh hp ng có th chia làm 2 phn: Tên lnh và các toán hng. Tên lnh vit trc, các toán hng vit sau. Nu có nhiu toán hng thì chúng c phân cách vi nhau ng du phy (,). <Tên lnh> <Toán hng 1> [, <Toán hng 2> ] [;Li chú thích] Ngoài ra có th vit thêm các li chú thích làm rõ ý ngha câu lnh. Li chú thích c bt u bng du chm phy (;). Ví du: MOV DS, AX ;Chuyn ni dung ca thanh ghi AX vào thanh ghi DS MOV là tên lnh. DS và AX là các toán hng. • u ý: Các lnh c trình bày trong tài liu này hu ht thuc tp lnh ca b vi x lý 8086, tr mt s trng hp s có chú thích riêng. 2.2.2 Mt s lnh thng dùng a) Lnh MOV (Move) Lnh này c s dng chuyn d liu gia các thanh ghi hay ô nh. Cú pháp lnh: MOV <ích>, <Ngun> ích>: là mt thanh ghi hay mt ô nh <Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s liu sc chuyn t Ngun vào ích (ni dung ca Ngun không thay i sau khi chuyn). Ví d 1: MOV AX, 4C00h nh trên chuyn giá tr 4C00h vào thanh ghi AX. Ví d 2: MOV AL, A nh trên chuyn giá tr ca bin A vào thanh ghi AL. Chú ý: • Không c chuyn trc tip ni dung ca hai thanh ghi n cho nhau. Bài ging hp ng Chng II: Các lnh c bn ca hp ng 18 Ví d: MOV CS, DS nh trên b sai do c CS và DS u là thanh ghi n. Mun thc hin c u này thì phi s dng mt bin hay mt thanh ghi khác làm trung gian: Ví d: MOV AX, DS ; dùng AX làm trung gian MOV CS, AX • Không c chuyn trc tip ni dung ca hai bin cho nhau. Ví d: MOV A, B Lnh này không thc hin c • Không c chuyn trc tip mt hng s vào mt thanh ghi n. Ví d: MOV DS, 2000h Nói chung, mun khc phc các trng hp nêu trên trên thì ta u phi s dng trung gian. b) Lnh XCHG (Exchange) Lnh này dùng hoán i d liu d liu gia hai toán hng. Cú pháp lnh: MOV <Toán hng 1>, <Toán hng 2> Các toán hng có th là thanh ghi công dng chung, hoc mt thanh ghi công dng chung và mt ô nh. Ví d 1: XCHG AX, BX ;hoán i ni dung ca AX và BX c) Lnh ADD và SUB (Subtract) Cú pháp lnh: ADD <ích>, <Ngun> SUB <ích>, <Ngun> ích>: là mt thanh ghi hay mt ô nh <Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s ích>,<Ngun> không ng thi là hai ô nh. nh ADD s thc hin phép cng ích vi Ngun, kt qu cha trong ích. nh SUB s ly ích tri Ngun, kt qu cha trong ích. Ví d: ADD AX, 10 ;Tng ni dung ca thanh ghi AX lên 10 ADD BX, AX ;Cng ni dung 2 thanh ghi AX và BX, tng ct vào BX SUB AX, B ;Tr ni dung thanh ghi AX cho bin B. d) Lnh INC (Increment) và DEC (Decrement) Cú pháp lnh: INC <ích> DEC <ích> ích>: là mt thanh ghi hay mt ô nh nh INC s tng ích lên 1 (cng ích vi 1). nh DEC s gim ích i 1 (trích cho 1). Ví d: INC AH ;Cng ni dung ca thanh ghi AH vi 1 DEC B ;Tr giá tr ca bin B cho 1 Bài ging hp ng Chng II: Các lnh c bn ca hp ng 19 e) Lnh NEG (Negartive) Cú pháp lnh: NEG <ích> ích>: là mt thanh ghi hay mt ô nh. nh này có tác dng i du toán hng ích. Ví d: NEG AL 2.3 Nhp xut d liu 2.3.1 Chng trình ngt Chng trình ngt là nhng chng trình con ã c vit sn nhm thc hin nhng chc nng c bn khi thao tác vi máy tính. Các chng trình con này c phân phi kèm theo các phn mm u khin h thng nh BIOS, Hu hành. Mi chng trình có mt s hiu riêng (0, 1, 2, ). Khi lp trình ta có th s dng các chng trình con có n này bng cách dùng lnh INT (interrupt). Cú pháp lnh: INT <S hiu ngt> Ví d 1: INT 21h nh trên s gi thc hin chng trình ngt s 21h (ây là s hiu ngt hay s dng nht a DOS). Ví d 2: INT 13h nh trên s gi thc hin chng trình ngt s 13h (ây là s hiu ngt ca BIOS, dùng thao tác vi a t). Chi tit v các ngt và chng trình x lý ngt s trình bày trong chng 8. 2.3.2 Chc nng nhp - xut ca ngt 21h Ngt 21h ca DOS cung cp rt nhiu chc nng khác nhau, mi chc nng cng có t s hiu riêng (0, 1, 2, ). Trong phn này ta ch quan tâm ti chc nng nhp - xut liu. Cách s dng ngt 21h: Trc khi gi ngt cn xác nh c s hiu chc nng, s hiu ó c t vào thanh ghi AH. Ngoài ra cng cn quan tâm ti các tham s khác (chng trình ngt s s dng thanh ghi nào? Giá tr ca chúng bng bao nhiêu? ) a) Chc nng hin mt kí t ra màn hình ây là chc nng s 2 ca ngt 21h. Các tham s cn thit gi ngt nh sau: Vào: AH = 2 DL = Mã ASCII ca kí t cn hin th Ra: AL cha mã ASCII ca kí t hin th Ví d 2: Hin kí t ‘M’ ra màn hình MOV AH, 2 MOV DL, ‘M’ INT 21h Sau ây là chng trình y : Bài ging hp ng Chng II: Các lnh c bn ca hp ng 20 TITLE HIEN KI TU .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 2 ;Chc nng s 2 MOV DL, ’M’ ;Kí t cn hin th INT 21h ;Gi ngt MOV AH, 4Ch ;Kt thúc INT 21h MAIN ENDP END MAIN Ta có th s dng mã ASCII ca kí t hoc vit trc tip kí t gia 2 du nháy n nh trong chng trình trên (nói chung, các kí t và chui kí t trong hp ng phi có u nháy n 2 u). Ngoài chc nng s 2, trong chng trình trên còn s dng chc nng s 4Ch ca ngt 21h. Chc nng này có tác dng kt thúc chng trình và tr li quyn u khin cho h u hành DOS. b) Chc nng hin mt chui kí t ra màn hình ây là chc nng s 9 ca ngt 21h. Các tham s cn thit gi ngt nh sau: Vào: AH = 9 DX = a ch offset ca vùng nh cha chui kí t Ví d: Hin ra màn hình dòng ch: KHOA CONG NGHE THONG TIN Gii: TITLE HIEN CHUOI KT .MODEL SMALL .STACK 100H .DATA ChuoiKT DB ’KHOA CONG NGHE THONG TIN$’ .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV AH, 9 ;Chc nng s 9 LEA DX, ChuoiKT ;Ly a ch chui kí tt vào DX INT 21h ;Gi ngt MOV AH, 4Ch ;Kt thúc INT 21h Bài ging hp ng Chng II: Các lnh c bn ca hp ng 21 MAIN ENDP END MAIN Trong chng trình trên có mt sm cn lu ý: • Chui kí t cn hin th phi c kt thúc bng du $. • u trong chng trình có s dng khai báo d liu .DATA thì u ca chng trình chính phi có các lnh: MOV AX, @DATA MOV DS, AX c ích là t a ch segment ca n d liu vào thanh ghi DS. • Chng trình trên có s dng lnh LEA (Load Effective Address). Cú pháp lnh nh sau: LEA <ích>, <Ngun> ích>: là mt thanh ghi công dng chung. <Ngun>: là mt ô nh. nh này s ly a ch offset ca Ngun t vào ích. c) Chc nng nhp mt kí t t bàn phím ây là chc nng s 1 ca ngt 21h. Các tham s cn thit gi ngt nh sau: Vào: AH = 1 Ra: AL cha mã ASCII ca kí t Các lnh c th nh sau: MOV AH, 1 INT 21h Khi gp các lnh trên, chng trình s dng li ch ta gõ mt kí t t bàn phím, mã ASCII ca kí tó sc ct trong thanh ghi AL. Ví d: Nhp mt kí t thng t bàn phím, i nó thành kí t in hoa ri hin ra màn hình. Gii: TITLE DOI KI TU .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 1 ;Chc nng s 1: Nhp mt kí t INT 21h SUB AL, 20h ;i kí t sang in hoa MOV AH, 2 ;Chc nng s 2: Hin kí t MOV DL, AL INT 21h MOV AH, 4Ch ;Kt thúc Bài ging hp ng Chng II: Các lnh c bn ca hp ng 22 INT 21h MAIN ENDP END MAIN Gii thích: Mã ASCII ca kí t thng ln hn kí t in hoa tng ng là 20h. Mun chuyn t kí t thng thành in hoa thì ch vic ly mã ASCII ca nó tri 20h. 2.4 Cách chy mt chng trình hp ng có th chy mt chng trình hp ng thì trc ht phi biên dch nó thành file thi hành (EXE, COM). Có nhiu công c biên dch khác nhau do nhiu hãng phn mm sn xuát. Ta s s dng b công c MASM (Microsoft Macro Assembler) ca hãng MicroSoft vì nó khá nh gn và d dùng. bt u thì ta ch cn ti hai file: MASM.EXE và LINK.EXE. Các bc thc hin nh sau: • c 1: Son tho ni dung chng trình bng mt công c son tho text bt kì, ct vào file i phn m rng là ASM. Ví d: tên file là Baitap.asm • c 2: ch file ASM thành file OBJ bng công c MASM.EXE. Gõ lnh nh sau: MASM Baitap; (Enter) (file MASM.EXE và file Baitap.asm nên cùng mt th mc) u dch thành công (chng trình không có li) thì ta s thu c file Baitap.obj. u chng trình b li thì phi sa, sau ó tin hành dch li. • c 3: dng công c LINK.EXE liên kt các file OBJ thu c bc 2 thành file thi hành c (EXE). Vì trong ví d này ch có 1 file OBJ nên cách gõ lnh nh sau: LINK Baitap; (Enter) (file LINK.EXE cng cùng th mc nói trên) Bài ging hp ng Chng II: Các lnh c bn ca hp ng 23 Ta s thu c file Baitap.exe. chy file này ch vic gõ lnh: Baitap (Enter) . INT 21 h SUB AL, 20 h ;i kí t sang in hoa MOV AH, 2 ;Chc nng s 2: Hin kí t MOV DL, AL INT 21 h MOV AH, 4Ch ;Kt thúc Bài ging hp ng Chng II: Các lnh c bn ca hp ng 22 INT 21 h MAIN. trình bày trong chng 8. 2. 3 .2 Chc nng nhp - xut ca ngt 21 h Ngt 21 h ca DOS cung cp rt nhiu chc nng khác nhau, mi chc nng cng có t s hiu riêng (0, 1, 2, ). Trong phn này ta. AH, 2 MOV DL, ‘M’ INT 21 h Sau ây là chng trình y : Bài ging hp ng Chng II: Các lnh c bn ca hp ng 20 TITLE HIEN KI TU .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 2 ;Chc