You are on page 1of 63

LP TRNH HP NG

Ngn ng lp trnh
Ngn ng lp trnh
Phng tin vit chng trnh cho my tnh Hng trm ngn ng lp trnh khc nhau Nhng quy nh v c php (syntax) & ng ngha (semantic) My tnh c th hiu c

Phn chia lm 3 nhm chnh


Ngn ng my - Machine languages
Ngn ng duy nht ca my tnh - CPU

Hp ng - Assembly languages Ngn ng cp cao - High-level languages

Ngn ng my - Machine languages


Ngn ng duy nht c my tnh (CPU) hiu trc tip. c xc nh bi tp lnh ca CPU
Ph thuc vo my tnh c th Dng nh phn {0,1}* Rt kh c hiu Kh c kh nng vit chng trnh trc tip
Kh nh hng chc ngn lnh dng {0,1}* Rt kh xc nh & sa li

Khng c s dng trong thc t vit chng trnh Nn tng xy dng hp ng

Hp ng - Assembly Languages
S dng cc t kha ting Anh cho cc lnh hay nhm lnh ca m my. c dch sang m my khi thc hin Chuyn i nhanh chng D c v d hiu hn Vn tng i kh s dng do
Cc lnh cn n gin nn phi dng nhiu lnh. Cha c nhng cu trc iu khin thun tin Kh nng tm v sa li cng cha thun tin.

Nn tng xy dng cc ngn ng cp cao

Ngn ng cp cao
Mt cu lnh din t nhiu ng thi C cu trc ngy cng ging ngn ng t nhin (ting Anh) c dch sang assembly hay m my bng cc chng trnh dch trc khi thc thi.
Source code & Executed code

c phn lm nhiu lp
Lp trnh goto Lp trnh cu trc Structured Lp trnh hng i tng Object Oriented Cc dng khc

Hc ngn ng lp trnh
Hc ng php

Quy tc ng php T vng Cu trc cu


Ng ngha ca cc lnh Cc thnh ng Hc ngn ng lp trnh VS. Hc ngn ng t nhin

Quy tc ng php n gin T vng t, t quy nh Cu trc cu n gin


Hn ch v kh khn ca s dng ngn ng lp trnh.

Chng trnh dch


Dng dch t mt ngn ng lp trnh ny sang ngn ng lp trnh khc Mc tiu cui cng l dch sang m my c c executed code > chng trnh thc thi Phn loi:
Intepreter thng dch Compiler bin dch Intepreter vs. Compiler

Cng c pht trin Integrated Development Environment (IDE)


Son tho Dch v sa li chng trnh Chy th v sa li

Mt s khi nim khc


Li v sa li
Syntax error li ng php Semantic error- li ng ngha Runtime error - Li thc thi

Debug Tm v sa li
D liu, kiu d liu

Cc kiu d liu c bn
integer, long, character, byte, . Real (double, float) Kiu khc: string

Kiu d liu c cu trc: array, string, record,..


Bin (Variable) & Hng (Constant) Gii thut: khi nim, cng c biu din Flow chart lu

Cu trc iu khin c bn
If <condition> then Statement; If <condition> then Statement 1 else Statement 2; Case <Value> of value 1 : Statement 1; .. value n : Statement n; else : Statement 0 end; While <condition> do Statement; Repeat Statement until <condition>; For counter=start value to end value do Statement; For counter=start value downto end value do Statement

Chu kz sng ca phn mm


Thu thp yu cu Phn tch thit k Pht trin chng trnh - codeing
Xc nh gii thut Vit code v dch th , hiu chnh cc li syntax

Th nghim - Testing
Chy th vi cc d liu mu kim tra li semantic v runtime

Vn hnh v bo tr Pht trin theo yu cu

Mt s ngn ng lp trnh
Lp trnh goto
Assembly Basic

Lp trnh cu trc
Pascal, C Foxpro

Lp trnh hng i tng


Java, C++, Object Pascal,

Khc
Prolog, LISP, Visual basic (VB), VC++, J++, Delphi, ASP, PHP,.. Visual studio .NET: VB.NET, ASP.NET, C++.NET, C#

Lp trnh hp ng
Mt chng trnh hp ng bao gm mt lot cc mnh ( statement) c vit lin tip nhau , mi mnh c vit trn 1 dng Mt mnh c th l :
mt lnh ( instruction) : c trnh bin dch ( Assembler =ASM) chuyn thnh m my. mt ch dn ca Assembler ( Assembler directive) : ASM khng chuyn thnh m my

