ể ể

ấ 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.

ẽ đ ư 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

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

ả ả

ị ị

ệ ệ l nh d ch ph i SHR   l nh d ch ph i SHR

ụ ủ ạ ị đí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

ả ả

ị ị

ệ ệ l nh d ch ph i SHR   l nh d ch ph i SHR

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 =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

ủ 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

ChChươương trình con ng trình con

ố ư 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)     ENDIF CMP OP1,OP2 JNE  CONTINUE      CONTINUE : ….

ể ử 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 ENDIF

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 :  CONTINUE : …..

ể ử 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 ENDIF

Ệ Ự Ằ 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 JMP CONTINUE 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 ENDDO

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             JMP DO_WHILE  ENDDO : …..

Ồ Ặ VÒNG L P WHILE CÓ L NG  IF ấ

C u trúc logic

DO WHILE (OP1 IF (OP2=OP3) THEN ENDIF ENDDO

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         CMP OP2,OP3 ; ph n Ifầ ỏ    JNE ELSE ; không th a If      ; th a Ifỏ    ỏ   JMP  ENDIF; th a If nên  ỏ                          b  qua Else ELSE :  ENDIF : JMP  _WHILE  WHILE_EXIT : …..

Ặ VÒNG L P REPEAT UNTIL ấ

C u trúc REPEAT  UNTIL

C u trúc logic REPEAT          UNTIL (OP1=OP2) OR (OP1>OP3)

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 :       TESTOP12: CMP OP1, OP2 JE  ENDREPEAT TESTOP13 : CMP OP1, OP3 JNG  REPEAT ENDREPEAT : …..

ấ 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á tr  tìm ki m ị Đ a ch  các procedure  ị ả ử ở đ a ch  0120 gi

ị ỉ  s

gi

ị ả ử ở đ a ch  0130

s

gi

ị ả ử ở đ a ch  0140

s

gi

ị ả ử ở đ a ch  0150

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 : …………..

ChChươương trình con ng trình con

ấ C u trúc CTC :

TênCTC   PROC         ; các l nh ệ        RET TênCTC  ENDP

ặ ọ ể ọ 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

ữ ấ

ư ngôn ng  c p

đi u ki n.

ặ ệ ằ

đi u ki n nh y  là

đ  làm

ổ ứ

ấ ứ

ch c ch

 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

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