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