Thắng Ỉn-Thái Nguyên City-Giao lưu và kết bạn
Xin chào..!Bạn đang ở diễn đàn anh em thái nguyên....hãy chung tay góp sức để diễn đàn ngày càng phát triển.thank you very much and good luck 4you!!!!!!!!!!!!!!!!Very Happy:D:D
...............Admin....................
Thắng Ỉn-Thái Nguyên City-Giao lưu và kết bạn
Xin chào..!Bạn đang ở diễn đàn anh em thái nguyên....hãy chung tay góp sức để diễn đàn ngày càng phát triển.thank you very much and good luck 4you!!!!!!!!!!!!!!!!Very Happy:D:D
...............Admin....................
Thắng Ỉn-Thái Nguyên City-Giao lưu và kết bạn
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
Thắng Ỉn-Thái Nguyên City-Giao lưu và kết bạn

Diễn Đàn Anh Em Thái Nguyên
 
Trang ChínhGalleryTìm kiếmLatest imagesĐăng kýĐăng Nhập
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
Navigation
 Portal
 Diễn Đàn
 Thành viên
 Lý lịch
 Trợ giúp
 Tìm kiếm
Diễn Đàn
Affiliates
free forum


 

 bai tap vi xu ly hop ngu co ban

Go down 
Tác giảThông điệp
thangthuytn158
MOD
MOD
thangthuytn158


Tổng số bài gửi : 118
Points : 344
Reputation : 2
Join date : 03/11/2011
Age : 31
Đến từ : Thái nguyên

bai tap vi xu ly hop ngu co ban Empty
Bài gửiTiêu đề: bai tap vi xu ly hop ngu co ban   bai tap vi xu ly hop ngu co ban Icon_minitimeThu Nov 17, 2011 9:27 pm

III. Bài tập có lời giải:
1) Viết chương trình nhập chương trình in bảng mã ASCII ra màn hình.
2) Viết chương trình nhập vào một xâu ký tự (dùng hàm 01), kết thúc khi gõ enter và trong chương trình có lưu lại số các ký tự đã nhập.
3) Viết chương trình nhập vào một xâu bằng hàm 0Ah, sau đó in ra xâu đã nhập.
4) Viết chương trình nhập vào một xâu bằng hàm 0Ah, sau đó in ra các ký tự số(‘0’…’9’) trong xâu đã nhập.
5) Viết chương trình nhập vào một xâu bằng hàm 0Ah, sau đó đổi tất cả các ký tự đã nhập sang dạng viết hoa và in ra màn hình ở dòng tiếp theo.
6) Viết chương trình nhập vào 2 số có tổng nhở hơn 10 và in ra tổng của chúng.
7) Viết chương trình nhập vào 1 từ, sau đó in ra các ký tự trong từ theo chiều đọc. Ví dụ: Nhập TUAN
Xuất T
U
A
N
Cool Viết chương trình để màn hình xuất hiện thông báo:
Bạn có muốn xoá màn hình không(C/K)?
Nếu gõ vào C hoặc c thì chương trình sẽ xoá màn hình và kết thúc. Nếu gõ một kí tự bất kỳ thì chương trình sẽ kết thúc ngay.
BÀI GIẢI
Bài III.1
Bài này nhằm minh hoạ cho các bạn kỷ luật viết các đoạn chương trình thực hiện các cấu trúc lệnh lặp trong Hợp ngữ, cụ thể là vòng For, ở đây ta dùng lệnh LOOP để thực hiện vòng For, CX được đặt bằng 256(số ký tự trong bảng mã ASCII), dữ liệu chứa mã ASCII của ký tự đầu, sau đó ta lặp lại việc tăng DL để in ký tự tiếp. Sau đây là nội dung chương trình.
.Model Small
.Stack 100h
.Code
Main Proc
Mov ah,2 ; chuẩn bị in
Mov cx,256 ; 225 ký tự trong BM ASCII
Mov dl,0 ; ký tự đầu
In_Loop:
Int 21h ; Đọc 1 ký tự

Push dx ; lưu dl vào stack
Mov dl,’’
Int 21h ; đọc vào ký tự
Pop dx ; phục hồi dl

