Bài giảng hợp ngữ - Chương 2 pot

9 383 1
Bài giảng hợp ngữ - Chương 2 pot

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài ging hp ng Chng II: Các lnh c bn ca hp ng 15 CHNG II: CÁC LNH C BN CA HP NG 2.1 Cu trúc chng trình 2.1.1 Ví d  có cái nhìn tng quát v mt chng trình hp 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 Bc u ta cha cn quan tâm ti ý ngha ca các lnh mà ch cn quan tâm ti b c ca chung chng trình, các t khoá c bn, cách vit các câu lnh 2.1.2 Gii thích Nhìn chung, cu trúc ca mt chng trình hp ng có 3 phn: Phn tên, phn khai báo và phn mã lnh. a) Phn tên Tên chng trình c vit sau t khoá TITLE u chng trình. Tên có th cha u cách và các kí tc bit khác. Thông thng phn tên s cho ta bit mc ích, nhim v hoc ni dung tóm tt ca chng trình. Ví d: TITLE VI DU 1 b) Phn khai báo Trong hp ng có nhiu ni dung cn phi khái báo nh kiu b nh, ngn xp, bin, ng • Khai báo kiu b nh Kiu b nhc vit sau t .MODEL. Kiu b nh s quy nh kích thc ca n mã và d liu trong chng trình. Trong chng trình  phn 2.1.1, kiu b nh là SMALL, ngha là kiu b nh nh, mã lnh s nm trong 1 n nh, d liu nm trong 1 n nh. Ngoài kiu SMALL còn có nhiu kiu b nh khác: MEDIUM Mã lnh chim nhiu hn 1 n  liu trong 1 n COMPACT Mã lnh trong 1 n Bài ging hp ng Chng II: Các lnh c bn ca hp ng 16  liu chim nhiu hn 1 n LARGE Mã lnh chim nhiu hn 1 n  liu chim nhiu hn 1 n Không có mng nào ln hn 64 KB HUGE Mã lnh chim nhiu hn 1 n  liu chim nhiu hn 1 n Các mng có th ln hn 64 KB • Khai báo kích thc ngn xp Kích thc ngn xp c vit sau t .STACK Ví d: .STACK 100H Khí ó kích thc vùng b nh dùng làm ngn xp là 100H Bytes (các vn  v ngn xp s trình bày k trong chng 6) • Khai báo d liu Khai báo d liu c vit sau t .DATA. Các bin ca chng trình sc khai báo  phn này. Ví d 1: A DB 4 Trong ó: A là tên bin, DB là kiu d liu (bin kiu DB s có kích thc 1 byte), 4 là giá tr ban u ca bin. Ví d 2: B DW ? Trong ví d này, bin B s có kiu là DW (1 Word) và không có giá tr khi to. Khai báo hng: Ví d: H EQU 2Bh ng H s nhn giá tr bng 2Bh. Quy tc t tên (Bin, hng, nhãn, th tc): + Tên có chiu dài ti a 31 kí t. + Có th cha ch cái, ch s và các kí tc bit (? . @ _ $ %). + Không c bt u bng s. + Nu dùng du chm thì nó phi ng u tiên. + Tên không c cha du cách. Nói chung, trong hp ng không phân bit ch hoa và ch thng. c) Phn mã lnh Phn này bao gm các th tc c vit sau t .CODE. Trong s các th tc này phi chn mt th tc làm chng trình chính, tên ca th tc ó c vit sau t END  cui chng trình. Tên chng trình chính thng t là MAIN, cng có th chn mt tên khác. • u trúc mt th tc: <Tên th tc> PROC Lnh 1 Lnh 2 Lnh 3 <Tên th tc> ENDP Bài ging hp ng Chng II: Các lnh c bn ca hp ng 17 • u trúc chung ca phn mã lnh: .CODE <Tên chng trình chính> PROC Lnh 1 Lnh 2 Lnh 3 <Tên chng trình chính> ENDP Các th tc khác END <Tên chng trình chính> 2.2 Mt s lnh thng dùng 2.2.1 Cu trúc câu lnh hp ng Mt câu lnh hp ng có th chia làm 2 phn: Tên lnh và các toán hng. Tên lnh vit trc, các toán hng vit sau. Nu có nhiu toán hng thì chúng c phân cách vi nhau ng du phy (,). <Tên lnh> <Toán hng 1> [, <Toán hng 2> ] [;Li chú thích] Ngoài ra có th vit thêm các li chú thích  làm rõ ý ngha câu lnh. Li chú thích c bt u bng du chm phy (;). Ví du: MOV DS, AX ;Chuyn ni dung ca thanh ghi AX vào thanh ghi DS MOV là tên lnh. DS và AX là các toán hng. • u ý: Các lnh c trình bày trong tài liu này hu ht thuc tp lnh ca b vi x lý 8086, tr mt s trng hp s có chú thích riêng. 2.2.2 Mt s lnh thng dùng a) Lnh MOV (Move) Lnh này c s dng  chuyn d liu gia các thanh ghi hay ô nh. Cú pháp lnh: MOV <ích>, <Ngun> ích>: là mt thanh ghi hay mt ô nh <Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s  liu sc chuyn t Ngun vào ích (ni dung ca Ngun không thay i sau khi chuyn). Ví d 1: MOV AX, 4C00h nh trên chuyn giá tr 4C00h vào thanh ghi AX. Ví d 2: MOV AL, A nh trên chuyn giá tr ca bin A vào thanh ghi AL. Chú ý: • Không c chuyn trc tip ni dung ca hai thanh ghi n cho nhau. Bài ging hp ng Chng II: Các lnh c bn ca hp ng 18 Ví d: MOV CS, DS nh trên b sai do c CS và DS u là thanh ghi n. Mun thc hin c u này thì phi s dng mt bin hay mt 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 chuyn trc tip ni dung ca hai bin cho nhau. Ví d: MOV A, B Lnh này không thc hin c • Không c chuyn trc tip mt hng s vào mt thanh ghi n. Ví d: MOV DS, 2000h Nói chung, mun khc phc các trng hp nêu trên trên thì ta u phi s dng trung gian. b) Lnh XCHG (Exchange) Lnh này dùng  hoán i d liu d liu gia hai toán hng. Cú pháp lnh: MOV <Toán hng 1>, <Toán hng 2> Các toán hng có th là thanh ghi công dng chung, hoc mt thanh ghi công dng chung và mt ô nh. Ví d 1: XCHG AX, BX ;hoán i ni dung ca AX và BX c) Lnh ADD và SUB (Subtract) Cú pháp lnh: ADD <ích>, <Ngun> SUB <ích>, <Ngun> ích>: là mt thanh ghi hay mt ô nh <Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s ích>,<Ngun> không ng thi là hai ô nh. nh ADD s thc hin phép cng ích vi Ngun, kt qu cha trong ích. nh SUB s ly ích tri Ngun, kt qu cha trong ích. Ví d: ADD AX, 10 ;Tng ni dung ca thanh ghi AX lên 10 ADD BX, AX ;Cng ni dung 2 thanh ghi AX và BX, tng ct vào BX SUB AX, B ;Tr ni dung thanh ghi AX cho bin B. d) Lnh INC (Increment) và DEC (Decrement) Cú pháp lnh: INC <ích> DEC <ích> ích>: là mt thanh ghi hay mt ô nh nh INC s tng ích lên 1 (cng ích vi 1). nh DEC s gim ích i 1 (trích cho 1). Ví d: INC AH ;Cng ni dung ca thanh ghi AH vi 1 DEC B ;Tr giá tr ca bin B cho 1 Bài ging hp ng Chng II: Các lnh c bn ca hp ng 19 e) Lnh NEG (Negartive) Cú pháp lnh: NEG <ích> ích>: là mt thanh ghi hay mt ô nh. nh này có tác dng i du toán hng ích. Ví d: NEG AL 2.3 Nhp xut d liu 2.3.1 Chng trình ngt Chng trình ngt là nhng chng trình con ã c vit sn nhm thc hin nhng chc nng c bn khi thao tác vi máy tính. Các chng trình con này c phân phi kèm theo các phn mm u khin h thng nh BIOS, Hu hành. Mi chng trình có mt s hiu riêng (0, 1, 2, ). Khi lp trình ta có th s dng các chng trình con có n này bng cách dùng lnh INT (interrupt). Cú pháp lnh: INT <S hiu ngt> Ví d 1: INT 21h nh trên s gi thc hin chng trình ngt s 21h (ây là s hiu ngt hay s dng nht a DOS). Ví d 2: INT 13h nh trên s gi thc hin chng trình ngt s 13h (ây là s hiu ngt ca BIOS, dùng  thao tác vi a t). Chi tit v các ngt và chng trình x lý ngt s trình bày trong chng 8. 2.3.2 Chc nng nhp - xut ca ngt 21h Ngt 21h ca DOS cung cp rt nhiu chc nng khác nhau, mi chc nng cng có t s hiu riêng (0, 1, 2, ). Trong phn này ta ch quan tâm ti chc nng nhp - xut  liu. Cách s dng ngt 21h: Trc khi gi ngt cn xác nh c s hiu chc nng, s hiu ó c t vào thanh ghi AH. Ngoài ra cng cn quan tâm ti các tham s khác (chng trình ngt s s dng thanh ghi nào? Giá tr ca chúng bng bao nhiêu? ) a) Chc nng hin mt kí t ra màn hình ây là chc nng s 2 ca ngt 21h. Các tham s cn thit  gi ngt nh sau: Vào: AH = 2 DL = Mã ASCII ca kí t cn hin th Ra: AL cha mã ASCII ca kí t hin th Ví d 2: Hin kí t ‘M’ ra màn hình MOV AH, 2 MOV DL, ‘M’ INT 21h Sau ây là chng trình y : Bài ging hp ng Chng II: Các lnh c bn ca hp ng 20 TITLE HIEN KI TU .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 2 ;Chc nng s 2 MOV DL, ’M’ ;Kí t cn hin th INT 21h ;Gi ngt MOV AH, 4Ch ;Kt thúc INT 21h MAIN ENDP END MAIN Ta có th s dng mã ASCII ca kí t hoc vit trc tip kí t gia 2 du nháy n nh trong chng trình trên (nói chung, các kí t và chui kí t trong hp ng phi có u nháy n  2 u). Ngoài chc nng s 2, trong chng trình trên còn s dng chc nng s 4Ch ca ngt 21h. Chc nng này có tác dng kt thúc chng trình và tr li quyn u khin cho h u hành DOS. b) Chc nng hin mt chui kí t ra màn hình ây là chc nng s 9 ca ngt 21h. Các tham s cn thit  gi ngt nh sau: Vào: AH = 9 DX = a ch offset ca vùng nh cha chui kí t Ví d: Hin ra màn hình dòng ch: KHOA CONG NGHE THONG TIN Gii: 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 ;Chc nng s 9 LEA DX, ChuoiKT ;Ly a ch chui kí tt vào DX INT 21h ;Gi ngt MOV AH, 4Ch ;Kt thúc INT 21h Bài ging hp ng Chng II: Các lnh c bn ca hp ng 21 MAIN ENDP END MAIN Trong chng trình trên có mt sm cn lu ý: • Chui kí t cn hin th phi c kt thúc bng du $. • u trong chng trình có s dng khai báo d liu .DATA thì u ca chng trình chính phi có các lnh: MOV AX, @DATA MOV DS, AX c ích là t a ch segment ca n d liu vào thanh ghi DS. • Chng trình trên có s dng lnh LEA (Load Effective Address). Cú pháp lnh nh sau: LEA <ích>, <Ngun> ích>: là mt thanh ghi công dng chung. <Ngun>: là mt ô nh. nh này s ly a ch offset ca Ngun t vào ích. c) Chc nng nhp mt kí t t bàn phím ây là chc nng s 1 ca ngt 21h. Các tham s cn thit  gi ngt nh sau: Vào: AH = 1 Ra: AL cha mã ASCII ca kí t Các lnh c th nh sau: MOV AH, 1 INT 21h Khi gp các lnh trên, chng trình s dng li ch ta gõ mt kí t t bàn phím, mã ASCII ca kí tó sc ct trong thanh ghi AL. Ví d: Nhp mt kí t thng t bàn phím, i nó thành kí t in hoa ri hin ra màn hình. Gii: TITLE DOI KI TU .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 1 ;Chc nng s 1: Nhp mt kí t INT 21h SUB AL, 20h ;i kí t sang in hoa MOV AH, 2 ;Chc nng s 2: Hin kí t MOV DL, AL INT 21h MOV AH, 4Ch ;Kt thúc Bài ging hp ng Chng II: Các lnh c bn ca hp ng 22 INT 21h MAIN ENDP END MAIN Gii thích: Mã ASCII ca kí t thng ln hn kí t in hoa tng ng là 20h. Mun chuyn t kí t thng thành in hoa thì ch vic ly mã ASCII ca nó tri 20h. 2.4 Cách chy mt chng trình hp ng  có th chy mt chng trình hp ng thì trc ht phi biên dch nó thành file thi hành (EXE, COM). Có nhiu công c biên dch khác nhau do nhiu hãng phn mm sn xuát. Ta s s dng b công c MASM (Microsoft Macro Assembler) ca hãng MicroSoft vì nó khá nh gn và d dùng.  bt u thì ta ch cn ti hai file: MASM.EXE và LINK.EXE. Các bc thc hin nh sau: • c 1: Son tho ni dung chng trình bng mt công c son tho text bt kì, ct vào file i phn m rng là ASM. Ví d: tên file là Baitap.asm • c 2: ch file ASM thành file OBJ bng công c MASM.EXE. Gõ lnh nh sau: MASM Baitap; (Enter) (file MASM.EXE và file Baitap.asm nên  cùng mt th mc) u dch thành công (chng trình không có li) thì ta s thu c file Baitap.obj. u chng trình b li thì phi sa, sau ó tin hành dch li. • c 3:  dng công c LINK.EXE  liên kt các file OBJ thu c  bc 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õ lnh nh sau: LINK Baitap; (Enter) (file LINK.EXE cng  cùng th mc nói trên) Bài ging hp ng Chng II: Các lnh c bn ca hp ng 23 Ta s thu c file Baitap.exe.  chy file này ch vic gõ lnh: Baitap (Enter) . INT 21 h SUB AL, 20 h ;i kí t sang in hoa MOV AH, 2 ;Chc nng s 2: Hin kí t MOV DL, AL INT 21 h MOV AH, 4Ch ;Kt thúc Bài ging hp ng Chng II: Các lnh c bn ca hp ng 22 INT 21 h MAIN. trình bày trong chng 8. 2. 3 .2 Chc nng nhp - xut ca ngt 21 h Ngt 21 h ca DOS cung cp rt nhiu chc nng khác nhau, mi chc nng cng có t s hiu riêng (0, 1, 2, ). Trong phn này ta. AH, 2 MOV DL, ‘M’ INT 21 h Sau ây là chng trình y : Bài ging hp ng Chng II: Các lnh c bn ca hp ng 20 TITLE HIEN KI TU .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 2 ;Chc

Ngày đăng: 21/07/2014, 17:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan