Professional Documents
Culture Documents
LP TRNH H THNG
Trang 1
Gii Thiu
Thc hnh Lp trnh H Thng gip cho sinh vin vit c chng trnh bng ngn ng Assembly trn my tnh PC. Gio trnh ny ch hng dn sinh vin nhng k nng rt c bn trong vic lp trnh bng Assembly nh: S dng trnh bin dch hp ng trong mi trng Windows, bin dch, sa li v lin kt, kho st tp lnh, cc ngt n gin ca H iu hnh DOS. vn dng v nng cao c k nng lp trnh h thng bng Hp ng, i hi sinh vin phi n lc rt nhiu trong vic t hc, c thm ti liu b sung nhng kin thc nht nh v phn cng my tnh cng nh nguyn ly vn hnh ca cc thit b ngoi vi c lin quan, nh: My in, h vi iu khin, cng vo ra ni tip/ song song .... Thi lng ca mn hc c gii hn, nn cc bi thc hnh c t chc thnh cc ch sau y: Bi 1: Xut nhp k t. Bi 2: Cu trc r nhnh Vng lp Bi 3: X l k t - K s Bi 4: X l tp tin Bi 5: Nhp xut s BIN-HEX-DEC thc hnh t hiu qu cao, sinh vin cn phi chun b cho mi bi trc khi vo bt u thc hnh. Mun t c iu ny, sinh vin phi tun th phng php hc nh sau: Trc khi vo thc hnh: Nm c mc tiu ca bi thc hnh. Xem li cc kin thc cn chun b c nu ra cho mi bi thc hnh. Nm c cc ni dung cn phi lm trong bui thc hnh. Tuyt i tun th thc hnh theo th t ca ni dung thc hnh. Hon thnh cc vn v tr li c cc cu hi t ra trong phn trc mi chuyn sang thc hnh phn sau. Quan st hin tng, nhng thay i, xem xt nh gi kt qu sau mi thao tc thc hnh. Lp li cc thao tc thc hnh nhiu ln, tm cch gii quyt khc sau khi thc hnh theo yu cu cho mi vn . So snh, nhn xt cc cch gii quyt khc nhau. i chiu tng mc tiu ca bi thc hnh vi nhng g thc hnh c. Nu mc tiu no cha thnh tho th phi tm cch lp li thc hnh nm c mc tiu vng chc hn. Sau khi hon thnh tt c cc bi thc hnh trn, hc vin s kim tra vi cc kin thc c trch lc ra t cc bi thc hnh trn.
Trang 2
Bi 1: Xut Nhp K T
1. MC TIU
S dng c cc ngt mm vit c chng trnh: in k t - chui k t ln mn hnh v nhp k t - chui k t t bn phm. Hiu c cch qun l k t v k s trong Hp ng. Kt qu bi thc hnh 1. Cc hm 01h, 02h, 06h, 07h, 08h, 09h, 0Ah ca ngt 21h. Bng m ASCII.
CSEG
Dch sa li (nu c) v chy chng trnh xem kt qu in ra mn hnh. Cc dng lnh no thc hin chc nng in k t B ra mn hnh? Cc dng lnh khc dng lm g? Sa li chng trnh trn in ra mn hnh k t D. Chy chng trnh kim chng kt qu. Vit chng trnh in ra mn hnh s 9 Vit chng trnh in ra mn hnh s 89 Hai dng lnh 6 v 7 c chc nng g trong chng trnh? Nu khng c 2 dng lnh y th chng trnh thc hin nh th no? (Th xa b 2 dng lnh y ri chy chng trnh, quan st kt qu pht hin chc nng)
Trang 3
DSEG SEGMENT chuoi DB Chao sinh vien nganh Cong Nghe Thong Tin.$ DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG start: mov ax, DSEG mov ds, ax mov ah, 09h ; Hm 9, in chui k t ra mn hnh lea dx, chuoi ; dl cha k t cn in int 21h ; gi ngt thc hin mov ah, 08h int 21h mov ah, 4Ch ; thot khi chng trnh int 21h CSEG ENDS END start
Trang 4
DSEG SEGMENT tbao DB Hay go vao 1 phim: $ DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG start:mov ax, DSEG mov ds, ax mov ah, 09h ; In cu thng bo ra mn hnh lea dx, tbao int 21h mov ah, 01h ; Ham 1, nhan ky tu tu ban phim int 21h ; goi ngat thuc hien ham mov ah, 4Ch ; tro ve he dieu hanh int 21h CSEG ENDS END start
DSEG SEGMENT max DB 30 len DB 0 chuoi DB 30 dup(?) tbao DB Hay go vao 1 chuoi: $ DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG start: mov ax, DSEG mov ds, ax mov ah, 09h ; In cu thng bo ra mn hnh lea dx, tbao int 21h mov ah, 0Ah ; Ham 0Ah, nhap chuoi ky tu tu ban phim
Trang 5
BI TP THC HNH LP TRNH H THNG lea dx, MAX int 21h mov ah, 4Ch int 21h CSEG ENDS END start ; dx chua dia chi vung dem ban phim ; goi ngat thuc hien ham ; tro ve he dieu hanh
Dch, sa li v thi hnh chng trnh trong tng trng hp sau y: 1. Nhp t bn phm chui t hn 30 k t. 2. Nhp t bn phm chui nhiu hn 30 k t.
Gi tr bin len trong mi trng hp l bao nhiu? Ti sao khng th nhp nhiu hn 30 k t? Chui k t nhp vo c lu tr bin no? Sa chng trnh c th nhp nhiu hn 30 k t (60 k t chng hn). Tng qut, kh nng ti a ca hm 0Ah, ngt 21h l nhn chui bao nhiu k t?
4. BI TP NGH
4.1. Vit chng trnh s dng hm 7, ngt 21h nhn 1 k t t bn phm, dng 1 bin lu tr k t nhn c (do sinh vin t t tn bin), sau s dng hm 2, ngt 21h in ra mn hnh k t nhn c ang lu trong bin y. Chng trnh phi c cc cu thng bo nhp v xut. V d: Hay go 1 phim: B Ky tu nhan duoc la: B 4.2. Sa li chng trnh 4.1 sao cho khng cn s dng bin lu tr k t m kt qu chy chng trnh vn khng thay i. 4.3. Vit chng trnh nhn 1 k t t bn phm, sau in ra mn hnh k t k trc v k sau ca k t va nhp V d: Hay go 1 phim: B Ky tu ke truoc : A Ky tu ke sau : C 4.4. Vit chng trnh cho php nhp t bn phm tn ca 1 ngi, sao in ra mn hnh chui c dng nh sau: Xin chao <tn__nhp> V d: Khi chy chng trnh, nhp vo l: Trinh Cong Duy Chui in ra mn hnh s l: Xin chao Trinh Cong Duy
Trang 6
JMP <nhn> ; (near jump). Kiu ny nhy ty trong phm vi segment. V d: JMP Calculate JMP FAR PTR <nhn> ; (far jump). Kiu ny nhy n bt k ch no. V d: JMP FAR PTR Calculate JMP <con tr 2 byte> ; (near indirect jump). Khi thc hin, thanh ghi PC s c gn bng gi tr lu ti a ch ny. C th kt hp dng vi nh v ch s. V d: myPointer DW Prepare, Calculate, Check, Output ... MOV BX, 2 ; ch s trong mng con tr SHL BX, 1 ; nhn i JMP myPointer[BX] ... Prepare: ; cng vic 0 ... Calculate: ; cng vic 1 ... Check: ; cng vic 2 ni cn nhy n ... Output: ; cng vic 3 ... JMP <con tr 4 byte> ; (far indirect jump). Tng t trng hp trn, nhng con tr gm c segment v offset. Ch khc khai bo con tr JMP <thanh ghi 2 byte> ; (indirect jump via regs). Nhy n a ch lu trong thanh ghi AX. V d: MOV AX, offset Calculate ... JMP AX ; PC AX
Trang 8
phi c bit lu ton hng trong php so snh l s c du (signed) hay khng c du (unsigned) la chn lnh cho ph hp. V d: MOV AH,AL ; AL hin bng 128 CMP AH,1 JGE Greater ; AH > 1 nhng khng nhy ???? ... Greater: V d: nu AL l s nguyn khng du th on chng trnh trn phi sa li nh sau: MOV AH,AL CMP AH,1 JAE Greater ... Greater: Mt s lnh nhy c iu kin thng dng: Lnh JB JNAE JAE JNB JBE JNA JA JNBE JE JZ JNE JNZ Ngha Nhy nu nh hn (Jump if Below) Nhy nu khng ln hn hoc bng Nhy nu ln hn hoc bng (Jump if Above or Equal) Nhy nu khng nh hn Nhy nu nh hn hoc bng (Jump if Below or Equal) Nhy nu khng ln hn Nhy nu ln hn (Jump if Above) Nhy nu khng nh hn hoc bng Nhy nu bng (Jump if Equal) Nhy nu bng (Jump if Zero) Nhy nu khng bng (Jump if Not Equal) Nhy nu khng bng (Jump if Not Zero) iu Kin CF = 1 CF = 0 CF = 1 v ZF = 1 CF = 0 v ZF = 0 ZF = 1 ZF = 0
2.5. Lnh lp
Bng cch dng cc lnh nhy c th to ra vng lp. Tuy nhin, vit chng trnh tin li v ngn gn, c th dng thm cc lnh lp nh LOOP, LOOPZ, C php: LOOP <Label> t ng gim CX mt n v, sau kim tra xem CX c bng 0, nu khng bng th nhy n nhn <Label> C php: LOOPZ <Label> t ng gim CX mt n v, sau kim tra xem CX c bng 0 hoc c ZF c bt khng (ZF=1), nu c hai iu ny khng xy ra th nhy n nhn <Label> Trang 9
V d: Nhp mng A gm 10 k t MOV SI, 0 ; ch s mng MOV CX, 10 ; s ln lp LAP: MOV AH, 1 ; nhp k t INT 21H MOV A[SI], AL INC SI
in "Ky tu thuong"
tr v h iu hnh
Dch v chy CT nhng trng hp khc nhau xem kt qu trn mn hnh. V lu iu khin ca chng trnh.
Trang 10
Ti sao cn phi c lnh JMP EXIT? Nu khng c lnh y th chng trnh thc hin nh th no? Chy chng trnh kim chng. Thay lnh JA NHAN bng lnh JNA NHAN. Sa chng trnh sao cho kt qu khng thay i. Khi k t nhp vo khng phi l ch ci th kt qu in ra mn hnh l g? Ti sao? Xem chng trnh in ra mn hnh ln lt cc k t t A n Z c vit nh sau. Hy son tho v t tn tp tin l BAI_3B.ASM. Dch v chy chng trnh xem kt qu trn mn hnh. Vng lp trong chng trnh bao gm on lnh no? Vit theo kiu while do hay repeat ... until hay for? V lu chng trnh. Sa chng trnh in ra mn hnh ln lt cc k t t 'Z' n 'A'. Tip tc sa chng trnh sao cho gia cc k t c 1 khong trng (Z Y ....B A) Dng lnh LOOP vit li chng trnh BAI_3B.ASM theo cu trc vng lp for.
CSEG SEGMENT ASSUME CS: CSEG start:mov dl, 'A' ; nhan:mov ah, 02h ; int 21h inc dl ; cmp dl, 'Z' ; jna nhan ; mov ah, 08h ; int 21h mov ah, 4Ch int 21h CSEG ENDS END start
DL cha k t u tin 'A' in k t trong DL ra mn hnh DL cha k t k cn in So snh DL vi 'Z' Nu <= 'Z' th tip tc in Nu > 'Z' th thot (khng in tip)
4. BI TP KIM TRA:
4.1 Vit chng trnh cho nhp 1 k t t mn hnh v xut cu thng bo tng ng sau: - Nu k t nhp l S hay s th in ra Good morning! - Nu k t nhp l T hay t th in ra Good Afternoon! - Nu k t nhp l C hay c th in ra Good everning! 4.2 Vit li chng trnh BAI_3A.ASM sao cho chng trnh c th phn bit c 3 loi k t nhp t bn phm: "K t HOA", "k t thng" v "k t khc".
Trang 11
4.3 Vit chng trnh nhp t bn phm 1 k t thng. Sau in ra mn hnh ln lt cc k t t k t nhn c n 'z' sao cho gia cc k t c 1 khong trng. 4.4 Khng dng hm 0Ah/21h, hy dng lnh lp vit chng trnh nhp vo 1 chui k t. Sau khi nhp xong m xem chui c bao nhiu k t. In ra mn hnh chui nhn c v s k t c trong chui. V d: S = "Hello world !" ==> S k t trong chui l 13. 4.5 Vit chng trnh cho php nhp vo mt chui bt k. Sau : - i tt c k t thng thnh k t hoa v in ra mn hnh. - i tt c k t hoa thnh k t thng v in ra mn hnh. V d: S = weLcOme To AssEmblY In ra: welcome to assembly - WELCOME TO ASSEMBLY 4.6 Nhp vo 2 chui s, i 2 chui thnh s, sau cng hai s, i ra chui v xut chui tng. V d: S1 = "123" => N1 = 123 S2 = "456" => N2 = 456 N = N1 + N2 = 123 + 456 = 579 => S = "579" (xut S ra mn hnh) 4.7 Nhp 2 s nguyn dng A, B. Tnh A/B, A*B (khng dng lnh DIV, MUL) v in ra mn hnh kt qu. V d: A=18, B=3 Tnh A/B: 18 - 3 - 3 - 3 - 3 - 3 - 3 = 0, vy A/B = 6 (tng tr B cho n khi A = 0). Tnh A*B = 18 + 18 + 18 = 54
Trang 12
nhap:MOV AH, 01h INT 21h CMP AL, 0Dh JZ exit SHL BL, 1 SUB AL, 30h ADD BL, AL LOOP nhap exit:RET ENDP bin_in bin_out PROC MOV CX, 8 xuat:MOV DL, 0 SHL BL, 1 RCL DL, 1 ADD DL, 30h MOV AH, 02h INT 21h LOOP xuat RET bin_out ENDP CSEG ENDS END begin -
; Hm nhp k t ; ; ; ; ; nu l phm Enter th thi nhp khng phi Enter th i sang bit Dch tri BL 1 bit K s - 30h = s Chuyn bit t AL sang BL lu tr
; ; ; ; ;
Xut 8 bit trong BL ra M.Hnh CF cha MSB, xut ra mn hnh a CF vo LSB ca DL S + 30h = K s In ra mn hnh
Son tho, Bin dch v cho chy file BAI_6A.ASM kim tra kt qu. Sa chng trnh trn thnh BAI_6A1.ASM sao cho c th nhp v xut s nh phn 16 bit. Vit li chng trnh trn nhp 1 k t t bn phm, sau in ra mn hnh m ASCII ca k t nhn c dng nh phn.
3.2. Nhp xut thp lc phn: Chng trnh sau y cho php nhp 1 k t t bn phm, sau in ra mn hnh m ASCII ca k t nhn c dng thp lc phn Son tho, Bin dch v cho chy file BAI_6B.ASM kim tra kt qu. Vit li chng trnh trn nhp 2 s thp lc phn 8 bit A v B, sau in ra mn hnh kt A + B dng thp lc phn.
Trang 14
MACRO chuoi MOV AH, 9h LEA DX, chuoi INT 21h ENDM DSEG SEGMENT msg1 DB "Hay nhap 1 ky tu: $" msg2 DB "Ma ASCII o dang Hex: $" xdong DB 10, 13, $ kytu DB ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG begin: MOV AX, DSEG MOV DS, AX inchuoi msg1 MOV AH, 01h INT 21h MOV kytu, AL ; ct k t nhn c inchuoi xdong inchuoi msg2 MOV BH, kytu ; K t cn in CALL hex_out MOV AH, 02 ; in ra k t h sau s Hex MOV DL, h INT 21h MOV AH, 01 INT 21h MOV AH, 4Ch ; thoat khi chng trnh INT 21h hex_out PROC
inchuoi
MOV CX, 4 xuat:PUSH CX MOV CL, 4 MOV DL, BH SHR DL, CL CMP DL, 09h JA kytu ADD DL, 30h JMP inra kytu:ADD DL, 37h inra:MOV AH, 02h INT 21h SHL BX, CL POP CX LOOP xuat
Trang 15
RET hex_out
ENDP CSEG ENDS END begin 3.3. Xut s thp phn nguyn dng: Chng trnh sau y cho php nhp 1 k t t bn phm, sau in ra mn hnh m ASCII ca k t nhn c dng thp phn. - Son tho, Bin dch v cho chy file BAI_6C.ASM kim tra kt qu. c th tc DEC_OUT tm hiu gii thut xut gi tr trong AX ra mn hnh dng thp phn. T a ra gii thut nhp s thp phn t bn phm. Vit li chng trnh trn nhp 2 s thp phn A v B c 2 ch s, sau in ra mn hnh kt qu A + B dng thp phn. Nhp xut s thp phn M nh th no?
inchuoi
MACRO chuoi MOV AH, 9h LEA DX, chuoi INT 21h ENDM DSEG SEGMENT msg1 DB "Hay nhap 1 ky tu: $" msg2 DB "Ma ASCII o dang Dec: $" xdong DB 10, 13, $ kytu DB ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG begin: MOV AX, DSEG MOV DS, AX inchuoi msg1 MOV AH, 01h INT 21h MOV kytu, AL ; ct k t nhn c inchuoi xdong inchuoi msg2 XOR AX, AX MOV AL, kytu ; K t cn in CALL dec_out MOV AH, 01 INT 21h MOV AH, 4Ch ; thoat khi chng trnh Trang 16
XOR CX,CX ; CX m s ch s thp phn MOV BX,10 chia10: XOR DX,DX DIV BX ; DX:AXBX => AX: Thng, DX: s d PUSH DX ; Ct s d vo stack INC CX CMP AX, 0 JNZ chia10 ; nu AX>0 th chia tip cho 10 inra: MOV AH,2 ; in ra mn hnh POP DX ; ly ch s thp phn
Trang 17
dec_out
; i thnh k s
4. Bi tp kim tra:
4.1. Vit chng trnh nhp 2 s nh phn 16 bit A v B. Sau in ra mn hnh cc kt qu dng nh phn: A + B, A B, A and B, A or B. V d: Nhp s nh phn A: 10101010 Nhp s nh phn B: 01010101 A + B = 11111111 A and B = 00000000 A B = 01010101 A or B = 11111111
4.2. Vit chng trnh nhp 1 k t t bn phm, sau in ra mn hnh m ASCII ca k t nhn c dng thp lc phn, thp phn v nh phn. V d: Nhp 1 k t: A M ASCII dng Hex: 41h M ASCII dng Dec: 65 M ASCII dng Bin: 01000001b 4.3. Vit li chng trnh bi 4.1 nhng 2 s A v B c nhp theo dng thp lc phn. Cc kt qu c in ra mn hnh dng nh phn. 4.4. Vit li chng trnh bi 4.1 nhng 2 s A v B c nhp theo dng thp phn. In cc kt qu dng thp phn: A + B, A B. 4.5. Vit chng trnh tnh giai tha n! Vi n l s nguyn dng nhp t bn phm. In kt qu ra mn hnh dng thp phn. Cho bit, kh nng ca 8086 tnh c n ln nht l bao nhiu?
Trang 18
Bi 5: X L Tp Tin
1. Mc Tiu:
Vit c cc chng trnh x l tp tin nh to tp tin, xa tp tin, ghi tp tin, c ni dung ca tp tin.
Trang 19
Ti sao trong trng hp ny, chng ta khng phi dng hm 08h ca int 21h ng trc hm 4ch ca int 21h ? Ti sao phi ct th file. Nu chng ta khng cn ng file th chng ta c cn ct th file hay khng ? Trong on chng trnh mu trn c cn thit phi ng tp tin hay khng ? C th b bin thefile trong on chng trnh mu trn khng ?. Khi chng ta phi dng cc lnh g thay th iu . Nu c thay i, hy bin dch v cho chy chng trnh kim chng li kt qu. Hy sa i file BAI_5A.ASM v lu vi tn BAI_5A1.ASM c th thc hin c yu cu sau: to mt tp tin mi, tn tp tin c nhp t bn phm. Gi : dng hm 0ah ca int 21h nhp vo tn file, ch cui chui cha tn file phi c zero, nhng khi dng hm 0ah th chng ta khng th no nhp zero vo cui chui c, nu ta nhp k t 0 vo th l m ascii ca k t 0 ch khng phi l zero (con s 0). Do , thc hin c iu ny chng ta hy dng gii thut a 0 v cui chui nh sau:
xor cx, cx ; dua zero ve cuoi chuoi mov cl, len ;khai bao bien de dung ham 0ah cua int 21h dang lea bx, tenfile; max db 250 ; so ky tu toi da duoc nhap mov dl,0 ; len db ? ; chieu dai chuoi da nhap mov [bx], dl ; tenfile db 250 dup(?); chua noi dung duoc nhap
3.2. Ghi ni dung ca bin string1 vo mt tp tin mi c tn trong th mc v a vi ng dn nh sau: D:\TT_ASM\DATA.TXT. Son tho nh on chng trnh mu pha di v lu vi tn l BAI_5B.ASM. Bin dch v cho chy file BAI_5B.ASM kim tra v xem kt qu. (vo D:\TT_ASM xem tp tin DATA.TXT c trong hay cha v c ni dung hay cha ?, nu c l OK.) Xem xt on chng trnh mu, hy a ra gii thut ghi ni dung ca vng d liu vo mt tp tin va to. Lnh len db $ - string1 c dng lm g ?. Lnh XOR CX, CX c ngha g? Sau khi thc hin xong lnh ny, thanh ghi CX c gi tr bng bao nhiu? C th thay th n bng lnh no khc c khng ? Ti sao dng lnh MOV CL, LEN m khng dng MOV CX, LEN hay MOV CH, LEN ? Khi dng lnh MOV CX, LEN th cn phi thay i khai bo bin len nh th no ? nu khng thay i th s c vn g xy ra hay khng ? Hy thay i, bin dch v chy chng trnh kim chng li kt qu so vi chng trnh mu. Hy sa i file BAI_5B.ASM v lu vi tn BAI_5B1.ASM c th thc hin c yu cu sau: nhp t mt chui k t bt k, sau lu vo tp tin c tn l d:\tt_asm\solieu.txt. Gi : dng hm 0Ah ca int 21h nhp vo mt chui k t, sau p dng ton b gii thut ca BAI_5B.ASM. Hy sa i file BAI_5B1.ASM v lu vi tn BAI_5B2.ASM c th thc hin c yu cu sau: to tn tp tin mi, tn tp tin c nhp t bn phm.
Trang 20
Sau nhp vo mt chui k t bt k v lu chui k t nhp vo tp tin va to. Gi : xem li BAI_5A1.ASM ly li gii thut nhp vo tn file v a zero (con s 0) v cui chui i vi trng hp tn file c nhp t bn phm v cc vn cn li th xem li file BAI_5B1.ASM. Hy sa i file BAI_5B2.ASM v lu vi tn BAI_5B3.ASM c th thc hin c yu cu sau: to tn tp tin mi, tn tp tin c nhp t bn phm. Sau nhp vo mt chui k t thng, sau i hoa k t u ca mi t v lu chui k t thay i vo tp tin va to. Gi : xem li cc bi tp lm trong bi 5 x l k t v cc file BAI_5B2.ASM.
cseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, ax mov ah, 3ch ; tao tap tin moi lea dx, tenfile mov cx, 0 ; tap tin co thuoc tinh binh thuong int 21h mov thefile, ax ; cat the file mov ah, 40h ; ghi file mov bx, thefile xor cx, cx mov cl, len lea dx, string1 int 21h mov ah, 3eh ; dong tap tin mov bx, thefile int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin 3.3. c ni dung ca tp tin ( tn ti trn a v c ni dung). Hin th ni dung ca tp tin ln mn hnh. Son tho nh on chng trnh mu pha di v lu vi tn l BAI_5C.ASM. Bin dch v cho chy file BAI_5C.ASM kim tra v xem kt qu.
Trang 21
Xem li on chng trnh mu, hy a ra gii thut c ni dung ca tp tin v hin th ni dung ra mn hnh. Hy th thay i thuc tnh tp tin trong lnh mov al, 2 ln lt thnh cc gi tr khc nh 0, 1, 3 hoc 4. Bin dch v cho chy chng trnh xem kt qu. C nhn xt g v cc gi tr ny ?. Th file c vai tr nh th no trong x l tp tin. Nu s byte cn c (gi tr cha trong thanh ghi cx) ln hn kch thc tht s ca tp tin th c gy ra li g hay khng ?. Sau khi c ni dung ca tp tin vo vng m bng hm 3fh ca INT 21h, thanh ghi ax s c gi tr thay i hay khng v n cha (gi tr) g ?. Lm sao xc nh c khi no c xong ni dung thnh tp tin ?. Hy th a ra hng gii quyt. Hy sa i file BAI_5C.ASM v lu vi tn BAI_5C1.ASM c th thc hin c yu cu sau: c ni dung ca mt tp tin v hin th ni dung ln mn hnh. Tn tp tin c nhp t bn phm. Gi : s dng li gii thut nhp tn file t bn phm v a zero v cui chui v cc bi c lin quan trong bi 6. Hy sa i file BAI_5C1.ASM v lu vi tn BAI_5C2.ASM c th thc hin c yu cu sau: copy ni dung ca mt tp tin bt k sau paste sang mt v tr khc. Gi : cc gii thut nhp tn file t bn phm th c sn, gii thut copy v paste nh sau: trc ht phi m tp tin c bng hm 3dh, chng ta nh ngha sn ng dn cha tn file cn m, c ni dung ca tp tin vo vng m bng hm 3fh, nh ct th file; to tn tp tin mi bng hm 3ch, chng ta nh ngha sn ng dn cha tn file cn to, nh ct th file; ghi ni dung ca vng m vo tp tin mi va to bng hm 40h; ng hai tp tin li bng hm 3eh, tt c cc hm ny u ca int 21h. Hy sa i file BAI_5C2.ASM v lu vi tn BAI_5C3.ASM c th thc hin c yu cu sau: copy ni dung ca mt tp tin bt k sau paste sang mt v tr khc. Tn tp tin c copy v tp tin sau khi paste u nhp t bn phm. Gi : hon ton tng t nh BAI_5C2.ASM, nhng chng ta cn tn dng li gii thut nhp tn file t bn phm t BAI_5B3.ASM. Hy sa i file BAI_5C3.ASM v lu vi tn BAI_5C4.ASM c th thc hin c yu cu sau: save as ni dung ca mt tp tin. Tn tp tin c copy v save as u nhp t bn phm. Gi : bi ny ging tng t nh BAI_5C3.ASM. Hy sa i file BAI_5C3.ASM v lu vi tn BAI_5C4.ASM c th thc hin c yu cu sau: c ni dung ca tp tin v sau nhp mt chui k t bt k v ghi tip theo sau ni dung ca tp tin va m. Tn tp tin nhp t bn phm. Gi : xem li BAI_5C1.ASM, BAI_5B1.ASM, BAI_5B2.ASM v hm 42h ca int 21h (di v tr con tr tp tin). Hy sa i file BAI_5C4.ASM v lu vi tn BAI_5C5.ASM c th thc hin c yu cu sau: m ha ni dung ca tp tin. Tn tp tin cn m ha c nhp t bn phm. Gi : nhp vo tn file cn m ha, m mt file c bng hm 3dh; c ni dung ca tp tin vo vng m bng hm 3fh; m ha vng m c c bng mt trong cc php ton cng, tr, nhn, chia, and, or, not , va m ha va lu ni dung tr li vng m; di v tr con tr tp tin v u tp tin bng hm 42h; sau ghi ni dung ca vng m tr li tp tin
Trang 22
ban u thng qua th file ca n. Tt c cc hm s dng y u ca int 21h. Hy sa i file BAI_5C5.ASM v lu vi tn BAI_5C6.ASM c th thc hin c yu cu sau: gii m ni dung ca tp tin m ha. Tn tp tin cn gii m c nhp t bn phm. Gi : gii m l trng hp ngc li ca m ha, nu m ha theo phng thc no th gii m phi lm ngc li phng thc m ho .
dseg segment tenfile db "d:\tt_asm\data.txt",0 thefile dw ? buffer db 251 dup ('$') dseg ends cseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, ax mov ah, 3dh ; mo tap tin da co lea dx, tenfile mov al, 2 ; thuoc tinh tap tin int 21h mov thefile, ax ; cat the file mov ah, 3fh ; doc noi dung file vao vung dem mov bx, thefile lea dx, buffer mov cx, 250 ; so byte can doc tu file da mo int 21h mov ah, 3eh ; dong tap tin mov bx, thefile int 21h mov ah, 09h ; in noi dung cua file ra man hinh lea dx, buffer int 21h mov ah,08h ; dung man hinh de xem ket qua int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin 3.4. Xa tp tin. Son tho nh on chng trnh mu pha di v lu vi tn l BAI_5D.ASM. Bin dch v cho chy file BAI_5D.ASM kim tra v xem kt qu. Hy sa i file BAI_5D.ASM v lu vi tn BAI_5D1.ASM c th thc hin c yu cu sau: xa tn mt tp tin. Tn tp tin cn c nhp t bn phm. Gi : xem li cc bi trc ly gii thut nhp tn file t bn phm.
Trang 23
dseg segment tenfile db "d:\tt_asm\data.txt",0 dseg ends cseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, ax mov ah,41h ; xoa tap tin da co lea dx, tenfile int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin 3.5. i tn tp tin c thnh mt tp tin mi trong cng th mc Son tho nh on chng trnh mu pha di v lu vi tn l BAI_5E.ASM. Bin dch v cho chy file BAI_5E.ASM kim tra v xem kt qu. Hy to mt th mc con c tn l baitap nm trong th mc tt_asm. Sa i lnh oldfile db d:\tt_asm\data.txt,0 v newfile db tt_asm\solieu.txt,0 li thnh oldfile db d:\tt_asm\solieu.txt,0 v newfile db tt_asm\baitap\data.txt,0. Bin dch li v cho chy chng trnh xem xt kt qu. C nhn xt g v kt qu nhn c. Hy sa i file BAI_5E.ASM v lu vi tn BAI_5E1.ASM c th thc hin c yu cu sau: i tn mt tp tin. Tn tp tin c v mi c nhp t bn phm. Gi : xem li cc bi tp trc ly gii thut nhp tn file t bn
phm
dseg segment oldfile db "d:\tt_asm\data.txt",0 newfile db "d:\tt_asm\solieu.txt",0 dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax mov ah,56h ; rename/remove tn file cu thanh moi lea dx, oldfile lea di, newfile int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin Trang 24
4. Bi tp kim tra:
4.1. Vit chng trnh s dng hm 41h/ INT 21h xa tp tin trn a. Tn tp tin cn xa c nhp t bn phm khi thc hin chng trnh. 4.2. Vit chng trnh nhp 1 chui t bn phm, sau ghp chui nhn c vo cui ca ni dung tp tin c trn a. Tn tp tin nhp t bn phm khi chy chng trnh. 4.3. Vit chng trnh nhp 1 chui t bn phm, sau chn chui nhn c vo u ca ni dung tp tin c trn a. Tn tp tin nhp t bn phm khi chy chng trnh. 4.4. Vit chng trnh ghp ni dung 2 tp tin c sn trn a thnh 1 tp tin mi. Tn ca cc tp tin c nhp t bn phm khi chy chng trnh. 4.5. Vit chng trnh c ni dung tp tin trn a, sau i tt c k t HOA thnh k t thng v lu li vo tp tin . Tn tp tin phi c nhp t bn phm
Trang 25
Bi 6: X L Chui K T
1. Mc Tiu:
Vit c cc chng trnh x l chui k t bng cc lnh x l chui Bng m ASCII. Kt qu ca cc bi th nghim trc Cc hm 01h, 02h, 06h, 08h, 09h, 0Ah ca INT 21h v cc lnh x l chui nh MOVSB/W, SCASB/W, STOSB/W, CMPSB/W.
Trang 26
writeln macro bien1 LOCAL bien1 mov ah,09 lea dx, bien1 int 21h mov ah,02h mov dl, 0ah int 21h mov dl, 0dh int 21h endm dseg segment tbao db "Chuong tring so sanh oldpass va newpass$" oldpass db "0123456789" newpass db "1234567890" tbao1 db "Haichuoi giong nhau $" tbao2 db "Haichuoi khong giong nhau $" dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax writeln tbao cld ; chonchieu xu ly chuoi mov cx, 10 ; so ky tu/so byte can so sanh lea si, oldpass; (DS:SI)--> dia chi cua chuoi nguon lea di, newpass; (ES:DI)--> dia chi cua chuoi dich repe cmpsb ; so sanh tung ky tu/byte je intb1 writeln tbao2 jmp thoat intb1: writeln tbao2 thoat: mov ah,08h int 21h mov ah, 4ch int 21h cseg ends end begin Hy sa i file BAI_6A1.ASM, kt hp vi file BAI_6A.ASM (chng trnh mu) v lu vi tn BAI_6A2.ASM c th thc hin c nhim v sau: nhp vo mt chui k t c 10 k t, trong lc nhp ch hin th ra k t *. Sau so snh vi mt oldpass c ni dung ty (nhng ch c di l 10 k t m do
Trang 27
chng ta gn trc, v d nh oldpass db 1234567890). Nu 10 k t va nhp c ni dung ging oldpass th in ra cu thng bo Ban da nhap dung roi v thot, ngc li th in ra cu thng bo Ban da nhap sai roi va vui long nhap lai v quay tr li nhp cho n khi no ng mi thot. Gi : dng hm 08h, 02h, 09h ca int 21h v cc lnh loop, cmpsb,. 3.2. Di chuyn 33 bytes t ni dung ca string1 sang string2, sau in ni dung ca string2 ra mn hnh. Son tho nh on chng trnh mu v lu vi tn l BAI_6B.ASM. Bin dch v cho chy file BAI_6B.ASM kim tra v xem kt qu.
dseg segment string1 db "Khong co gi quy hon doc lap tu do" string2 db 34 dup('$') dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax cld ; chon chieu xu ly chuoi mov cx, 33 ; so ky tu/so byte can di chuyen lea si, string1 ; (DS:SI)--> dia chi cua chuoi nguon lea di, string2 ; (ES:DI)--> dia chi cua chuoi dich rep movsb ; di chuyen tung byte mov ah, 09h lea dx, string2 int 21h mov ah,08h ; dung man hinh de xem ket qua int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin Ti sao ch di chuyn 33 k t/byte m li khai bo bin string2 db 34 dup($). Th thay 34 thnh 33 v tin hnh bin dch, chy chng trnh xem kt qu. C nhn xt g v vn ny khng ?. Gii thch ngha ca vic khai bo ny. Thay lnh CLD trong on chng trnh mu thnh STD. Bin dch v cho chy chng trnh kim chng kt qu. Cho nhn xt v kt qu nhn c. Nu thay lnh movsb thnh MOVSW th chng ta c phi thay i gi tr no trong on chng trnh mu trn khng ?. Nu c thay i, hy bin dch v chy chng trnh kim chng li kt qu. C th thay th lnh REP MOVSB bi mt s lnh khc hay khng? Nu c th hy thay i v sau bin dch, cho chy chng trnh kim chng li kt qu.
Trang 28
Gi s ta c ni dung ca mt bin string1 c tng s byte >256 byte th lc chng ta phi khai bo li cc bin ny nh th no ?. Lc ny c kh khn g xy ra khng ?. Hy th sa li, sau bin dch v chy chng trnh xem kt qu. C cch no xc nh chiu di ca mt bin bt k hay khng ?. Hy cho bit cc c php ca lnh c th thc hin c yu cu ny. Sau th p dng xc nh chiu di ca bin string1.
3.3. Tm k t A c trong mt chui k t bt k, nu c th in ra cu thng bo l c k t A trong chui k t v ngc li. Son tho nh on chng trnh mu v lu vi tn l BAI_6C.ASM.
write macro bien1 mov ah, 09h lea dx, bien1 int 21h endm dseg segment string1 db "NGAC NHIEN CHUA ?" tb1 db "co ky tu A trong chuoi string1 $" tb2 db "khong ky tu A trong chuoi string1 $" dseg ends cseg segment assume cs:cseg, ds:dseg, es: dseg begin: mov ax, dseg mov ds, ax mov es, ax chonchieu xu ly chuoi cld ; so ky tu can mov cx, 17 ; tim mov al, 'A' ; tim kien ky tu A trong string1 lea di, string1 ; (ES:DI)--> dia chi cua chuoi dich repne scasb ; lap lai viec tim kiem ky tu cho den jne intb2 ; khi gap duoc hoac den het chuoi write tb1 jmp thoat intb2: write tb2 thoat: mov ah,08h ; dung man hinh de xem ket qua int 21h mov ah, 4ch ; thoat ve Dos int 21h cseg ends end begin
Bin dch v cho chy file BAI_6C.ASM kim tra v xem kt qu. Thay lnh MOV AL, A thnh MOV AL, B, sau bin dch v chy chng trnh xem kt qu. Gii thch nhim v ca cc lnh t CLD cho n JNE INTB2. C th thay th lnh REPNE SCASB thnh cc lnh khc c khng ?. Nu c hy thay th chng, bin dch v chy chng trnh kim chng li kt qu.
Trang 29
Ph lc
1. Khi ng RadASM
Nhp p biu tng trn desktop th mn hnh lm vic ca RadASM xut hin nh hnh 1. Mn hnh lm vic ca RadASM chia thnh 2 vng: Vng son tho dng son tho chng trnh ngun ASM Vng thng bo kt qu: Khi dch chng trnh, nhng kt qu hay li s xut hin ti vng ny
Vng thng bo kt
33 Trang 30
Cc menu thng dng l FILE (hnh 2) v MAKE (hnh 3), cc lnh thng New File (Ctrl+N): M file mi son tho chng trnh mi Open File (Ctrl+O): M file lu sn trn a Save File (Ctrl+S): Lu file thnh tn (nh t tn file khng c khong trng, phn m rng ASM c thm vo t ng) Assemble (F5): Hp dch file ngun (ASM) thnh file i tng (OBJ) Link (Alt+Ctrl+F5): Lin kt file i tng (OBJ) thnh file thc thi (EXE) Run! (Ctrl+Shift+F5): Thc thi chng trnh (EXE)
Trang 31
3. Hp dch (Assemble)
Sau khi lu file chng trnh ngun xong, chn Assemble trong menu MAKE (Hay bm phm nng tng ng) tin hnh hp dch chng trnh ngun. Nu chng trnh c li c php th vng thng bo c dng hnh 4. Trong tng li c ch ra bi s th t dng lnh v m li V d: chuoi2.asm(18) : error A2008: syntax error : mod Li dng 18, m li A2008: sai c php mod
Hnh 4: Thng bo kt qu Hp dch khng thnh cng Khi chng trnh xut hin li th file i tng (OBJ) khng c to ra v ngi lp trnh phi sa li cho n khi khng cn li. Khi khng c li chng trnh (Hp dch thnh cng) th trong vng thng bo xut hin nh hnh 5 v file i tng (OBJ) c to ra. Khi mi chuyn sang bc LIN KT
Trang 32
4. Lin kt (Link)
Chn lnh Link trong menu MAKE. (hay bm phm nng tng ng) Sau khi hon thnh bc hp dch, th bc lin kt l bc cui cng to ra file thc thi (EXE). Trong bc ny, khng cn kim tra li c php na v thng thng s lin kt thnh cng v file thc thi EXE s c to ra. Ni dung thng bo khi lin kt thnh cng nh hnh 6.
Trang 33