Int dl ; in ký tự tiếp
Dec cx
Jnz in_loop ; cx chưa =0 thì tiếp tục

Mov ah,4ch ; ktct
Int 21h
Main endp
End Main
Bài III.2
Hàm 01h của ngắt 21h cho phép chúng ta nhập vào một ký tự, trong bài này ta kết hợp hàm 01h với lệnh nhảy jmp để thực hiện vòng lặp repeat, lặp lại việc nhập ký tự cho đến khi gặp ENTER(al=0Dh), do đó trong chương trình có đoạn lệnh sau:
Xor bx,bx ; bx lưu tổng số ký tự được nhập
Mov ah,01
Lap_nhap:
Int 21h
Cmp al,0Dh ; có phải enter
Je K_thúc ; đúng thì dừng
Inc bx ; sai thì tăng BX và tiếp tục
Jmp Lap_nhap
ở đây ta dùng BX để lưu số ký tự đã nhập. Sau đây là nội dung chương trình.
.Model Small
.Stack 100h
.Data
TB_Nhap DB ‘nhap vao 1 xau ky tu:$’
.code
Main Proc
Mov ax,@data ; khởi tạo DS
Mov ds,ax

Mov ah,09h
Lea dx,TB_Nhap
Int 21h

Xor bx,bx ; bx lưu tổng số ký tự được nhập
Mov ah,01
Lap_nhap
Int 21h
Cmp al,0Dh ; có phải enter
Je K_thuc ; đúng thì dừng

Inc bx ; sai thì tăng bx và tiếp tục
Jmp Lap_nhap
K_thuc:
Mov ah,4ch
Int 21h
Main endp
End
Bài III.3
Ta có thể thực hiện như bài 2 để nhập vào máy một xâu, nhưng cách này không cho phép ta xoá ký tự khi đã lỡ nhập, để khắc phục điều này DOS cung cấp cho chúng ta hàm 0Ah của ngắt 21h, hàm này cho phép ta xoá các ký tự trong khi nhập và tự động lưu lại số ký tự đã nhập vào tại Byte 1 của vùng đệm nhập.
Trong bài này ta vẫn dung hàm 09h để xuất xâu, do đó để chuẩn bị xuất ta phải them kí tự $ vào cuối xuâu. để biết được vị trí cuối xâu trước hết ta phải biết được số kí tự thực sự nhập vào BL, bằng cách lấy giá trị trong byte 1 của đệm nhập.
Mov bl,D_Nhap[1]
Mov bh,0
Sau đó thêm $ vào địa chỉ D_nhap[2+BX]
Mov D_nhap[bx+2],‘$’
Chú ý : -Từ nay về sau ta nên dung hàm 0Ah để nhập vào một xâu .
-Cách khai báo biến D_nhap cho hàm 0Ah
-Trước khi thực hiên thao tác xử lý xâu được nhập bởi hàm 0Ah ta nên lưu số ký tự thực sự nhập vào BX hoặc CX
Sau đây là nội dung một chương trình:
.Model small
.Code
0rg 100h
Star :
JMP TT_chinh
TB_nhap DB ‘nhập vào một xâu :$’
TB_xuat DB 0Dh,0Ah, ‘xâu đã nhập :$’
D_nhap DB 80,0,80dup(0)
TT_chinh PROC
Mov AH,09h
Lea dx,TB_nhap
Int 21h

Mov ah,0Ah
Lea dx,D_nhap
Int 21h

Mov ah,09h
Lea dx,TB_xuat
Int 21h

Mov bl,D_nhap[1] ;lưu số phần tử được nhập vào bx
Mov bh,0 ;
Mov D_nhap[bx+2], ‘$’ ;thêm $ vào cuối xâu nhập để thoả dk của hàm 09h
mov ah,09h
lea dx,D_nhap [2]
int 21h

int 20h
TT_chinh ENDP
END

