Đây là diễn đàn về C nên chúng ta không nên đi sâu vào ASM.Tuy nhiên mình sẽ giúp bạn chú thích vào các câu lệnh.Bài trên có 1 ,2 lỗi nhỏ nhưng không đáng kể (chỉ là lỗi cú pháp)
PHP Code:
.model small
.stack 100
.data ;khai bao bien
Tb1 db 'nhap vao xau ky tu,......:$'
Tb2 db 'cac ky tu.... gom :$'
Tb3 db 'ko có ....$'
Xau Db 101 dup(0)
CRLF Db 13,10,'$'
.code
main proc
mov AX,@data ;đưa phần địa chỉ segment dữ liệu vào
mov DS,AX ;thanh ghi DS
;//hien xau tb 1 ra man hinh
lea DX,tb1 ;dua dia chi offset cua bien tb1 vao DX
mov AH,09h ;chuc nang 9 cua ngat 21h (hien 1 xau ra man hinh)
int 21h
;//================
lea DI,xau ;DI chua offset cua bien xau
xor BX,BX ;BX=0
mov AH,01h ;
lap: ;doan nay la nhap 1 xau ky tu ket thuc bang Enter
int 21h ;Nhap 1 ky tu tu ban phim va ma ascii cua no se nam trong al
cmp AL,0Dh ;0Dh=13 (Enter) ,so sanh xem co phai phim vua bam la Enter
je khongnhapnua ;neu dung thi` nhay den nhan khongnhapnua , sai thi thuc hien tiep dong lenh duoi
cmp AL,'z' ;so sanh phim vua bam va` 'z'
jg ngoaikhoang ;nhay den nhan~ khoangtrang khi ma~ ascii cua phim bam > ascii cua 'z'
cmp AL,32 ;so sanh al va phim space
je trongkhoang ;neu dung nhay den nhan trongkhoang
cmp AL,'A' ;so sanh al va A
jl ngoaikhoang ;neu nho hon --> nhay den nhan ngoaikhoang
cmp AL,'a' ;so sanh al va a
jge trongkhoang ;neu al>= a nhay den nhan trongkhoang
cmp AL,'Z' ;so sanh al va 'z'
jg ngoaikhoang ;neu lon hon nhay den ngoaikhoang
trongkhoang:
mov [DI],AL ;dua gia tri cua phim vua nhap vao bien xau
inc DI ;tang DI len 1
inc BL ;tang BL len 1(tuc la da co ky tu duoc nhap)
ngoaikhoang:
jmp lap ;neu phim bam la ngoai khoang hoac chua la phim enter thi nhap lai(tiep)
khongnhapnua: ;khi phim bam la Enter(0Dh)
lea DX,CRLF ;
mov AH,09h ;xuong dong
int 21h
cmp BL,0 ;so sanh bl va 0
jne duara ;neu khong bang nhau
lea DX,tb3 ;hien xau tb3 ra man hinh (ko co....)
int 21h ;neu bl=0 ( tuc la ko co ky tu nao duoc nhap)
jmp thoat ;nhay den nhan thoat
duara:
lea DX,tb2 ;DX chua offset cua tb2
mov AH,09h ;hien xau tb2 (cac ky tu gom...)
int 21h ;
lea SI,Xau ;si chua offset bien xau
mov AH,02h ;chuc nang hien 1 ky tu ra man hinh cua ngat 21
lapduara:
mov DL,[SI] ;DL chua ma ASCII cua ky tu can hien
int 21h ;hien ky tu do len bang ngat 21
inc SI ;tang si len 1
dec BL ;giam bl di 1
jnz lapduara ;neu bl van con != 0 thi tiep thuc dua ra
thoat:
mov AH,04ch ;chuc nag tro ve dos
int 21h ;ngat 21h
main endp
end main
Như vậy bạn biết đoạn code trên làm j` rồi chứ.Nó làm 1 việc rất đơn giản là cho bạn nhập vào 1 xâu rồi hiện nó ra màn hình.Hết!