Trng Tn ( Name Field)


Trng tn c dng cho nhn lnh , tn th tc v tn bin . ASM s chuyn tn thnh a ch b nh . Tn c th di t 1 n 31 k t . Trong tn cha cc k t t a-z , cc s v cc k t c bit sau : ? ,@ , _ , $ v du . Khng c php c k t trng trong phn tn. Nu trong tn c k t th n phi l k t u tin. Tn khng c bt u bng mt s. ASM khng phn bit gia k t vit thng v

Phn bit
Tn hp l COUNTER1 @CHARACTER SUM_OF_DIGITS DONE? .TEST Tn khng hp l TWO WORDS

2ABC
A45.28 YOU&ME ADD-REPEAT

Cc kiu s liu trong chng trnh hp ng


Cc s Cc k t Cc bin ( variables)

Cc s

Mt s nh phn l mt dy cc bit 0 v 1 v 2 phi kt thc bng h hoc H V d: 10111b, 11111b Mt s thp phn l mt dy cc ch s thp phn v kt thc bi d hoc D ( c th khng cn V d: 64223, -2183d Mt s hex phi bt u bi 1 ch s thp phn v phi kt thc bi h hoc H V d: 183Dh, 1AC0h, 0FFFFH

Cc k t
K t v mt chui cc k t phi c ng gia 2 du ngoc n hoc hai du ngoc kp . V d: A v HELLO . Cc k t u c chuyn thnh m ASCII bi ASM . Do trong mt chng trnh ASM s xem khai bo A v 41h ( m ASCII ca A) l ging nhau

Cc bin ( variables)
Trong ASM bin ng vai tr nh trong ngn ng cp cao. Mi bin c mt loi d liu v n c gn mt a ch b nh sau khi dch chng trnh PSEUDO-OP STANDS FOR DB DW DD define byte define word ( doublebyte) define doubeword ( 2 t lin tip)

Chui cc k t ( character strings)


Mt mng cc m ASCII c th c nh ngha bng mt chui cc k t V d : LETTERS DW 41h, 42h, 43h LETTERS DW ABC Bn trong mt chui , ASM s phn bit ch hoa v ch thng . V vy chui abc s c chuyn thnh 3 bytes : 61h ,62h v 63h. Trong ASM cng c th t hp cc k t v cc s trong mt nh ngha . V d : MSG DB HELLO, 0AH, 0DH, $ MSG DB 48H, 45H, 4CH, 4Ch, 4FH, 0AH, 0DH, 24H

Cc hng ( constants)
Trong mt chng trnh cc hng c th c t tn nh ch dn EQU (equates) . C php ca EQU l : NAME EQU constant V d : LF EQU 0AH Cng c th dng EQU nh ngha mt chui: V d: PROMPT EQU TYPE YOUR NAME Sau khi c khai bo ny, thay cho MSG DB TYPE YOUR NAME MSG DB PROMPT

Cc lnh c bn
MOV XCHG ADD SUB INC DEC NEG

Cu trc ca mt chng trnh hp ng


Mt chng trnh ngn ng my bao gm :
M ( code) S liu ( data) Ngn xp (stack )

Mi mt phn chim mt on b nh . Mi mt on chng trnh l c chuyn thnh mt on b nh bi ASM .

Cc kiu b nh ( memory models)


ln ca m v s liu trong mt chng trnh c quy nh bi ch dn MODEL nhm xc nh kiu b nh dng vi chng trnh . C php ca ch dn MODEL nh sau : .MODEL memory_model

on s liu
on s liu ca chng trnh cha cc khai bo bin, khai bo hng ... bt u on s liu chng ta dng ch dn DATA vi c php nh sau : .DATA ;khai bo tn cc bin, hng v mng V d : .DATA WORD1 DW 2 WORD2 DW 5 MSG DB THIS IS A MESSAGE MASK EQU 10010010B

on ngn xp
Mc ch ca vic khai bo on ngn xp l dnh mt vng nh (vng stack) lu tr cho stack. C php ca lnh nh sau : .STACK size Nu khng khai bo size th 1KB c dnh cho vng stack . .STACK 100h ; dnh 256 bytes cho vng stack

on m
on m cha cc lnh ca chng trnh. Bt u on m bng ch dn CODE nh sau : .CODE Bn trong on m cc lnh thng c t chc thnh th tc (procedure) m cu trc ca mt th tc nh sau : name PROC ; body of the procedure name ENDP

Cu trc chng trnh


.MODEL SMALL .STACK 100h .DATA ; nh ngha s liu ti y .CODE MAIN PROC ; thn ca th tc MAIN MAIN ENDP ; cc th tc khc nu c END MAIN

Cc lnh vo ra
Lnh INT ( interrupt) Lnh INT 21h INT 21h c dng gi mt s ln cc cc hm ( function) ca DOS. Ty theo gi tr m chng ta t vo thanh ghi AH, INT 21h s gi chy mt routine tng ng .

Chng trnh u tin


.model small .stack 100h .data s DB Hello !$ .code mov AX,@data mov DS, AX ; xut chui mov DX, OFFSET s mov AH , 9 int 21h mov AH, 4Ch int 21h end

; Khai bo xu k t cn in ; Ly a ch data segment ghi vo DS

; Ly a ch offset ghi vo DX ; Gi hm 9, ngt 21h in ; Thot khi chng trnh

To ra v chy mt chng trnh hp ng


C 4 bc to ra v chy mt chng trnh hp ng l : Dng mt trnh son tho vn bn to ra tp tin chng trnh ngun ( source program file ) . Dng mt trnh bin dch (Assembler ) to ra tp tin i tng (object file) ngn ng my Dng trnh LINK lin kt mt hoc nhiu tp tin i tng ri to ra file thc thi c . Cho thc hin tp tin EXE hoc COM .

Chuyn ngn ng cp cao thnh ngn ng ASM


Gi s A v B l 2 bin t . Chng ta s chuyn cc mnh sau trong ngn ng cp cao ra ngn ng ASM . Mnh B=A MOV AX,A ; a A vo AX MOV B,AX ; a AX vo B Mnh A=5-A MOV AX,5 ; a 5 vo AX SUB AX,A ; AX=5-A MOV A,AX ; A=5-A cch khc : NEG A ;A=-A ADD A,5 ;A=5-A Mnh A=B-2*A MOV AX,B ;Ax=B SUB AX,A ;AX=B-A SUB AX,A ;AX=B-2*A MOV A,AX ;A=B-2*A

Cu trc ca ngn ng cp cao


Chng ta s dng cc lnh nhy thc hin cc cu trc tng t nh trong ngn ng cp cao

Cu trc r nhnh
IF condition is true THEN
execute true branch statements
END IF

Hoc IF condition is true THEN execute true branch statements ELSE execute false branch statements END_IF

V d 1: Thay th gi tr trn AX bng gi tr tuyt i ca n


Thut ton: IF AX<0 THEN replace AX by - AX END-IF M ho: ; if AX<0 CMP JNL AX,0 END_IF AX ; no , exit , yes , change sign

;then
NEG END_IF :

V d 2 : gi s AL v BL cha ASCII code ca 1 k{ t .Hy xut ra mn hnh k{ t trc ( theo th t k{ t )


Thut ton IF AL<= BL THEN display AL ELSE display character in BL END_IF M ho : MOV AH,2 ; chun b xut k t ;if AL<=BL CMP AL,BL ;AL<=BL? JNBE ELSE_ ; no, display character in BL ;then MOV DL,AL JMP DISPLAY ELSE_: MOV DL,BL DISPLAY: INT 21H END_IF :

R nhnh nhiu hng


Case l mt cu trc r nhnh nhiu hng . C th dng test mt thanh ghi hay , bin no hay mt biu thc m gi tr c th nm trong 1 vng cc gi tr. Cu trc ca CASE nh sau :
CASE expression value_1 : Statements_1 value_2 : Statements_2 . .

V d
Nu AX m th t -1 vo BX Nu AX bng 0 th t 0 vo BX Nu AX dng th t 1 vo BX

Thut ton : CASE AX < 0 put -1 in BX = 0 put 0 in BX > 0 put 1 in BX

Ci t
; case AX CMP JL JE JG NEGATIVE: AX,0 NEGATIVE ZERO positive ;AX>0 ;test AX ;AX<0 ;AX=0

MOV JMP
ZERO: MOV JMP POSITIVE: MOV JMP END_CASE :

BX,-1 END_CASE
BX,0 END_CASE BX,1 END_CASE

R nhnh vi mt t hp cc iu kin
i khi tnh trng r nhnh trong cc lnh IF , CASE cn mt t hp cc iu kin di dng : Condition_1 AND Condition_2 Condition_1 OR Condition_2

V d 1: c mt k{ t v nu n l k{ t hoa th in n ra mn hnh
Thut ton :
Read a character ( into AL) IF ( A<= character ) AND ( charater <= Z) THEN display character END_IF

Ci t
;read a character MOV AH,2 INT 21H ; character in AL ; IF ( A<= character ) AND ( charater <= Z) CMP AL,A ; char >=A? JNGE END_IF ;no, exit CMP AL,Z ; char <=Z? JNLE END_IF ; no exit ; then display it MOV DL,AL MOV AH,2 INT 21H END_IF :

V d 2: c mt k{ t , nu k{ t l Y hoc y th in n ln mn hnh , ngc li th kt thc chng trnh . Thut ton Read a charcter ( into AL) IF ( character =Y) OR ( character=y) THEN dispplay it ELSE terminate the program END_IF

Ci t
;read a character MOV AH,2 INT 21H ; character in AL ; IF ( character =y ) OR ( charater = Y) CMP AL,y ; char =y? JE THEN ;yes , goto display it CMP AL,Y ; char =Y? JE THEN ; yes , goto display it JMP ELSE_ ;no , terminate THEN : MOV DL,AL MOV AH,2 INT 21H JMP END_IF ELSE_: MOV AH,4CH INT 21h END_IF :

Cu trc lp
Mt vng lp gm nhiu lnh c lp li , s ln lp ph thuc iu kin

Vng FOR
Lnh LOOP c th dng thc hin vng FOR . LOOP destination_label S m cho vng lp l thanh ghi CX m ban u n c gn 1 gi tr no . Khi lnh LOOP c thc hin CX s t ng gim i 1 . Nu CX cha bng 0 th vng lp c thc hin tip tc . Nu CX=0 lnh sau lnh LOOP c thc hin Lu { rng vng FOR cng nh lnh LOOP thc hin t nht l 1 ln. Do nu ban u CX=0

V d : Dng vng lp in ra 1 hng 80 du * MOV CX,80 MOV AH,2 MOV DL,* TOP: INT 21h LOOP TOP ; CX ch s ln lp ; hm xut k{ t ;DL ch k{ t * ; in du * ; lp 80 ln

Vng WHILE
Vng WHILE ph thuc vo 1 iu kin .Nu iu kin ng th thc hin vng WHILE . V vy nu iu kin sai th vng WHILE khng thc hin g c

V d : Vit on m m s k{ t c nhp vo trn cng mt hng .


MOV DX,0 MOV AH,1 INT 21h ; DX m s k{ t ;hm c 1 k{ t ; c k{ t vo AL

WHILE_:
CMP JE INC INT JMP AL,0DH ; c phi l k{ t CR? END_WHILE ; ng , thot DX ;tng DX ln 1 21h ; c k{ t WHILE_ ; lp

Vng REPEAT
Cu trc ca REPEAT l repeat statements until condition Trong cu trc repeat mnh c thi hnh ng thi iu kin c kim tra. Nu iu kin ng th vng lp kt thc .

V d : vit on m c vo cc k{ t cho n khi gp k{ t trng .


MOV AH,1 REPEAT: INT 21h ;until CMP AL, JNE REPEAT ; c k t ; k t trn AL ; AL= ?

Lp trnh vi cu trc cp cao


Bi ton: Vit chng trnh nhc ngi dng g vo mt dng vn bn . Trn 2 dng tip theo in ra k t vit hoa u tin v k t vit hoa cui cng theo th t alphabetical . Nu ngi dng g vo mt k t thng , my s thng bo No capitals Kt qa chy chng trnh s nh sau : Type a line of text : truong dAi hoc sU pham First capital = A Last capital = U gii bi ton ny ta dng k thut lp trnh TOP-DOWN , ngha l chia nh bi ton thnh nhiu bi ton con . C th chia bi ton thnh 3 bi ton con nh sau : 1. Xut 1 chui k t ( li nhc) 2. c v x l 1 dng vn bn 3. In kt qa

Bc 1: Hin du nhc .
MOV AH,9 ; hm xut chui LEA DX,PROMPT ; ly a ch chui vo DX INT21H ; xut chui Du nhc c th m ho nh trong on s liu: PROMPT DB Type a line of text :,0DH,0AH,$

Bc 2 : c v x l mt dng vn bn
Read a character WHILE character is not a carrige return DO IF character is a capital (*) THEN IF character precedes first capital Then first capital= character End_if IF character follows last character Then last character = character End_if END_IF Read a character END_WHILE Trong dng (*) c ngha l iu kin k t l hoa l iu kin AND IF ( A<= character ) AND ( character <= Z)

Ci t
MOV AH,1 INT 21H ; c k{ t ; k{ t trn AL

WHILE : ;trong khi k{ t g vo khng phi l CR th thc hin CMP AL,0DH ; CR? JE END_WHILE ;yes, thot ; nu k{ t l hoa CMP AL,A ; char >=A? JNGE END_IF ;khng phi k{ t hoa th nhy n END_IF CMP AL,Z ; char <= Z? JNLE END_IF ; khng phi k{ t hoa th nhy n END_IF ; th ; nu k{ t nm trc bin FIRST ( gi tr ban u l* : k{ t sau Z ) CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST ; >= ; th k{ t vit hoa u tin = k{ t MOV FIRST,AL ; FIRST=character ;end_if

Ci t (tt)
CHECK_LAST: ; nu k{ t l sau bin LAST ( gi tr ban u l @: k{ t trc A) CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;th k{ t cui cng = k{ t MOV LAST, AL ;LAST = character ;end_if END_IF : ; c mt k{ t INT 21H ; k{ t trn AL JMP WHILE_ ; lp END_WHILE: Cc bin FIRST v LAST c nh ngha nh sau trong on s liu : FIRST DB * $ ; * l k{ t sau Z LAST DB @ $ ; @ l k{ t trc A

Bc 3 : In kt qu
Bc 3 s phi in ra cc thng bo :
NOCAP_MSG nu khng phi ch in CAP1_MSG ch in u tin CAP2_MSG ch in cui cng

Chng c nh ngha nh sau trong on s liu : NOCAP_MSG DB 0DH,0AH,No capitals $ CAP1_MSG DB 0DH,0AH, First capital= FIRST DB * $ CAP2_MSG DB 0DH,0AH,Last capital=

Bc 3 : In kt qu
;in kt qu MOV AH,9 ; hm xut k{ t ; IF khng c ch hoa no c nhp th FIRST =* CMP FIRST,* ; FIRST=* ? JNE CAPS ; khng , in kt qa ;THEN LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG INT 21H LEA DX,CAP2_MSG INT 21H ; end_if

Xem chuong trinh

Lnh XLAT
Trong mt s ng dng cn phi chuyn s liu t dng ny sang dng khc . V d IBM PC dng ASCII code cho cc k{ t nhng IBM Mainframes dng EBCDIC ( Extended Binary Coded Decimal Interchange Code) . chuyn mt chui k{ t c m ho bng ASCII thnh EBCDIC , mt chng trnh phi thay m ASCII ca tng k{ t trong chui thnh m EBCDIC tng ng . Lnh XLAT ( khng c ton hng ) c dng i mt gi tr byte thnh mt gi tr khc cha trong mt bng . AL phi cha byte cn bin i DX cha i ch offset ca bng cn bin i Lnh XLAT s : 1) cng ni dung ca AL vi a ch trn BX to ra i ch trong bng 2) thay th gi tr ca AL vi gi tr tm thy trong bng

V d
Gi s rng ni dung ca AL l trong vng 0 n Fh v chng ta mun thay n bng m ASCII ca s hex tng ng n , tc l thay 6h bng 036h=6 , thay Bh bng 042h=B . Bng bin i l : TABLE DB 030h,031h, 032h,033h,034h, 035h, 036h,037h,038h,039h DB 041h , 042h ,043h , 044h, 045h , 046h V d , i 0Ch thnh C , chng ta thc hin cc lnh sau : MOV AL,0Ch ; s cn bin i LEA BX,TABLE ; BX ch i ch offset ca bng XLAT ; AL cha C y XLAT tnh TABLE + Ch = TABLE +12 v thay th AL bi 043h. Nu AL cha mt s khng trong khong 0 n 15 th XLAT s cho mt gi tr sai .

Thut ton m ha
Print prompt Read and encode message Go to a new line Print encoded message go to a new line translate and print message

Chng trnh minh ha

HT

You might also like