_____________________________________________
Bài III.4 :
Bài này trình bài với các bạn kỉ thuật duyệt các ký tự trong D_nhap, ở đây ta dung vòng for,Với CX là số ký tự đã nhập
Mov cl,D_nhap[1]
Mov ch,0
kết hợp với cơ chế địa chỉ gián tiếp bộ nhớ, vòng for này thực hiẹn các thao tác sau :
Tăng BX để trỏ đến ký tự tiếp ADD bx,l (byte)
Lưu ô nhớ tại địa chỉ D_nhâp[BX] vào AL để kiểm tra
Mov al,D_nhap[bx]
Cmp al, ‘’
Sau đây là nội dung chương trình
.Model small
.Code
Org 100h
.Start:
JMP TT_chinh

TB_nhap DB ‘nhập vào một xâu :$’
TB_xuat DB 0dh,0ah, ‘xuất xâu đã nhập dưới dạng viết hoa :$’
D_nhap DB 80,0,80 dup(0)
TT_chinh PROC
Mov ah,09h
Lea dx,TB_nhap
Int 21h

Mov ah,0Ah
Lea dx,D_nhap
Int 21h

Mov ah,09h
Lea dx,TB_xuat
Int 21h

Mov cl,D_nhap[1]
Mov ch,0

Mov bx,2

Lap_hoa:
Mov al,D_nhap[bx]
Cmp al, ‘a’
Jl In_ra
Cmp al, ‘z’
Jg In_ra

Sub al,20h ;Đổi sang chử hoa
In_ra: ;đã là chử hoa
Mov ah,20h
Mov dl,al
Int 21h

Add bx,1 ;tăng bx để trỏ đến ký tự tiếp
Loop lap_hoa

