BÀI 6 – XỬ LÝ CHUỖI KÝ TỰ CHÚNG TA GÁN TRƯỚC, VÍ DỤ NHƯ OLDPASS DB “12...
3.2. Di chuyển 33 bytes từ nội dung của string1 sang string2, sau đó in nội dung của
string2 ra màn hình.
Soạn thảo như đoạn chương trình mẫu và lưu với tên là BAI_6B.ASM.
-
Biên dịch và cho chạy file BAI_6B.ASM để kiểm tra và xem kết 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
mov ah, 4ch
; thoat ve Dos
cseg ends
end
begin
-
Tại sao chỉ di chuyển 33 ký tự/byte mà lại khai báo biến
string2 db 34 dup(‘$”).
Thử thay 34 thành 33 và tiến hành biên dịch, chạy chương trình để xem kết quả.
Có nhận xét gì về vấn đề này không ?. Giải thích ý nghĩa của việc khai báo này.
-
Thay lệnh CLD trong đoạn chương trình mẫu thành STD. Biên dịch và cho chạy
chương trình để kiểm chứng kết quả. Cho nhận xét về kết quả nhận được.
-
Nếu thay lệnh movsb thành MOVSW thì chúng ta có phải thay đổi giá trị nào trong
đoạn chương trình mẫu trên không ?. Nếu có thay đổi, hãy biên dịch và chạy
chương trình để kiểm chứng lại kết quả.
Ths. Nguyễn Hứa Duy Khang, Ks. Trần Hữu Danh
30