ret Chu_hoa Endp ;--- Chu_thuong Proc cmp al,"A" jb Boqua cmp al,"Z" ja Boqua add byte ptr [si],32 Boqua: ret Chu_thuong Endp ;--- Code Ends End Start a.Chuyển một chuỗi MOVSB MOVe Stri
Trang 1ret
Chu_hoa Endp
; -
Chu_thuong Proc
cmp al,"A"
jb Boqua
cmp al,"Z"
ja Boqua
add byte ptr [si],32
Boqua:
ret
Chu_thuong Endp
; -
Code Ends
End Start
a.Chuyển một chuỗi
MOVSB (MOVe String Byte-by - Byte)
Mô tả: MOVSB copy từng byte một từ một địa chỉ nguồn tới địa chỉ đích Nguồn được trỏ bởi DS:SI đích được trỏ bởi ES:DI Sau khi copy một byte, SI và DI được tự động tăng/giảm 1 tuỳ thuộc cờ DF là UP/DN Lệnh MOVSB thường được sử dụng với lệnh REP để copy một dãy CX bytes
Trang 2Ví dụ:
REP MOVSB ;lặp lại lệnh MOVSB CX lần
b.Lưu chuỗi
Lệnh STOSB (STOre Byte in AL at String) ;lưu chuỗi các byte
Lệnh này là lệnh copy nội dung của AL vào địa chỉ nhớ
do ES:DI trỏ tới, sau đó DI tăng/giảm 1 tuỳ theo cờ DF bằng UP/DN
c.Lệnh Duyệt chuỗi (Scan String)
Lệnh :
SCASB ;Duyệt một chuỗi các byte
Lệnh SCASB lấy AL trừ đi toán hạng đích là byte được trỏ bởi ES:DI Kết quả của phép trừ không được giữ lại, chỉ có các cờ được thiết lập Sau đó DI được giảm/Tăng
1 tuỳ theo cờ DF bằng UP/DN Lệnh SCASB thường được sử dụng cùng REPE/REPNZ/REPZ để lặp lại lệnh SCASB CX lần hoặc lặp tới khi nó phát hiện thấy 2 toán hạng là bằng/khác
Tường tự với lệnh SCASB là SCASW, khác là thao tác với toán hạng word
Sau đây ta xét một ví dụ về Chuẩn hoá xâu:
Các việc cần làm là:
- Xử lý các dấu cách, nếu dấu có nhiều dấu thì chỉ lấy lấy một dấu cách
- Ký tự đầu của xâu thì viết hoa
Trang 3- Sau dấu cách thì viết hoa, các khác thì viết thường
Chuan_hoa.asm
;Chuan hoa xau
Code segment
assume cs:Code,ds:Code
org 100h
Start:
Jmp Begin
nguon db "Nhap xau vao :$"
xuongd db 0ah,0dh,"$"
ktao db 254,0,254 dup(0)
inxau db 254 dup(0)
kq db "Ket qua sau chuan hoa la= $" Begin:
Call CLRSCR
mov dx,offset nguon
int 21h
mov ah,0ah
mov dx,offset ktao
int 21h
mov ah,09
mov dx,offset xuongd
Trang 4int 21h
mov si,offset ktao+2 mov di,offset inxau xor cx,cx
mov cl,[si]
For:
cmp al,13
je bang_Enter_thi_in_ra
cmp al,' '
jne khac_dau_cach
cmp al,' '
je Dau_cach_tiep
movsb
jmp For
Dau_cach_tiep:
inc si
jmp For
khac_dau_cach:
mov al,[si-1]
cmp al,' '
je Dau_cach
mov al,[si+1]
Trang 5Dau_cach:
call Chu_hoa
movsb
jmp For
Tiep:
call Chu_thuong
movsb
jmp For
bang_Enter_thi_in_ra:
mov byte ptr[di],'$' mov si,offset inxau
cmp al,' '
jne Nhay
inc si
Nhay:
call Chu_hoa
mov dx,offset kq int 21h
mov ah,09
mov dx,si
int 21h