ret
Chu_hoa Endp
;
Chu_thuong Proc
mov al,[si]
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.
Ví 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
- 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 ah,09h
mov dx,offset nguon
int 21h
mov ah,0ah
mov dx,offset ktao
int 21h
mov ah,09
mov dx,offset xuongd
int 21h
mov si,offset ktao+2
mov di,offset inxau
xor cx,cx
mov cl,[si]
For:
mov al,[si]
cmp al,13
je bang_Enter_thi_in_ra
cmp al,' '
jne khac_dau_cach
mov al,[si+1]
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]
jmp Tiep
Dau_cach:
mov al,[si+1]
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
mov al,[si]
cmp al,' '
jne Nhay
inc si
Nhay:
call Chu_hoa
mov ah,09
mov dx,offset kq
int 21h
mov ah,09
mov dx,si
int 21h