Bài 3 – Cấu trúc rẽ nhánh – Vòng lặp Ví dụ: Nhập mảng A gồm 10 ký tự MOV SI, 0 ; chỉ số mảng MOV CX, 10 ; số lần lặp LAP: MOV AH, 1 ; nhập ký tự INT 21H MOV A[SI], AL INC SI
Bài – Cấu trúc rẽ nhánh – Vòng lặp Ví dụ: Nhập mảng A gồm 10 ký tự MOV SI, ; số mảng MOV CX, 10 ; số lần lặp LAP: MOV AH, ; nhập ký tự INT 21H MOV A[SI], AL INC SI NỘI DUNG THỰC HÀNH 3.1 Cấu trúc Rẽ nhánh - Chương trình sau nhận ký tự Nếu ký tự HOA in hình "Ky tu HOA" Ngược lại in câu "Ky tu thuong" (Mã ASCII ký tự HOA ký tự thường Nếu không lớn => ký tự HOA in "Ky tu HOA" in "Ky tu thuong" trở hệ điều hành - Dịch chạy CT trường hợp khác để xem kết hình - Vẽ lưu đồ điều khiển chương trình Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 12 Bài – Cấu trúc rẽ nhánh – Vòng lặp - Tại cần phải có lệnh JMP EXIT? Nếu khơng có lệnh chương trình thực nào? Chạy chương trình để kiểm chứng - Thay lệnh JA NHAN lệnh JNA NHAN Sửa chương trình cho kết không thay đổi - Khi ký tự nhập vào khơng phải chữ kết in hình gì? Tại sao? 3.2 Cấu trúc vịng lặp - Xem chương trình in hình ký tự từ A đến Z viết sau Hãy soạn thảo đặt tên tập tin BAI_3B.ASM - Dịch chạy chương trình để xem kết hình - Vịng lặp chương trình bao gồm đoạn lệnh nào? Viết theo kiểu while hay repeat until hay for? Vẽ lưu đồ chương trình - Sửa chương trình để in hình ký tự từ 'Z' đến 'A' - Tiếp tục sửa chương trình cho ký tự có khoảng trống (Z Y B A) - Dùng lệnh LOOP để viết lại chương trình BAI_3B.ASM theo cấu trúc vòng lặp 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 chứa ký tự 'A' in ký tự DL hình DL chứa ký tự kế cần in So sánh DL với 'Z' Nếu 'Z' (khơng in tiếp) BÀI TẬP KIỂM TRA: 4.1 Viết chương trình cho nhập ký tự từ hình xuất câu thơng báo tương ứng sau: - Nếu ký tự nhập ‘S’ hay ‘s’ in “Good morning!” - Nếu ký tự nhập ‘T’ hay ‘t’ in “Good Afternoon!” - Nếu ký tự nhập ‘C’ hay ‘c’ in “Good everning!” 4.2 Viết lại chương trình BAI_3A.ASM cho chương trình phân biệt loại ký tự nhập từ bàn phím: "Ký tự HOA", "ký tự thường" "ký tự khác" Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 13 Bài – Cấu trúc rẽ nhánh – Vòng lặp 4.3 Viết chương trình nhập từ bàn phím ký tự thường Sau in hình ký tự từ ký tự nhận đến 'z' cho ký tự có khoảng trống 4.4 Không dùng hàm 0Ah/21h, dùng lệnh lặp để viết chương trình nhập vào chuỗi ký tự Sau nhập xong đếm xem chuỗi có ký tự In hình chuỗi nhận số ký tự có chuỗi Ví dụ: S = "Hello world !" ==> Số kí tự chuỗi 13 4.5 Viết chương trình cho phép nhập vào chuỗi Sau đó: - Đổi tất ký tự thường thành ký tự hoa in hình - Đổi tất ký tự hoa thành ký tự thường in hình Ví dụ: S = ‘weLcOme To AssEmblY’ In ra: welcome to assembly - WELCOME TO ASSEMBLY 4.6 Nhập vào chuỗi số, đổi chuỗi thành số, sau cộng hai số, đổi chuỗi xuất chuỗi tổng Ví dụ: S1 = "123" => N1 = 123 S2 = "456" => N2 = 456 N = N1 + N2 = 123 + 456 = 579 => S = "579" (xuất S hình) 4.7 Nhập số nguyên dương A, B Tính A/B, A*B (không dùng lệnh DIV, MUL) in hình kết Ví dụ: A=18, B=3 Tính A/B: 18 - - - - - - = 0, A/B = (tổng trừ B A = 0) Tính A*B = 18 + 18 + 18 = 54 Ths Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 14 Bài – Nhập xuất số dạng BIN-HEX-DEC Bài 4: Nhập xuất số dạng BIN – HEX - DEC Mục Tiêu: - Nhập từ bàn phím số dạng nhị phân, thập lục phân thập phân - In lên hình số dạng nhị phân, thập lục phân thập phân Kiến thức cần chuẩn bị: - Kết thực hành trước Các lệnh xử lý chuỗi Nội dung thực hành: 3.1 Nhập xuất nhị phận: Chương trình mẫu sau cho phép nhập số nhị phân bit, sau in hình số nhị phân nhận (BAI_6A.ASM): inchuoi MACRO chuoi MOV AH, 9h LEA DX, chuoi INT 21h ENDM DSEG SEGMENT msg1 DB "Hay nhap so nhi phan bit: $" msg2 DB "So nhi phan da nhap la: $" xdong DB 10, 13, ‘$’ sobin DB ? ; lưu trữ số nhị phân nhận DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG begin: MOV AX, DSEG MOV DS, AX inchuoi msg1 CALL bin_in MOV sobin, BL inchuoi xdong inchuoi msg2 MOV BL, sobin CALL bin_out MOV AH, 01 INT 21h MOV AH, 4Ch ; thoat khỏi chương trình INT 21h bin_in PROC MOV BL, ; Xóa BL MOV CX, ; nhập đủ bit dừng ThS Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 28 Bài – Nhập xuất số dạng BIN-HEX-DEC nhap:MOV AH, 01h INT 21h CMP AL, 0Dh JZ exit SHL BL, SUB AL, 30h ADD BL, AL LOOP nhap exit:RET bin_in ENDP bin_out PROC MOV CX, xuat:MOV DL, SHL BL, RCL DL, ADD DL, 30h MOV AH, 02h INT 21h LOOP xuat RET bin_out ENDP CSEG ENDS END begin ; Hàm nhập ký tự ; ; ; ; ; ; ; ; ; ; phím Enter thơi nhập khơng phải Enter đổi sang bit Dịch trái BL bit Ký số - 30h = số Chuyển bit từ AL sang BL lưu trữ Xuất bit BL M.Hình CF chứa MSB, xuất hình đưa CF vào LSB DL Số + 30h = Ký số In hình - Soạn thảo, Biên dịch cho chạy file BAI_6A.ASM để kiểm tra kết - Sửa chương trình thành BAI_6A1.ASM cho nhập xuất số nhị phân 16 bit - Viết lại chương trình để nhập ký tự từ bàn phím, sau in hình mã ASCII ký tự nhận dạng nhị phân 3.2 Nhập xuất thập lục phân: Chương trình sau cho phép nhập ký tự từ bàn phím, sau in hình mã ASCII ký tự nhận dạng thập lục phân - Soạn thảo, Biên dịch cho chạy file BAI_6B.ASM để kiểm tra kết - Viết lại chương trình để nhập số thập lục phân bit A B, sau in hình kết A + B dạng thập lục phân inchuoi MACRO chuoi MOV AH, 9h LEA DX, chuoi INT 21h ENDM DSEG SEGMENT msg1 DB "Hay nhap ky tu: $" msg2 DB "Ma ASCII o dang Hex: $" ThS Nguyễn Hứa Duy Khang, Ks Trần Hữu Danh 29 ... Vòng lặp 4. 3 Viết chương trình nhập từ bàn phím ký tự thường Sau in hình ký tự từ ký tự nhận đến 'z' cho ký tự có khoảng trống 4. 4 Không dùng hàm 0Ah/21h, dùng lệnh lặp để viết chương trình nhập... WELCOME TO ASSEMBLY 4. 6 Nhập vào chuỗi số, đổi chuỗi thành số, sau cộng hai số, đổi chuỗi xuất chuỗi tổng Ví dụ: S1 = "123" => N1 = 123 S2 = "45 6" => N2 = 45 6 N = N1 + N2 = 123 + 45 6 = 579 => S =... Vẽ lưu đồ chương trình - Sửa chương trình để in hình ký tự từ 'Z' đến 'A' - Tiếp tục sửa chương trình cho ký tự có khoảng trống (Z Y B A) - Dùng lệnh LOOP để viết lại chương trình BAI_3B.ASM