Bài giảng Cấu trúc máy tính Lập trình hợp ngữ - Chương 7: Cấu trúc điều khiển và Vòng lặp

ppt 52 trang phuongnguyen 3350
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc máy tính Lập trình hợp ngữ - Chương 7: Cấu trúc điều khiển và Vòng lặp", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cau_truc_may_tinh_lap_trinh_hop_ngu_chuong_7_cau_t.ppt

Nội dung text: Bài giảng Cấu trúc máy tính Lập trình hợp ngữ - Chương 7: Cấu trúc điều khiển và Vòng lặp

  1. Chương 8 : Cấu trúc điều khiển và Vòng lặp Mục tiêu Biết cách mô phỏng cấu trúc điều khiển và vòng lặp như ở ngôn ngữ 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. Chuong 8 : Cau truc DK va Vong lap 1
  2. Nội dung ✓ Sự cần thiết của lệnh nhảy trong lập trình ASM. ✓ Lệnh JMP (Jump) : nhảy không điều kiện. ✓ 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ý. ✓ Lệnh lặp có điều kiện. ✓ Lệnh nhảy có điều kiện. ✓ Biểu diễn mô phỏng cấu trúc luận lý mức cao. ✓ Chương trình con. ✓ Một số chương trình minh họa. Chuong 8 : Cau truc DK va Vong lap 2
  3. Sự cần thiết của lệnh nhảy Ở các chương trình viết bằng ngôn ngữ cấp cao thì việc nhảy (lệnh GoTo) là điều nên tránh nhưng ở lập trình hệ thống thì đây là việc cần thiết và là điểm mạnh của 1 chương trình viết bằng Assembly. Một lệnh nhảy ➔ CPU phải thực thi 1 đoạn lệnh ở 1 chỗ khác với nơi mà các lệnh đang được thực thi. Trong lập trình, có những nhóm phát biểu cần phải lặp đi lặp lại nhiều lần trong 1 điều kiện nào đó. Để đáp ứng điều kiện này ASM cung cấp 2 lệnh JMP và LOOP. Chuong 8 : Cau truc DK va Vong lap 3
  4. Lệnh JMP (Jump) Công dụng :Chuyển điều khiển không điều kiện. • Cú pháp : JMP đích • Nhảy gần (NEAR) : 1 tác vụ nhảy trong cùng 1 segment. • Nhảy xa (FAR) : 1 tác vụ nhảy sang segment khác. Chuong 8 : Cau truc DK va Vong lap 4
  5. Cacù lệnh chuyể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 ; Chuong 8 : Cau truc DK va Vong lap 5
  6. 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 Chuong 8 : Cau truc DK va Vong lap 6
  7. 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 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 (?) Chuong 8 : Cau truc DK va Vong lap 7
  8. CÁC LỆNH LUẬN LÝ Lưu ý về các toán tử LOGIC : 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. Cờ SIGN được lập khi bit dấu của kết quả là 1, tức kết quả là số âm. Chuong 8 : Cau truc DK va Vong lap 8
  9. 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. Dùng để xóa các bit nhất định của toán hạng đích giữ nguyên các bit còn lại. Muốn vậy ta dùng 1 mẫu bit gọi là mặt nạ bit (MASK), các bit mặt nạ được chọn để sao cho các bit tương ứng của đích được thay đổi như mong muốn. Chuong 8 : Cau truc DK va Vong lap 9
  10. Lệnh AND Ex1 : xoá bit dấu của AL, giữ nguyên các bit còn lại : 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. Ex3 : Mask bits MOV DL, ‘a’ ; Đổi chữ thường thành chữ hoa. AND DL, 0DFH ; thành số tương ứng. Mask bits Chuong 8 : Cau truc DK va Vong lap 10
  11. LỆNH OR Công dụng : dùng để bật lên 1 số bit và giữ 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: OR AL , AL ; kiểm tra một thanh ghi có = 0. Nếu : cờ ZF được lập ➔ AL =0 cờ SIGN được lập ➔ AL 0 Chuong 8 : Cau truc DK va Vong lap 11
  12. 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 ➔ Lệnh 2,3 Mã lệnh 2 và 3 dài 2 bytes hiệu quả hơn 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 . Chuong 8 : Cau truc DK va Vong lap 12
  13. LỆNH XOR Công dụng : dùng để tạo đồ họa màu tốc độ cao. Cú pháp : XOR destination, source Ex : lật bit cao của AL 2 lần MOV AL , 00111011b ; XOR AL, 11111111b ; AL = 11000100b XOR AL, 11111111b ; AL = 00111011b Chuong 8 : Cau truc DK va Vong lap 13
  14. LỆNH TEST Cú pháp : TEST destination, source 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. Ex : kiểm tra bit 13 trong DX là 0 hay 1 TEST DX, 2000h Để kiểm tra 1 bit nào đó chỉ cần JZ BitIs0 đặt bit 1 vào đúng vị trí bit cần BitIs1 : bit 13 is 1 kiểm tra và khảo sát cờ ZF. (nếu bit kiểm là 1 thì ZF sẽ xoá, ngược BitIs0 : bit 13 is 0 lại ZF được lập. Chuong 8 : Cau truc DK va Vong lap 14
  15. 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 TEST AL , 00100000b ; Test bit 5, nếu bit 5 = 1➔ máy in hết giấy. Lệnh TEST cho phép test nhiều bit 1 lượt. Chuong 8 : Cau truc DK va Vong lap 15
  16. MINH HỌA LỆNH TEST(tt) Ex :viết đoạn lệnh thực hiện lệnh nhảy đến nhãn A1 nếu AL chứa số chẵn. TEST AL, 1 ; AL chứa số chẳn ? JZ A1 ; nếu đúng nhảy đến A1. Chuong 8 : Cau truc DK va Vong lap 16
  17. Lệnh CMP Cú pháp : CMP destination , source Công dụng : so sánh toán hạng đích với toán hạng nguồn bằng cách lấy toán hạng đích – toán hạng nguồn. Hoạt động : dùng phép trừ nhưng không có toán hạng đí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. Chuong 8 : Cau truc DK va Vong lap 17
  18. LỆNH NHẢY CÓ ĐIỀU KIỆN Cú pháp : Jconditional destination Công dụng : nhờ các lệnh nhảy có điều kiện, ta mới mô phỏng được các phát biểu có cấu trúc của ngôn ngữ cấp cao bằng Assembly. Phạm vi Chỉ nhảy đến nhãn có khoảng cách từ -128 đến +127 byte so với vị trí hiện hành. Dùng các trạng thái cờ để quyết định có nhảy hay không? Chuong 8 : Cau truc DK va Vong lap 18
  19. 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ẽ điều chỉnh IP trỏ đến nhãn đích các lệnh sau nhãn này sẽ được thực hiện. 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 Chuong 8 : Cau truc DK va Vong lap 19
  20. LỆNH NHẢY DỰA TRÊN KẾT QUẢ SO SÁNH CÁC TOÁN HẠNG KHÔNG DẤU. Thường dùng lệnh CMP Opt1 , Opt2 để xét điều kiện nhảy hoặc dựa trên các cờ. JZ Nhaûy neáu keát quaû so saùnh = 0 JE Nhaûy neáu 2 toaùn haïng baèng nhau JNZ Nhaûy neáu keát quaû so saùnh laø khaùc nhau. JNE Nhaûy neáu 2 toaùn haïng khaùc nhau. JA Nhaûy neáu Opt1 > Opt2 JNBE Nhaûy neáu Opt1 = Opt2 Chuong 8 : Cau truc DK va Vong lap 20 JNB Nhaûy neáu Not (Opt1<Opt2)
  21. 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) . JNC Nhaûy neáu khoâng coù Carry. JB Nhaûy neáu Opt1 = Opt2) JC Nhaûy neáu coù Carry JBE Nhaûy neáu Opt1 Opt2) Chuong 8 : Cau truc DK va Vong lap 21
  22. LỆNH NHẢY DỰA TRÊN KẾT QUẢ SO SÁNH CÁC TOÁN HẠNG CÓ DẤU . JG Nhaûy neáu Opt1>Opt2 JNLE Nhaûy neáu Not(Opt1 =Opt2 JNL Nhaûy neáu Not (Opt1 = Opt2) JLE Nhaûy neáu Opt1 Opt2) Chuong 8 : Cau truc DK va Vong lap 22
  23. LỆNH NHẢY DỰA TRÊN CÁC CỜ . JCXZ Nhaûy neáu CX=0 JS Nhaûy neáu SF=1 JNS Nhaûy neáu SF =0 JO Nhaûy neáu ñaõ traøn trò JL Nhaûy neáu Opt1 = Opt2) JLE Nhaûy neáu Opt1 <= Opt2 JNO Nhaûy neáu traøn trò JP Nhaûy neáu parity chaún JNP Nhaûy neáu PF =0 Chuong 8 : Cau truc DK va Vong lap 23
  24. CÁC VỊ DỤ MINH HỌA LỆNH NHẢY CÓ ĐK Ex1 : tìm số lớn hơn trong 2 số chứa trong thanh ghi AX và BX . Kết quả để trong DX MOV DX, AX ; giả sử AX là số lớn hơn. CMP DX, BX ; IF AX >=BX then JAE QUIT ; nhảy đến QUIT MOV DX, BX QUIT : ; ngược lại chép BX vào DX MOV AH,4CH INT 21H Chuong 8 : Cau truc DK va Vong lap 24
  25. 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à CL . Kết quả để trong biến SMALL MOV SMALL, AL ; giả sử AL nhỏ nhất CMP SMALL, BL ; nếu SMALL <= BL thì JBE L1 MOV SMALL, BL Nhảy đến L1 L1 : ; nếu SMALL <= CL thì CMP SMALL, CL ; Nhảy đến L2 JBE L2 MOV SMALL, CL ; CL là số nhỏ nhất L2 : . . . Chuong 8 : Cau truc DK va Vong lap 25
  26. 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. Chuong 8 : Cau truc DK va Vong lap 26
  27. 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 MT thực hiện phép nhân bằng dịch trái Chuong 8 : Cau truc DK va Vong lap 27
  28. lệnh dịch phải SHR Công dụng : dịch các bit của toán hạng đích sang bên 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ẽ được đưa vào bit msb của toán hạng đích, còn bit bên phải nhất sẽ được đưa vào cờ CF. MT thực hiện phép chia bằng dịch phải Chuong 8 : Cau truc DK va Vong lap 28
  29. lệnh dịch phải SHR Ex : shr 0100b, 1 ; 0010b = 2 Đối với các số lẻ, dịch phải sẽ chia đôi nó và làm tròn xuống số nguyên gần nhất. Ex : shr 0101b, 1 ; 0010b = 2 Chuong 8 : Cau truc DK va Vong lap 29
  30. 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. Ex : nhân 2 số nguyên dương A và B bằng lệnh cộng và dịch bit. Giả sử A = 111b và B = 1101b. Tính A*B Chuong 8 : Cau truc DK va Vong lap 30
  31. 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 Chuong 8 : Cau truc DK va Vong lap 31
  32. Các phép nhân và chia tổng quát -Vì bit lsb của B = 1 Vì bit lsb của B =1 tích = tích +A = 111b Tích = 100011b+111000b= 1011011b Dịch trái A : 1110000b Dịch trái A : 1110b Dịch phải B : 0b Dịch phải B : 110b Vì bit lsb của B = 0 Vì bit lsb của B = 0 Tích = 1011011b = 91d Dịch trái A : 11100b Dịch phải B : 11b Vì bit lsb của B = 1 Tích =tích + A = 100011b Dịch trái A : 111000b Dịch phải B : 1b Chuong 8 : Cau truc DK va Vong lap 32
  33. Chương trình con Có vai trò giống như chương trình con ở ngôn ngữ cấp cao. ASM có 2 dạng chương trình con : dạng FAR và dạng NEAR. Lệnh gọi CTC Lệnh gọi CTC nằm khác đoạn bộ nằm cùng đoạn bộ nhớ với CTC được nhớ với CTC được gọi gọi Chuong 8 : Cau truc DK va Vong lap 33
  34. BIỂU DIỄN CẤU TRÚC LOGIC MỨC CAO 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. Chuong 8 : Cau truc DK va Vong lap 34
  35. Cấu trúc IF Phát biểu IF sẽ kiểm tra 1 điều kiện và theo Đơn giản sau đó là 1 số các phát biểu được thực thi khi điều kiện kiểm tra có giá trị true. Cấu trúc logic HIỆN THỰC BẰNG ASM IF (OP1=OP2) CMP OP1,OP2 JNE CONTINUE ENDIF CONTINUE : . Chuong 8 : Cau truc DK va Vong lap 35
  36. Cấu trúc IF Phát biểu IF có kèm toán tử OR với OR HIỆN THỰC BẰNG ASM Cấu trúc logic CMP A1,OP1 JG EXCUTE IF (A1>OP1) OR CMP A1,OP2 (A1>=OP2) OR JGE EXCUTE (A1=OP3) OR CMP A1,OP3 (A1 CMP A1,OP4 ENDIF JL EXCUTE JMP CONTINUE EXCUTE : CONTINUE : Chuong 8 : Cau truc DK va Vong lap 36
  37. Cấu trúc IF Phát biểu IF có kèm toán tử AND với AND HIỆN THỰC BẰNG ASM Cấu trúc logic CMP A1,OP1 JNG CONTINUE IF (A1>OP1) AND CMP A1,OP2 (A1>=OP2) AND JL CONTINUE (A1=OP3) AND CMP A1,OP3 (A1 JNL CONTINUE ENDIF JMP CONTINUE CONTINUE : CHÚ Ý : khi điều kiện có toán tử AND, cách hay nhất là dùng nhảy với điều kiện ngược lại đến nhãn, bỏ qua phát biểu trong cấu trúc Logic. Chuong 8 : Cau truc DK va Vong lap 37
  38. VÒNG LẶP WHILE Cấu trúc WHILE HIỆN THỰC BẰNG ASM Cấu trúc logic DO_WHILE : CMP OP1, OP2 DO WHILE (OP1 ENDDO JMP DO_WHILE ENDDO : Chuong 8 : Cau truc DK va Vong lap 38
  39. VÒNG LẶP WHILE CÓ LỒNG IF Cấu trúc WHILE có lồng IF HIỆN THỰC BẰNG ASM _WHILE : Cấu trúc logic CMP OP1, OP2 JNL WHILE_EXIT DO WHILE (OP1 CMP OP2,OP3 ; phần If IF (OP2=OP3) THEN JNE ELSE ; không thỏa If ; thỏa If ENDIF JMP ENDIF; thỏa If nên ENDDO bỏ qua Else ELSE : ENDIF : JMP _WHILE WHILE_EXIT : Chuong 8 : Cau truc DK va Vong lap 39
  40. VÒNG LẶP REPEAT UNTIL Cấu trúc REPEAT UNTIL HIỆN THỰC BẰNG ASM Cấu trúc logic REPEAT : REPEAT TESTOP12: UNTIL (OP1=OP2) OR CMP OP1, OP2 (OP1>OP3) JE ENDREPEAT TESTOP13 : CMP OP1, OP3 JNG REPEAT ENDREPEAT : Chuong 8 : Cau truc DK va Vong lap 40
  41. Cấu trúc CASE HIỆN THỰC BẰNG ASM CASE : MOV AL, INPUT Cấu trúc logic CMP AL, ‘A’ CASE INPUT OF JNE TESTB CALL PROC_A ‘A’ : Proc_A JMP ENDCASE ‘B’ : Proc_B TESTB : ‘C’ : Proc_C CMP AL, ‘B’ ‘D’ : Proc_D JNE TESTC CALL PROC_B End ; JMP ENDCASE TESTC : CMP AL, ‘C’ JNE TESTD CALL PROC_C JMP ENDCASE TESTD : CMP AL, ‘D’ JNE ENDCASE CALL PROC_D ENDCASE : . Chuong 8 : Cau truc DK va Vong lap 41
  42. LooKup Table 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. Bảng Offset này được gọi Lookup Table rất hiệu quả khi dùng phát biểu Case có nhiều trị lựa chọn. Chuong 8 : Cau truc DK va Vong lap 42
  43. LooKup Table Case_table db ‘A’ ; giá trị tìm kiếm Địa chỉ các procedure Dw Proc_A giả sử ở địa chỉ 0120 Db ‘B’ Dw Proc_B giả sử ở địa chỉ 0130 Db ‘C’ giả sử ở địa chỉ 0140 Dw Proc_C Db ‘D’ giả sử ở địa chỉ 0150 Dw Proc_D ‘A’ 0120 ‘B’ 0130 ‘C’ 0140 ‘D’ 0150 Cấu trúc lưu trữ của CaseTable như sau Chuong 8 : Cau truc DK va Vong lap 43
  44. 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 ENDCASE : Chuong 8 : Cau truc DK va Vong lap 44
  45. Chươ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 . CTC gần (near) là chương trình con nằm chung segment với nơi gọi nó. CTC xa (far) là chương trình con không nằm chung segment với nơi gọi nó. Chuong 8 : Cau truc DK va Vong lap 45
  46. 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ệnh PUSH để lưu trạng thái hiện hành. Sau khi hoàn tất công việc của CTC nên phục hồi lại trị các thanh ghi lúc trước đã Push bằng lệnh POP . Nhớ trình tự là ngược nhau để trị của thanh ghi nào trả cho thanh ghi nấy. Đừng tối ưu quá CT vì có thể làm cho CT kém thông minh, khó đọc. Chuong 8 : Cau truc DK va Vong lap 46
  47. Kỹ thuật lập trình (tt) Cố gắng tổ chức chương trình cho tốt ➔ phải thiết kế được các bước chương trình sẽ phải thực hiện. Kinh nghiệm : khi vấn đề càng lớn thì càng phải tổ chức logic chương trình càng chặt chẽ. 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. Chuong 8 : Cau truc DK va Vong lap 47
  48. SUMMARY ✓ Có thể mô phỏng cấu trúc logic như ngôn ngữ cấp cao trong Assembly bằng lệnh JMP và LOOP. ✓ các lệnh nhảy : có điều kiện và vô điều kiện. ✓ 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 để làm điều kiện nhảy là AND, OR, XOR, CMP . . . ✓Bất cứ khi nào có thể, hãy tổ chức chương trình thành các chương trình con ➔ đơn giản được cấu trúc luận lý của chương trình. Chuong 8 : Cau truc DK va Vong lap 48
  49. Câu hỏi 1. Giả sử DI = 2000H, [DS:2000] = 0200H. Cho biết địa chỉ ô nhớ toán hạng nguồn và kết quả lưu trong toán hạng đích khi thực hiện lệnh MOV DI, [DI] 2. Giả sử SI = 1500H, DI=2000H, [DS:2000]=0150H . Cho biết địa chỉ ô nhớ toán hạng nguồn và kết quả lưu trong toán hạng đích sau khi thực hiện lệnh ADD AX, [DI] 3. Có khai báo A DB 1,2,3 Cho biết trị của toán hạng đích sau khi thi hành lệnh MOV AH, BYTE PTR A. 4. Có khai báo B DB 4,5,6 Cho biết trị của toán hạng đích sau khi thi hành lệnh MOV AX, WORD PTR B. Chuong 8 : Cau truc DK va Vong lap 49
  50. 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. Bài 2 : Có vùng nhớ VAR2 dài 1000 bytes. Viết chương trình chuyển đổi các chữ thường trong vùng nhớ này thành các ký tự hoa, các ký tự còn lại 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ố đó. Chuong 8 : Cau truc DK va Vong lap 50
  51. 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 là : 336 Bài 5 : Viết chương trình nhập 1 ký tự. Hiển thị 5 ký tự kế tiếp trong bộ mã ASCII. Ex : nhập ký tự : a 5 ký tự kế tiếp : b c d e f Chuong 8 : Cau truc DK va Vong lap 51
  52. Bài tập LẬP TRÌNH Bài 6 : Viết chương trình nhập 1 ký tự. Hiển thị 5 ký tự đứ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 Chuong 8 : Cau truc DK va Vong lap 52