Int 20h
`TT_chinh ENDP
END
¬¬¬_____________________________________________

Bài III.5:
Bài này tiếp tuc trình bày kỷ thuật đọc nội dung các ô nhớ bằng chế độ Gián tiếp bộ nhớ. Trong bài này chúng ta cần chú ý khi duyệt các ô nhớ, nếu gặp ô nhớ có nội dung thoả mãn điều kiện của chúng ta thì dừng lại để xử lý, sau đó duyệt tiếp
Mov ah,02h
Mov dl,al
Int 21h


Inc bx ;Tăng bx để trỏ tới ký tự tiếp theo
Loop Duyet
nếu không thoả mãn thì cũng duyệt tiếp .
D_tiep:
Inc bx ;tăng bx để trỏ tới ký tự tiếp theo
Loop Duyet
Jmp K_thuc
Sau đây là nội dung chương trình
.Model smat
.Code
ORG 100h
Start:
JMP begin
TBN DB ‘nhapvao mot xau:$’
TBX DB 0Ah,0Dh, ‘cac kí tu so trong xau:$’
D_nhap DB 80,0,80 DUP(0)
Begin:
Mov ah,09h
Lea dx,TBN
Int 21h

Lea dx,D_nhap
Mov ah,0Ah
Int 21h

Mov ah,09h
Lea dx,TBX
Int 21h

Mov ch,0 ;lay bien dem CX
Mov cl,D_nhap[1] ;cho vòng lap DUYET
Mov bx,2
DUYET:
Mov al,D_nhap[bx]
Cmp al ,‘0’
Jl D_tiep
Cmp al, ‘9’
Jg D_tiep

Mov ah,02h
Mov dl,al
Int 21h
Mov ah,02h
Mov dl, ‘’
Int 21h

Inc bx ;tang bx de tro troi ky tu tiep theo
Loop Duyet
Jmp K_thuc
D_tiep:
Inc bx
Loop Duyet

K_thuc:
Int 21h
End start

Bài III.6
Bài trình bày cách đổi một số sang kí tự số tương ứng và ngược lại.
Sub al,30h ;đổi kí tự thành số tương ứng
Add al,30h ;đổi số thành kí tự tương ứng
Sau đây là nội dung chương trình
.Model small
.Code
Org 100h
Start:
JMP quadata
TB1 DB ‘nhap vao so thu nhat :$’
TB2 DB 0Dh,0Ah, ‘nhap váô thu hai:$’
TB3 DB 0Ah,0Ah, ‘tong cua hai so la:$’
Quadata:
Mov ah,09h
Lea dx,TB1
Int 21h

Mov ah,01
Int 21h
Sub al,30h ;đổi kí tự thành số tương ứng
Mov bl,al lưu vao bl
Mov ah,09h
Lea dx,TB2
Int 21h
Mov ah,01
Int 21h
Sub al,30h ;đổi ký tự thành số tương ứng

Add bl,al ;cộng với số trước

Mov ah,09h
Lea dx,TB3
Int 21h

Add bl,30h ;đỏi số thành ký tự số tương ứng

Mov dl,bl ;in ra
Mov ah,02
Int 21h
Int 20h
End start


Bài III.7:
Tương ứng như bài 5và6, ở dây một lần nữa nhấn mạnh sự tiện lợi của hàm 0Ah và cách truy cập nội dung ô nhớ thong qua chế độ bộ nhớ gián tiếp , bằng cách Tăng BX . Nên nhơ rằng ở đây có thể dung BX hoặc BP.
.Model small
.Code
Org 100h
Start:
JMP TT_chinh
TB_nhap DB ‘nhap vao mot xau:$’
TB_xuat DB 0Dh,0Ah, ‘xuat theo chieu doc:’,0Dh,0Ah,’$’
D_nhap DB 80,0,80 dup(0)

TT_chinh PROC
Mov ah,09h
Lea dx,TB_nhap
Int 21h


Mov ah,0Ah
Lea dx,D_nhap
Int 21h

Mov ah,09h
Lea dx,TB_xuat
Int 21h

Mov cl,D_nhap[1]
Mov ch,0
Mov bx,2 ;bắc đầt vùng lưu ký tự đã nhạp
Lap_xuat:
Ov dl,D_nhap[bx] ;lấy kí tự đầu tiên
Mov ah,02h
Int 21h

Mov dl,0Ah
Int 21h
Mov dl,0Dh
Int 21h

Inc bx ;chuan bị lấy kí tự tiếp theo
Loop Lap_xuat

Int 20h
TT_chinh ENDP
END



Bài III.8:
Để hiểu dược bài này ta nên tra chức năng của hàm 00h và 0Fh của ngắt 10h BIOS bài này giới thiệu kỉ thuật thực hiện vòng lặpIF với Điếu kiện kép OR.
Cmp al, ‘C’ ;kí tự gỏ vào phải
Je Xoa_MH ;’C’hoặc ‘c’?
Cmp al, ‘c’ ;đúng
Je Xoa_Mh ;xoá MH
Sau đây là nội dung chương trình
.Model small
.Stack 100h
.Data
TB_nhap DB ‘ban co muon xoa man hinh khong (C/K) ?:$’
.Code
Main proc
Mov ax,@data
Mov ds,ax
Mov ah,09
Lea dx,TB_nhap
Int 21h

Mov ah,01
Int 21h

Cmp al, ‘C’ ;kí tự gõ vào phải
Je Xoa_MH ; ‘C’ hoặc ‘c’?
Cmp al,c ;đúng
Je Xoa_MH ;Xoá MH

Jmp K_thuc
Xoa_MH
Mov ah,0Fh
Int 10h ; chức năng xoá MH
Mov ah,0 ; của ngắt 10h BIOS
Int 10h
K_thuc
Mov ah,4Ch
Int 21h
Main Endp
End
Int 21h
End start
IV. Bài tập không có lời giải:
1) Tương tự III.1 nhưng không cho in ra các ký tự có giá trị ASCII là: 0ah, 0dh, 07h, 32h.
2) Tương tự III.3 nhưng chỉ in ra các ký tự là chữ cái.
3) Viết chương trình nhập vào thứ của ngày trong tuần và in thứ tương ứng với ngày đó. Ví dụ: nhập 1 in ra: Thứ hai
nhập 2 in ra: Thứ ba…
4) Viết chương trình in một câu thông báo ra máy in.
Hướng dẫn: Dùng hàm 40h của ngắt 21h.
5) Viết chương trình đọc một phím và kiểm tra phím đó là phím chức năng hay phím ký tự, có trả lời trên màn hình
Về Đầu Trang Go down
http://anhemthainguyen.tk/
 
bai tap vi xu ly hop ngu co ban
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Thắng Ỉn-Thái Nguyên City-Giao lưu và kết bạn :: Công nghệ thông tin :: Học Tập-
Chuyển đến