ể ể
ấ ChChươương 8 : C u trúc ng 8 : C u trúc ấ
ặ ề i u khi n và Vòng l p đđi u khi n và Vòng l p ặ ề
ụ M c tiêu
ế
ấ
ề
ể
ặ
ở
ỏ t cách mô ph ng c u trúc
đi u khi n và vòng l p nh
ư
ữ ngôn ng
ấ
Bi ậ l p trình c p cao.
ợ
ệ
ả
ậ
N m ắ đư c các l nh nh y trong l p trình Assembly.
ả
ế
Trên cơ s ở đó, v n d ng
ể ậ ậ ụ đ l p trình gi
ố i quy t 1 s bài toán.
11
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ộ ả ả
ả ả
ộN i dung N i dung ậ t c a l nh nh y trong l p trình ASM. ậ t c a l nh nh y trong l p trình ASM. ệ ề đđi u ki n. i u ki n. ệ ề ệ ớ ệ ớ
ố ầ ố ầ
ặ ặ
đđó.ó.
ệ ệ ệ ệ ể ể
ứ ứ
ậ ậ
S c n thi ế ủ ệ ự ầ S c n thi ế ủ ệ ự ầ L nh JMP (Jump) : nh y không ệ L nh JMP (Jump) : nh y không ệ L nh LOOP : cho phép l p 1 công vi c v i 1 s l n nào ệ L nh LOOP : cho phép l p 1 công vi c v i 1 s l n nào ệ Các l nh so sánh và lu n lý. ậ ệ Các l nh so sánh và lu n lý. ậ ệ L nh l p có ệ ề ặ đđi u ki n. i u ki n. L nh l p có ề ệ ặ L nh nh y có ệ ề ả i u ki n. đđi u ki n. L nh nh y có ệ ề ả Bi u di n mô ph ng c u trúc lu n lý m c cao. ấ ỏ ễ Bi u di n mô ph ng c u trúc lu n lý m c cao. ỏ ễ ấ ChChươương trình con. ng trình con. M t s ch ộ ốM t s ch
ng trình minh h a.ọ ộ ố ươương trình minh h a.ọ
22
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ự ầ ự ầ
ả t c a l nh nh y ả t c a l nh nh y
S c n thi S c n thi
ữ ấ ữ ấ
ạ ạ
t b ng ngôn ng c p cao thì t b ng ngôn ng c p cao thì ưưng ở ề ởng ềi u nên tránh nh đđi u nên tránh nh ế ệ ầ ế ệ ầ t và là t và là ế ằ ế ằ
ế ủ ệ ế ủ ệ ế ằ ươương trình vi Ở ế ằ Ở các ch ng trình vi các ch ệ ả ệ ả ệ ệ vi c nh y (l nh GoTo) là vi c nh y (l nh GoTo) là ệ ố ậ ệ ố ậ l p trình h th ng thì l p trình h th ng thì ủ ể ể ủ i m m nh c a 1 ch đđi m m nh c a 1 ch
ây là vi c c n thi đđây là vi c c n thi ươương trình vi ng trình vi
t b ng Assembly. t b ng Assembly.
ở ở
ộ ệ ộ ệ ỗ ỗ
ề ầ ề ầ ệ ệ
ệ ệ
ấ ấ
ả CPU ph i th c thi 1 ạ ệ ự ả ạ ệ ự ả ả o n l nh đđo n l nh CPU ph i th c thi 1 M t l nh nh y M t l nh nh y ự ợ ang đưđư c th c thi. i mà các l nh ệ ớ ơơi mà các l nh ệ ực th c thi. ợ ớ đđang 1 ch khác v i n 1 ch khác v i n ả ể ầ ữ ậ ả ể ầ ữ ậ Trong l p trình, có nh ng nhóm phát bi u c n ph i Trong l p trình, có nh ng nhóm phát bi u c n ph i l p ặl p ặ đđi l p l đđó. Đ ểó. Đ ể ệ ề ặ ạ ặ ạ ề ệ đđi u ki n nào i u ki n nào i nhi u l n trong 1 i l p l i nhi u l n trong 1 ề đđáp ng ứáp ng ứ đđi u ki n này ASM cung c p 2 l nh JMP và ề i u ki n này ASM cung c p 2 l nh JMP và LOOP. LOOP.
33
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ệ
ệL nh JMP (Jump) L nh JMP (Jump)
ụ ụ
đđi u ềi u ề
ụ ả ụ ả
ụ ả ụ ả
ể ề ể đđi u khi n không ể ề ể i u khi n không Công d ng :Chuy n Công d ng :Chuy n ki n.ệki n.ệ • Cú pháp : JMP Cú pháp : JMP đđíchích • Nh y g n (NEAR) : 1 tác v nh y trong cùng 1 ả ầ ả ầ Nh y g n (NEAR) : 1 tác v nh y trong cùng 1 segment. segment. • Nh y xa (FAR) : 1 tác v nh y sang segment ả ả Nh y xa (FAR) : 1 tác v nh y sang segment khác. khác.
44
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ệ ệ
Cacù l nh chuy n Cacù l nh chuy n
ể ề ể đđi u khi n i u khi n ể ề ể
ể
ệ
ề
ề Chuy n ể đi u khi n vô
đi u ki n
JMP [ SORT | NEAR PTR |FAR PTR ] DEST
ể
ề
ệ
ề Chuy n ể đi u khi n có
đi u ki n
JConditional destination
Ex : JNZ nhãn đích ;
55
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Ệ
ỆL NH LOOP L NH LOOP
ệ ớ
ặ
đó.
ố ầ ấ
ỗ ầ ặ
ứ
ị
Công d ngụ : cho phép l p 1 công vi c v i 1 s l n nào M i l n l p CX gi m
ặ ả đi 1 đơn v . Vòng l p ch m d t khi CX =0.
ấ
ồ
ự
Ex 1 : xu t ra màn hình 12 dòng g m các ký t
A.
MOV CX, 12 * 80
MOV DL, ‘A’
NEXT :
MOV AH, 2
INT 21H
LOOP NEXT
66
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
LOOP (tt) LOOP (tt)
ồ
ể ấ Ex : có 1 Array A g m 6 bytes, chép A sang array B – dùng SI và DI đ l y Offset
77
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
MOV SI, OFFSET A MOV DI, OFFSET B MOV CX, 6 MOVE_BYTE : MOV AL, [SI] MOV [DI], AL INC SI INC DI LOOP MOVE_BYTE A DB 10H,20H,30H,40H,50H,60H B DB 6 DUP (?)
Ậ Ậ
Ệ Ệ
CÁC L NH LU N LÝ CÁC L NH LU N LÝ
LOGIC :
ế
ỉ
ế
ả
ế
ỉ
ả ả ủ
Lưu ý v các toán t ử ề ả AND 2 Bit : k t qu là 1 khi và ch khi 2 bit là 1 OR 2 Bit : k t qu là 1 khi 2 Bit có bit là 1 XOR 2 Bit : k t qu là 1 ch khi 2 bit khác nhau NOT 1 Bit : l y ấ đ o c a Bit này
ề ờ Lưu ý v thanh ghi c :
ờ ợ ậ ế ả C ZERO ụ đư c l p khi tác v cho k t qu là 0.
ờ ừ ả ợ ậ ả ị ế ộ C CARRY đư c l p khi c ng k t qu b tràn hay tr ph i m ư n.ợ
88
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ờ ấ ủ ế ứ ế ợ ậ ả ả ố C SIGN đư c l p khi bit d u c a k t qu là 1, t c k t qu là s âm.
ệ
ệL nh AND L nh AND
Cú pháp : AND Destination , Source
Công d ngụ :
ệ
ả ố
ữ
ệ
ế
ạ
ứ
ạ
ự L nh này th c hi n phép AND gi a 2 toán h ng, k t qu cu i cùng ch a trong toán h ng
đích.
ể
ủ
ạ
ị
ữ
ấ đ nh c a toán h ng
đích gi
nguyên
Dùng đ xóa các bit nh t i.ạ các bit còn l
ố
ặ ạ
ọ
ợ
ố
ậ Mu n v y ta dùng 1 m u bit g i là m t n bit (MASK), ặ ạ đư c ch n ương ng ứ ể ợ các bit m t n đ i nhổ c a ủ đích đư c thay
ẫ ọ đ sao cho các bit t ư mong mu n.
99
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ệ
ệL nh AND L nh AND
ấ ủ ữ ạ nguyên các bit còn l i :
Ex1 : xoá bit d u c a AL, gi dùng AND v i ớ 01111111b làm m t nặ ạ AND AL, 7FH
Ex2 : ủ ố ổ MOV AL, ‘5’ ; Đ i mã ASCII c a s
AND AL, 0FH ; thành s tố ương ng.ứ
Mask bits
ổ ữ ờ Ex3 : MOV DL, ‘a’ ; Đ i ch th ữ ư ng thành ch hoa.
AND DL, 0DFH ; thành s tố ương ng.ứ
1010
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Mask bits
Ệ
ố ụ ữ
ỆL NH OR L NH OR ể ậ đ b t lên 1 s bit và gi
Công d ng : dùng nguyên các bit khác.
Cú pháp : OR destination, source
Ex1 :
ấ ấ ấ ậ OR AL , 10000001b ; b t bit cao nh t và bit th p nh t trong thanh ghi AL lên 1
Ex 2:
ố ổ MOV AL , 5 ; đ i 0..9 thành ký s
OR AL , 30h ; ASCII tương ng.ứ Ex 3:
ế
ờ
N u : c ZF
đư c l p
ợ ậ AL =0
ờ c SIGN
đư c l p
ợ ậ AL <0
ờ
ờ c ZR và c SIGN không
đư c l p
ợ ậ AL >0
1111
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ể ộ OR AL , AL ; ki m tra m t thanh ghi có = 0.
ệ
ệVi c xoá 1 thanh ghi Vi c xoá 1 thanh ghi
ể Ta có 3 cách đ xoá 1 thanh ghi : C1: MOV AX , 0 C2 : SUB AX, AX C3 : XOR AX, AX
ệ Mã l nh 1 dài 3 bytes
ệ Mã l nh 2 và 3 dài 2 bytes ệ L nh 2,3 ệ ả ơn hi u qu h
ớ ớ
ầ
1212
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ệ ả Tuy nhiên các thao tác gi a ô ữ ợ ệ nh và ô nh là không h p l ớ nên khi c n xoá 1 ô nh ta ph i dùng l nh 1 .
Ệ
ỆL NH XOR L NH XOR
ụ ồ ọ Công d ng : dùng ể ạ đ h a màu t c đ t o ộ ố đ cao.
ậ
Ex : l
ầ ủ t bit cao c a AL 2 l n
MOV AL , 00111011b ;
XOR AL, 11111111b ; AL = 11000100b
XOR AL, 11111111b ; AL = 00111011b
1313
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Cú pháp : XOR destination, source
Ệ
ỆL NH TEST L NH TEST
ụ
ị ủ ừ
ể
ả
Công d ng : dùng
đ kh o sát tr c a t ng bit hay nhóm bit.
ự
ệ
ệ
ạ
ổ
ố Test th c hi n gi ng l nh AND nh
ưng không làm thay đ i toán h ng
đích.
Cú pháp : TEST destination, source
ể Ex : ki m tra bit 13 trong DX là 0 hay 1
TEST DX, 2000h
đó ch c n JZ BitIs0 ị
ỉ ầ ầ đúng v trí bit c n ế ờ ả BitIs1 : bit 13 is 1
1414
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
BitIs0 : bit 13 is 0 ể ể Đ ki m tra 1 bit nào ặ đ t bit 1 vào ể ki m tra và kh o sát c ZF. (n u ể bit ki m là 1 thì ZF s xoá, ợ ạ ngư c l ẽ ợ ậ đư c l p. i ZF
Ọ Ọ
Ệ Ệ
MINH H A L NH TEST MINH H A L NH TEST
ạ
ể
ẽ ể
ủ
ể
ạ
ế
ấ
ạ Ex : ki m tra tr ng thái máy in. Interrupt 17H trong BIOS s ki m tra tr ng ẽ ứ thái máy in, sau khi ki m tra AL s ch a tr ng thái máy in. Khi bit 5 c a AL là 1 thì máy in h t gi y.
MOV AH, 2
INT 17h
ệ
ề
L nh TEST cho phép test nhi u bit 1 l
ư t.ợ
1515
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ế ế ấ TEST AL , 00100000b ; Test bit 5, n u bit 5 = 1 máy in h t gi y.
Ọ Ọ
Ệ MINH H A L NH TEST(tt) Ệ MINH H A L NH TEST(tt)
ệ ệ
ạ ệ
ế
ế
ự t ế đo n l nh th c hi n l nh nh y
ứ ố ả đ n nhãn A1 n u AL ch a s
Ex :vi ch n.ẵ
ứ ố ẳ TEST AL, 1 ; AL ch a s ch n ?
1616
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
ế JZ A1 ; n u ế đúng nh y ả đ n A1.
ệ
ệL nh CMP L nh CMP
Cú pháp : CMP destination , source
ụ
ạ
ồ
đích v i toán h ng ngu n
ạ ồ
ạ
ằ
Công d ng : so sánh toán h ng ấ b ng cách l y toán h ng
ớ ạ đích – toán h ng ngu n.
ừ
ưng không có toán h ng ạ
ị
ộ Ho t ạ đ ng : dùng phép tr nh đích nào b thay
đ i.ổ
ủ ệ
ể
ạ
ớ Các toán h ng c a l nh CMP không th cùng là các ô nh .
ừ ệ
ệ ệ
ạ
ố
ệ l nh CMP gi ng h t l nh SUB tr vi c toán h ng
đích không thay đ i.ổ
1717
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Ả Ả
Ệ Ệ
Ề Ề
Ệ Ệ
L NH NH Y CÓ ĐI U KI N L NH NH Y CÓ ĐI U KI N
Cú pháp : Jconditional destination
ụ
ệ
ệ
ề
ả
ớ
ỏ
ờ
ể
ợ
đư c các phát bi u
ủ
ấ
Công d ng : nh các l nh nh y có đi u ki n, ta m i mô ph ng ằ ữ ấ có c u trúc c a ngôn ng c p cao b ng Assembly.
ạ Ph m vi
ả
ừ
ế
ớ
ỉ
ả đ n nhãn có kho ng cách t
128
đ n +127 byte so v i
ể
ị
ế Ch nh y ị ệ v trí hi n hành. ạ Dùng các tr ng thái c
ờ đ quy t
ả ế đ nh có nh y hay không?
1818
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Ả Ả
Ệ Ệ
Ệ Ệ
Ề Ề
L NH NH Y CÓ ĐI U KI N L NH NH Y CÓ ĐI U KI N
Ho t ạ đ ngộ
ệ
ả
ể ự ề
ờ đ th c hi n 1 l nh nh y CPU nhìn vào các thanh ghi c . ả n u ế đi u ki n c a l nh nh y th a, CPU s
ỏ đ n ế
ẽ đi u ch nh IP tr ỉ ự
ề ệ
ợ
ệ ỏ ệ ủ ệ ẽ đư c th c hi n. ệ nhãn đích các l nh sau nhãn này s
……………
PRINT_LOOP :
MOV AH, 2
INT 21H
MOV CX, 26
INC DL
MOV DL, 41H
DEC CX
JNZ PRINT_LOOP
MOV AX, 4C00H
INT 21H
1919
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Ệ Ệ
Ả Ả
Ế Ế
Ả Ự Ả Ự Ạ Ạ
Ấ Ấ
L NH NH Y D A TRÊN K T QU SO SÁNH L NH NH Y D A TRÊN K T QU SO SÁNH CÁC TOÁN H NG KHÔNG D U. CÁC TOÁN H NG KHÔNG D U.
ờ
ể
ề
ệ
ả
ặ
đ xét
đi u ki n nh y ho c
ệ Thư ng dùng l nh CMP Opt1 , Opt2 ờ ự d a trên các c .
JZJZ
JEJE
JNZJNZ
JNEJNE
2020
Chuong 8 : Cau truc DK va Vong lap Chuong 8 : Cau truc DK va Vong lap
Nhaûy neáu keát quaû so saùnh = Nhaûy neáu keát quaû so saùnh = 00 Nhaûy neáu 2 toaùn haïng baèng Nhaûy neáu 2 toaùn haïng baèng nhau nhau Nhaûy neáu keát quaû so saùnh laø Nhaûy neáu keát quaû so saùnh laø khaùc nhau. khaùc nhau. Nhaûy neáu 2 toaùn haïng khaùc Nhaûy neáu 2 toaùn haïng khaùc nhau. nhau. JAJA Nhaûy neáu Opt1 > Opt2 Nhaûy neáu Opt1 > Opt2 Nhaûy neáu Opt1 <= Opt2 JNBE Nhaûy neáu Opt1 <= Opt2 JNBE
Nhaûy neáu Opt1 >= Opt2
JAEJAE
Nhaûy neáu Opt1 >= Opt2
Nhaûy neáu Not (Opt1 JNBJNB Nhaûy neáu Not (Opt1 Ệ
Ệ Ả
Ả Ế
Ế Ả Ự
Ả Ự
Ạ
Ạ Ấ
Ấ L NH NH Y D A TRÊN K T QU SO SÁNH
L NH NH Y D A TRÊN K T QU SO SÁNH
CÁC TOÁN H NG KHÔNG D U (ctn) .
CÁC TOÁN H NG KHÔNG D U (ctn) . JNCJNC Nhaûy neáu khoâng coù Carry.
Nhaûy neáu khoâng coù Carry. Nhaûy neáu Opt1 < Opt2
JBJB
Nhaûy neáu Opt1 < Opt2
Nhaûy neáu Not(Opt1 >= Opt2)
JNAE Nhaûy neáu Not(Opt1 >= Opt2)
JNAE JCJC
JBEJBE
JNAJNA Nhaûy neáu coù Carry
Nhaûy neáu coù Carry
Nhaûy neáu Opt1<=Opt2
Nhaûy neáu Opt1<=Opt2
Nhaûy neáu Not (Opt1 > Opt2)
Nhaûy neáu Not (Opt1 > Opt2) 2121 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ệ
Ệ Ả
Ả Ấ
Ấ Ế
Ả Ự
L NH NH Y D A TRÊN K T QU SO SÁNH
Ế
Ả Ự
L NH NH Y D A TRÊN K T QU SO SÁNH
Ạ
CÁC TOÁN H NG CÓ D U .
Ạ
CÁC TOÁN H NG CÓ D U . JGJG
Nhaûy neáu Opt1>Opt2
Nhaûy neáu Opt1>Opt2
Nhaûy neáu Not(Opt1 <= Opt2)
JNLE Nhaûy neáu Not(Opt1 <= Opt2)
JNLE JGEJGE Nhaûy neáu Opt1>=Opt2
Nhaûy neáu Opt1>=Opt2 JNLJNL
Nhaûy neáu Not (Opt1 < Opt2)
Nhaûy neáu Not (Opt1 < Opt2)
Nhaûy neáu Opt1 < Opt2
JLJL
Nhaûy neáu Opt1 < Opt2
Nhaûy neáu Not (Opt1 >= Opt2)
JNGE Nhaûy neáu Not (Opt1 >= Opt2)
JNGE
Nhaûy neáu Opt1 <= Opt2
JLEJLE
Nhaûy neáu Opt1 <= Opt2
Nhaûy neáu Not (Opt1 > Opt2)
JNGJNG Nhaûy neáu Not (Opt1 > Opt2) 2222 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ệ
Ờ
Ả Ự
L NH NH Y D A TRÊN CÁC C .
Ệ
Ờ
Ả Ự
L NH NH Y D A TRÊN CÁC C .
Nhaûy neáu CX=0
JCXZ Nhaûy neáu CX=0
JCXZ JSJS
JNSJNS
JOJO Nhaûy neáu SF=1
Nhaûy neáu SF=1
Nhaûy neáu SF =0
Nhaûy neáu SF =0
Nhaûy neáu ñaõ traøn trò
Nhaûy neáu ñaõ traøn trò Nhaûy neáu Opt1 < Opt2
JLJL
Nhaûy neáu Opt1 < Opt2
Nhaûy neáu Not (Opt1 >= Opt2)
JNGE Nhaûy neáu Not (Opt1 >= Opt2)
JNGE JLEJLE
Nhaûy neáu Opt1 <= Opt2
Nhaûy neáu Opt1 <= Opt2
Nhaûy neáu traøn trò
JNOJNO Nhaûy neáu traøn trò JPJP
JNPJNP Nhaûy neáu parity chaún
Nhaûy neáu parity chaún
Nhaûy neáu PF =0
Nhaûy neáu PF =0 2323 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ọ Ệ Ị Ụ Ả CÁC V D MINH H A L NH NH Y CÓ ĐK ố ớ ơn trong 2 s ố ứ
ế ể Ex1 : tìm s l n h
ch a trong thanh ghi AX và BX .
K t qu ả đ trong DX ả ử ố ớ ; gi s AX là s l n h ơn. ; IF AX >=BX then ế
; nh y ả đ n QUIT ợ ạ ; ngư c l i chép BX vào DX MOV DX, AX
CMP DX, BX
JAE QUIT
MOV DX, BX
QUIT :
MOV AH,4CH
INT 21H
………… 2424 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ọ Ệ Ụ Ả CÁC VÍ D MINH H A L NH NH Y CÓ ĐK ấ ố ỏ
ể ế ố ứ
Ex1 : tìm s nh nh t trong 3 s ch a trong thanh ghi ALø BL và
ả đ trong bi n SMALL
ế
CL . K t qu ả ử ỏ ; gi ấ
s AL nh nh t ế ; n u SMALL <= BL thì ế ế Nh y ả đ n L1
; n u SMALL <= CL thì ế ; Nh y ả đ n L2 ấ ỏ ố
; CL là s nh nh t MOV SMALL, AL
MOV SMALL, AL
CMP SMALL, BL
CMP SMALL, BL
JBE L1
JBE L1
MOV SMALL, BL
MOV SMALL, BL
L1 :
L1 :
CMP SMALL, CL
CMP SMALL, CL
JBE L2
JBE L2
MOV SMALL, CL
MOV SMALL, CL
L2 : . . .
L2 : . . . 2525 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Các l nh d ch và quay bit
Các l nh d ch và quay bit ủ ạ ị SHL (Shift Left) : d ch các bit c a toán h ng
đích sang trái Cú pháp : SHL toán h ng ạ đích ,1 ị ị D ch 1 v trí. Cú pháp : SHL toán h ng ạ đích ,CL ị ứ ố ầ ị ị
D ch n v trí trong đó CL ch a s bit c n d ch. 2626 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Các l nh d ch và quay bit
Các l nh d ch và quay bit ứ ứ Ex : DH ch a 8Ah, CL ch a 3. SHL DH, CL ; 01010000b ế ế ả ủ ? Cho bi t k t qu c a : SHL 1111b, 3 ự ằ 2727 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ệ
MT th c hi n phép nhân b ng
ị
d ch trái ụ ủ ạ ị đích sang bên Công d ng : d ch các bit c a toán h ng
ph i.ả Cú pháp : SHR toán h ng ạ đích , 1 ả ị SHR toán h ng ạ đích , CL ; d ch ph i n bit trong đó CL ch a nứ ủ ờ Ho t ạ đ ng : 1 giá tr 0 s
ả
h ng ạ ị
ộ
đích, còn bit bên ph i nh t s ẽ đư c ợ đưa vào bit msb c a toán
ấ ẽ đư c ợ đưa vào c CF. ự ằ 2828 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ệ
ị MT th c hi n phép chia b ng
ả
d ch ph i Ex : shr 0100b, 1 ; 0010b = 2 ả ẽ , d ch ph i s chia đôi nó và làm tròn ố ẻ ị
ầ ố ớ
ố ấ Đ i v i các s l
ố
xu ng s nguyên g n nh t. 2929 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ex : shr 0101b, 1 ; 0010b = 2 ổ
ổ Các phép nhân và chia t ng quát
Các phép nhân và chia t ng quát ố ừ ủ
ả ệ
ự ệ ệ ằ ị ể
Vi c nhân và chia cho các s lũy th a c a 2 có th
ị
th c hi n b ng l nh d ch trái và d ch ph i. ể ế ợ ố ấ ỳ ộ ị ể
Đ nhân và chia cho các s b t k ta có th k t h p
ệ
l nh d ch và c ng. ố ương A và B b ng ằ ộ ị Ex : nhân 2 s nguyên d
ệ
l nh c ng và d ch bit. ả ử Gi s A = 111b và B = 1101b. Tính A*B 3030 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ổ
ổ Các phép nhân và chia t ng quát
Các phép nhân và chia t ng quát ậ Thu t toán : Tích = 0 Repeat If bit Lsb c a B b ng 1 Then tích = tích + A End If D ch trái A D ch ph i B Until B =0 3131 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ổ
ổ Các phép nhân và chia t ng quát
Các phép nhân và chia t ng quát ủ Vì bit lsb c a B = 1 tích = tích +A = 111b ị D ch trái A : 1110b ị ả
D ch ph i B : 110b ủ Vì bit lsb c a B = 0 ị D ch trái A : 11100b B h A * ị ả
D ch ph i B : 11b b . T í n 1 0 1 ủ Vì bit lsb c a B = 1 à B = 1 b v 1 1 Tích =tích + A = 100011b A = 1 ị D ch trái A : 111000b s G i 3232 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ị ả
D ch ph i B : 1b ố ư chương trình ở Có vai trò gi ng nh
ữ ấ
con ngôn ng c p cao. ạ ương trình con : d ng FAR và ạ ạ
ASM có 2 d ng ch
d ng NEAR. ọ
ệ
L nh g i CTC
đo n ạ
ằ
n m khác
ớ ớ
ộ
b nh v i CTC
ợ ọ
đư c g i 3333 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ọ
ệ
L nh g i CTC
đo n ạ
ằ
n m cùng
ớ ớ
ộ
b nh v i CTC
ợ ọ
đư c g i BI U DI N C U TRÚC LOGIC M C CAO
BI U DI N C U TRÚC LOGIC M C CAO ể ổ ợ ủ ệ 3434 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ự ấ ể ệ ữ ấ ủ ể
Dù Assembly không có phát bi u IF, ELSE, WHILE, REPEAT,
UNTIL,FOR,CASE nhưng ta v n có th t
ẫ
h p các l nh c a
Assembly đ hi n th c c u trúc logic c a ngôn ng c p cao. ể ệ
ề
đi u ki n và
ể đư c ợ ấ
C u trúc IF
Đơn gi nả ề ể ệ ị
đi u ki n ki m tra có giá tr ẽ ể
Phát bi u IF s ki m tra 1
ố
theo sau đó là 1 s các phát bi u
ự
th c thi khi
true. ấ Ệ C u trúc logic Ự Ằ
HI N TH C B NG ASM 3535 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap IF (OP1=OP2)
ể ử Phát bi u IF có kèm toán t OR ấ
C u trúc IF
v i ORớ Ệ Ự Ằ
HI N TH C B NG ASM ấ C u trúc logic IF (A1>OP1) OR
(A1>=OP2) OR
(A1=OP3) OR
(A1 3636 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap CMP A1,OP1
JG EXCUTE
CMP A1,OP2
JGE EXCUTE
CMP A1,OP3
JE EXCUTE
CMP A1,OP4
JL EXCUTE
JMP CONTINUE
EXCUTE : ể ử Phát bi u IF có kèm toán t AND ấ
C u trúc IF
ớ
v i AND ấ C u trúc logic IF (A1>OP1) AND
(A1>=OP2) AND
(A1=OP3) AND
(A1 Ệ Ự Ằ
HI N TH C B NG ASM CMP A1,OP1
JNG CONTINUE
CMP A1,OP2
JL CONTINUE
CMP A1,OP3
JNE CONTINUE
CMP A1,OP4
JNL CONTINUE
ấ ệ ề ế ỏ ử
ư c l AND, cách hay nh t là
ợ ạ đ n nhãn, b qua phát i 3737 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ể ề
ệ
CHÚ Ý : khi đi u ki n có toán t
ả
ớ đi u ki n ng
dùng nh y v i
ấ
bi u trong c u trúc Logic. Ặ
VÒNG L P WHILE ấ C u trúc WHILE ấ C u trúc logic Ệ DO WHILE (OP1 3838 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ự Ằ
HI N TH C B NG ASM
DO_WHILE :
CMP OP1, OP2
JNL ENDDO
Ồ Ặ VÒNG L P WHILE CÓ L NG IF ấ ấ C u trúc logic DO WHILE (OP1 C u trúc WHILE
ồ
có l ng IF Ệ 3939 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ự Ằ
HI N TH C B NG ASM
_WHILE :
CMP OP1, OP2
JNL WHILE_EXIT
Ặ VÒNG L P REPEAT UNTIL ấ C u trúc REPEAT
UNTIL ấ C u trúc logic
REPEAT
u a h a t n e ằ p e g n
á t R o B
t h Ệ 4040 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ự Ằ
HI N TH C B NG ASM
REPEAT :
ấ C u trúc CASE ấ C u trúc logic
CASE INPUT OF
‘A’ : Proc_A
‘B’ : Proc_B
‘C’ : Proc_C
‘D’ : Proc_D
End ; Ệ 4141 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Ự Ằ
HI N TH C B NG ASM
CASE : MOV AL, INPUT
CMP AL, ‘A’
JNE TESTB
CALL PROC_A
JMP ENDCASE
TESTB :
CMP AL, ‘B’
JNE TESTC
CALL PROC_B
JMP ENDCASE
TESTC :
CMP AL, ‘C’
JNE TESTD
CALL PROC_C
JMP ENDCASE
TESTD : CMP AL, ‘D’
JNE ENDCASE
CALL PROC_D
ENDCASE : ………. ấ ả ệ ử ể ả ặ ủ ẽ ị ỉ ủ
ệ ề R t hi u qu khi x lý phát bi u CASE là dùng b ng
OFFSET ch a ứ đ a ch c a nhãn ho c c a hàm s nh y
ả
ỳ
ế
đ n tu vào đi u ki n. ả ệ ấ
ọ ị ự ề ả
đư c g i Lookup Table r t hi u qu
ợ ọ
B ng Offset này
ể
khi dùng phát bi u Case có nhi u tr l a ch n. 4242 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap LooKup Table LooKup Table Case_table db ‘A’ Dw Proc_A gi s gi s gi s Db ‘B’
Dw Proc_B
Db ‘C’
Dw Proc_C
Db ‘D’
Dw Proc_D ‘‘A’A’ 0120 0120 ‘‘B’B’ 0130 0130 ‘‘C’C’ 0140 0150
0140 ‘‘D’D’ 0150 ấ ưu tr c a ữ ủ
C u trúc l
CaseTable như sau 4343 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap LooKup Table Case : MOV AL, INPUT MOV BX, OFFSET CASE_TABLE ầ ố ủ ặ MOV CX, 4 ; l p 4 l n s entry c a table TEST : ể CMP AL, [BX] ; ki m tra Input ỏ ể ế JNE TESTAGAIN ; không th a ki m tra ti p CALL WORD PTR [BX+1] ; g i th t c t ọ ủ ụ ương ngứ JMP ENDCASE ủ TESTAGAIN : ADD BX , 3 ; sang entry sau c a CaseTable LOOP TEST 4444 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ENDCASE : ………….. ấ C u trúc CTC : TênCTC PROC ặ ọ ể ọ CTC có th g i 1 CTC khác ho c g i chính nó. ọ ằ ợ ệ
CTC đư c g i b ng l nh CALL ầ ằ ương trình con n m chung ọ CTC g n (near) là ch
segment v i nớ ơi g i nó. ằ 4545 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap ọ CTC xa (far) là chương trình con không n m chung
segment v i nớ ơi g i nó. ỹ ậ ậ
K thu t l p trình Hãy t ậ ổ ứ
ch c ch
ả
ễ ể ễ ể ọ ương trình các chương trình con
đơn gi n hoá c u trúc lu n lý c a CT làm cho CT
ủ
ấ
d ễ đ c, d hi u , d ki m tra sai sót.. ầ ấ ị ằ ệ ạ Đ u CTC hãy c t tr thanh ghi vào Stack b ng
đ lể ưu tr ng thái hi n hành.
ệ
l nh PUSH ấ t công vi c c a CTC nên ph c h i ụ ồ
ệ ằ ệ ủ
ư c ớ đã Push b ng l nh Sau khi hoàn t
ạ ị
i tr các thanh ghi lúc tr
l
POP . ự ể ị ủ là ng ư c nhau đ tr c a thanh ghi ớ
Nh trình t
ả ợ
ấ nào tr cho thanh ghi n y. ể ừ
Đ ng t ố ưu quá CT vì có th làm cho CT kém 4646 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap i
thông minh, khó đ c.ọ ậ ậ ỹ K thu t l p trình (tt) ch c ch ự ả ổ ứ
C g ng t
ợ
ế ế đư c các b ố ắ
t k ư c chớ t ố ph i ả
ương trình cho t
ẽ
ương trình s ph i th c thi
hi n. ệ ớ ả
ấ đ càng l n thì càng ph i ặ ệ
Kinh nghi m : khi v n
ổ ứ
ch c logic ch ề
ẽ
ương trình càng ch t ch . t ằ 4747 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap B ng s t
ể ả
h p c a l nh nh y ta hoàn toàn có
ể
ấ ặ ự ổ ợ ủ ệ
ề
ỏ
th mô ph ng c u trúc đi u khi n và vòng l p. SUMMARY đi u ki n. đi u ki n nh y là đ làm ch c ch 4848 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Câu h iỏ
Câu h iỏ ạ ớ ị 1. Gi ế đ a ch ô nh toán h ng ả ử
s DI = 2000H, [DS:2000] = 0200H. Cho bi
ồ t
ự ế ả ưu trong toán h ng ạ ỉ
ệ ệ
đích khi th c hi n l nh MOV DI, [DI] ngu n và k t qu l 2. s SI = 1500H, DI=2000H, [DS:2000]=0150H . Cho bi t ớ
ế đ a ch ô nh
ỉ
ệ ệ ế ả ưu trong toán h ng ạ ị
ự
đích sau khi th c hi n l nh ả ử
Gi
ồ
ạ
toán h ng ngu n và k t qu l
ADD AX, [DI] 3. Có khai báo A DB 1,2,3
ế ị ủ ạ ệ t tr c a toán h ng đích sau khi thi hành l nh MOV AH, BYTE PTR Cho bi
A. 4. Có khai báo B DB 4,5,6
ế ị ủ ạ t tr c a toán h ng ệ
đích sau khi thi hành l nh MOV AX, WORD Cho bi
PTR B. 4949 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Bài t p L P TRÌNH
Bài t p L P TRÌNH ớ ỉ ở ợ Bài 1 : Có vùng nh VAR1 dài 200 bytes trong đo n ạ đư c ch b i DS. ố ữ ế ớ Vi t chế ương trình đ m s ch ‘S’ trong vùng nh này. ế ớ ớ ờ ự ương trình chuy n ể đ i ổ
ạ
ự
i hoa, các ký t còn l t ch
Bài 2 : Có vùng nh VAR2 dài 1000 bytes. Vi
các ch thữ ư ng trong vùng nh này thành các ký t
không đ i.ổ ố Bài 3 : Vi t chế ậ
ương trình nh p 2 s nh h ỏ ơn 10. ủ ổ In ra t ng c a 2 s ố đó. 5050 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Bài t p L P TRÌNH
Bài t p L P TRÌNH Bài 4 : Vi t chế ố ấ ỳ
ương trình nh p 2 s b t k .
ậ ạ ủ ổ In ra t ng và tích c a 2 s ố đó. Chương trình có d ng sau : ậ ố Nh p s 1 : 12 ậ ố Nh p s 2 : 28 ổ T ng là : 40 ậ ự ể ị ự t chế . Hi n th 5 ký t ương trình nh p 1 ký t
ộ Bài 5 : Vi
ế ế
k ti p trong b mã ASCII. ự ậ
Ex : nh p ký t : a ự ế ế 5 ký t k ti p : b c d e f 5151 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lap Tích là : 336 Bài t p L P TRÌNH
Bài t p L P TRÌNH ậ ự ể ị ự ương trình nh p 1 ký t . Hi n th 5 ký t t chế
Bài 6 : Vi
ớ
ứ
đ ng tr ộ
ư c trong b mã ASCII. ự ậ
Ex : nh p ký t : f ự ế ế 5 ký t k ti p : a b c d e ổ ự Bài 7 : Vi t chế ậ
ương trình nh p 1 chu i ký t . ứ ự ậ In chu i ổ đã nh p theo th t ng ư c.ợ ự ậ
Ex : nh p ký t : abcdef ự ế ế 5 ký t k ti p : fedcba 5252 Chuong 8 : Cau truc DK va Vong lap
Chuong 8 : Cau truc DK va Vong lapệ
ệ
ị
ị
ẽ đ ư c ợ đ ư a v à o v ị
đ í c h , c ò n b i t
n g : m t g i á t r 0 s
ị
ộ
n g
ạ
a t o á n h
ủ
t c
ấ
i n h
C F
ờ
đ ư c ợ đ ư a v à o c
ả
a n ó
ủ
ộ
t ạ đ
H o
t r í b ê n p h
m s b c
ệ
ệ
ị
ị
ả
ả
ị
ị
ệ
ệ
l nh d ch ph i SHR
l nh d ch ph i SHR
ả
ả
ị
ị
ệ
ệ
l nh d ch ph i SHR
l nh d ch ph i SHR
ủ
ằ
ị
ả
ị
ủ
ị
ị
Vì bit lsb c a B =1
Tích = 100011b+111000b= 1011011b
D ch trái A : 1110000b
ả
D ch ph i B : 0b
ủ
Vì bit lsb c a B = 0
Tích = 1011011b = 91d
ử
ả
ChChươương trình con
ng trình con
Ứ
Ứ
Ấ
Ấ
Ể
Ể
Ễ
Ễ
ế
ỉ
; giá tr tìm ki m
ị
Đ a ch các procedure
ị
ả ử ở đ a ch 0120
gi
ị
ỉ
s
ỉ
ị
ả ử ở đ a ch 0130
ỉ
ị
ả ử ở đ a ch 0140
ỉ
ị
ả ử ở đ a ch 0150
ChChươương trình con
ng trình con
ể
ỏ
ữ ấ
ư ngôn ng c p
ệ
ả
ề
ề
ệ
ệ
ẽ
ả
ị
ặ ệ
ằ
ị
ề
ệ
ể
ệ
ả
ậ
ổ ứ
ấ ứ
ể
ủ
ậ
Có th mô ph ng c u trúc logic nh
ấ
ằ
cao trong Assembly b ng l nh JMP và LOOP.
các l nh nh y : có
ệ
đi u ki n và vô
Khi g p l nh nh y, CPU s quy t
ế đ nh nh y hay
ả
ờ
ự
không b ng cách d a vào giá tr thanh ghi c .
các l nh lu n lý dùng
AND, OR, XOR, CMP . . .
B t c khi nào có th , hãy t
ương trình
thành các chương trình con đơn gi n ả đư c c u
ợ ấ
ương trình.
trúc lu n lý c a ch
ậ Ậ
ậ Ậ
ậ Ậ
ậ Ậ
ậ Ậ
ậ Ậ