Tải bản đầy đủ (.doc) (28 trang)

BÀI TẬP VỀ CÔNG NGHỆ THÔNG TIN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (206.74 KB, 28 trang )

Bài 1: Viết chương trình hợp ngữ dạng .EXE thực hiện nhập vào từ bàn phím một ký tự, nếu không
phải là ký tự số thì nhập lại. Sau đó nhiển thị ký tự vừa nhập trên dòng tiếp theo.
.MODEL SMALL
.STACK 100h
.DATA
MoiNhap DB 'Nhap mot ky tu so n = ' , '$'
KoLaChuSo DB 'Ko phai , hay nhap lai ' , 13,10, '$'
LaChuSo DB 'Dung roi, so vua nhap la ' , 13,10, '$'
.CODE
MOV AX, @Data ; Dua cac du lieu
MOV DS, AX ; vao phan doan du lieu
NhapKyTu:
MOV DX, OFFSET MoiNhap ; Xuat mot chuoi tro boi DX
MOV AH, 9 ; bang chuc nang thu 9
INT 21h ; cua ngat 21h DOS
MOV AH, 1 ; Nhap mot ky tu vao AL
INT 21h ; bang chuc nang 1 cua ngat 21h DOS
CMP AL, '0' ; Kiem tra co phai chu so hay ko
JB KyTuKhac
CMP AL, '9'
JA KyTuKhac
ChuSo:
MOV DX, OFFSET LaChuSo
MOV AH, 9
INT 21h
JMP XuatKyTu
KyTuKhac:
MOV DX, OFFSET KoLaChuSo
MOV AH, 9
INT 21h
JMP NhapKyTu


XuatKyTu:
MOV AH, 2 ; Xuat mot ky tu bang
INT 21h ; chuc nang 2 cua ngat 21h DOS
MOV AH, 4Ch ; Ket thuc chuong trinh va tra
INT 21h ; ve DOS bang chuc nang 4Ch
END
BÀI TẬP ASSEMBLER
1. Xác định địa chỉ offset của các ô nhớ có địa chỉ vật lý sau, biết rằng địa chỉ
segment là 1ACDh:
a. 1FFFFh b. 20000h c. 2ABCDh d. 1ECDFh
2. Xác định địa chỉ vật lý của các địa chỉ sau:
a. 1234h:1234h b. 1111h:ABCDh c. AAAAh:BBBBh
3. Xác định nội dung của các thanh ghi AX, BX và các ô nhớ 1000h, 1001h, 1002h,
1003h sau khi thực thi các đoạn chương trình sau:
a. MOV AX,1000h
MOV BL,7
MOV BH,0F0h
AND BH,AH
MOV WORD PTR DS:[1000h],0F0h
MOV BYTE PTR DS:[1002h],0Fh
MOV AX,DS:[1001h]
MOV AL,DS:[1002h]
b. MOV AX,1234h
MOV BX,0AAAAh
MOV CH,AL
MOV CL,AH
MOV DS:[1000h],AX
MOV DS:[1002h],BX
c. MOV AX,12h
MOV DS:[1001h],AX

MOV BX,AX
ADD BH,10h
MOV DS:[1002h],BH
4. Viết chương trình xuất 10 chuỗi “Hello” ra màn hình tại dòng thứ 10, cột 10.
5. Viết chương trình nhập chuỗi từ bàn phím cho đến khi nhập ký tự ‘T’ thì xuất chuỗi
nhập ra màn hình và kết thúc chương trình.
6. Viết chương trình thực hiện chuyển đổi một chuỗi ký tự trong bộ nhớ từ chữ
thường thành chữ hoa và in chuỗi đã chuyển đổi lên màn hình.
7. Viết chương trình thực hiện in các ký tự chứa tại ô nhớ 1000h – 3000h theo thứ tự
ngược lại.
8. Viết chương trình thực hiện chuyển đổi số nhị phân chứa trong thanh ghi DX thành
số BCD chứa trong thanh ghi AX. Nếu kết quả chuyển đổi lớn hơn 16 bit thì giá trị
trong thanh ghi AX là FFFFh.
9. Viết chương trình so sánh 2 arrray 8 bit A và B, mỗi array có 100 phần tử chứa từ
địa chỉ 1000h (array A) và 2000h (array B). Nếu 2 array này giống nhau thì lưu vào
ô nhớ 3000h giá trị FFFFh. Ngược lại thì lưu vào ô nhớ 3000h địa chỉ đầu tiên của
phần tử trong array A khác với phần tử trong array B.
Bài 1: In ra màn hình 255 ký tự mở rộng có trong bảng mã ASCII
Giải
code segment
assume cs:code, ds:code
org 100h
begin:
mov cx, 255
mov al,0
lap:
mov ah,2
mov dl,al
inc dl
int 21h

loop lap
mov ax, 4c00h
int 21h
code ends
end begin
Bài 2: Nhập ký tự từ bàn phím nếu gặp phím ESC có mã là "27" thì thoát khỏi
chương trình.
Giải
code segment
assume cs:code, ds:code
org 100h
begin:
mov ah,1
int 21h
cmp al,27 ;so sanh ky tu nhap vao voi ky tu 27 la ma ESC
je thoat ;neu la ma ESC thi thoat khoi chuong trinh
jmp begin ;neu khac ma ESC thi quay lai tu dau
thoat:
mov ax, 4c00h
int 21h
code ends
end begin
Bài 3: Viết chương trình nhập vào từ bàn phím nếu ký tự không nằm trong
khoảng từ "A" lớn đến "Z" lớn thì thoát khỏi chương trình.
Giải
code segment
assume cs:code, ds:code
org 100h
begin:
mov ah,1

int 21h
mov bl,al
cmp bl,'A';so sanh A lon den Z lon
jb thoat ;neu khac khoang A lon den Z lon
cmp bl,'Z';thi thoat khoi chuong trinh
ja thoat
jmp begin
thoat:
mov ax, 4c00h
int 21h
code ends
end begin
Bài 4: Viết chương trình in ra hình trái tim mầu đỏ nền đen ở tâm màn hình.
Giải:
code segment
assume cs:code, ds:code
org 100h
begin:
mov ax, 0b800h
mov ds, ax
mov al,3
mov ah,00000100b
d=12
c=40
mov si,(d*80+c)*2
mov [si],ax
mov ax, 4c00h
int 21h
code ends
end begin

Bài 5: Viết chương trình in ra màn hình trái tim mầu đỏ nền đen và dùng các
phím (t,r,,u,d) để điều khiển trái tim dịch sang(trái, phải, trên, dưới)
Giải:
code segment
assume cs:code, ds:code
org 100h
begin:
mov ax, 0b800h
mov ds, ax
mov al,3
mov ah,00000100b
d=12
c=40
mov si,(d*80+c)*2
mov [si],ax
lap:
mov ah,7 ;nhap ky tu tu ban phim khong hien len man hinh
int 21h
cmp al,'l';so sanh neu dung thi thuc hien lenh trai
je trai
cmp al,'r'
je phai
cmp al,'u'
je tren
cmp al,'d'
je duoi
jmp thoat
trai:
mov al,3
mov ah,4

mov [si],0720h ;xoa ky tu vua dich chuyen
sub si,2
mov [si],ax
jmp lap
phai:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
add si,2
mov [si],ax
jmp lap
tren:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
sub si,160
mov [si],ax
jmp lap
duoi:
mov al,3
mov ah,4
mov [si],0720h ;xoa ky tu vua dich chuyen
add si,160
mov [si],ax
jmp lap
thoat:
mov ax, 4c00h
int 21h
code ends
end begin

Bài 6: Viết chương trình hiển thị dòng chữ "KHOA TIN HOC" có mầu đỏ nền
đen rồi xuống dòng và đảo ngược dòng chữ đó.
Giải
code segment
assume cs:code,ds:code
org 100h
begin:
mov ax,0b800h
mov ds,ax
d=5
c=10
mov al,'K'
mov ah,65
mov di,(d*80+c)*2
mov [di],ax
mov al,'H'
mov ah,58
mov[di+2],ax
mov al,'O'
mov ah,24
mov[di+4],ax
mov al,'A'
mov ah,30
mov[di+6],ax
mov al,' '
mov ah,00
mov[di+8],ax
mov al,'T'
mov ah,65
mov[di+10],ax

mov al,'I'
mov ah,40
mov[di+12],ax
mov al,'N'
mov ah,12
mov[di+14],ax
mov ah,1
int 21h
d=5
c=10
push[di]
push[di+2]
push[di+4]
push[di+6]
push[di+8]
push[di+10]
push[di+12]
push[di+14]
d=6
c=10
mov si,(d*80+c)*2
pop[si]
pop[si+2]
pop[si+4]
pop[si+6]
pop[si+8]
pop[si+10]
pop[si+12]
pop[si+14]
mov ax,4c00h

int 21h
code ends
end begin
viết chương trình nhập vào một chuỗi--> in ra chuỗi vừa nhập dưới dạng 1 ký tự
trên 1 dòng.
;chuong trinh nhap vao mot chuoi, hien thi theo hang doc
.model small
.stack 100h
.data
thongbao1 db 'nhap chuoi, enter de ket thuc: $',10,13
thongbao2 db 13,10,'hien thi chuoi: $'
xuongdong db 13,10,'$'
str db 100 dup(?)
main proc
mov ax,@Data
mov ds,ax
mov es,ax
xor cx,cx
mov ah,9
lea dx,thongbao1
int 21h
cld
lea di,str
mov ah,1
nhaptiep:
int 21h
cmp al,13
je thoinhap
stosb
inc cx

jmp nhaptiep
thoinhap:
mov ah,9
lea dx,thongbao2
int 21h
lea si,str
lap:
mov ah,9
lea dx,xuongdong
int 21h
mov ah,2
lodsb
mov dl,al
int 21h
loop lap
mov ah,4ch
int 21h
main endp
end main
Interupt:(ngắt):
int 10h :Ngắt làm việc của bios về màn hình
int 11h : Bios về cấu hình
int 13h :Bios về ổ đĩa
int 14h : Bios về giao diện cổng nối tiếp
int 16h : Bios liên quan đến bàn phím
int 17h :Máy in
int 19h :Khởi động hệ thống
int 20h :Ngắt của Dos kết thúc chương trình trở về hệ điều hành
int 21h :Ngắt cảu Dos chứa các hàm của Dos
Một số hàm sử dụng ngắt int 21h.

;Nhập một ký tự từ bàn phím chứa trong AL
mov ah,1
int 21h
;In ký tự có trong DL
mov ah,2
int 21h
;Nhập một ký tự từ bàn phím không hiển thị lên màn hình
mov ah,7
int 21h
;In chuỗi ký tự khai báo trước
mov ah,9
mov dx,offset db(chuỗi)
int 21h
;Thoát về hệ điều hành
mov ax,4c00h
int 21h
Bảng mầu:
Màu :
- Đòa chỉ màn hình màu : B800 : 0000
- Mỗi ký tự trên màn hình được biểu diễn bằng 2 byte
Byte thấp : chứa ký tự cần in ra
Byte cao : chứa màu nền và màu ký tự đó
Nó được đònh dạng như sau :
7 6 5 4 3 2 1 0
B/I H G B I R G B
B / I : nằm ở bit thứ 7
H : nằm ở bit thứ 6
G : nằm ở bit thứ 5
B : nằm ở bit thứ 4
H, G ,B : màu nền

I : nằm ở bit thứ 3
R : nằm ở bit thứ 2
G : nằm ở bit thứ 1
B : nằm ở bit 0
I ,R ,G ,B : màu chử
I : intensity ( cường độ , độ sáng ) 0 :tối và 1 : sáng
B : blinking ( chớp nháy ) 0 : không nháy và 1 :nháy
Bit 7( B / I ) : vừa làm nhiệm vụ cho nhấp nháy chữ hay tăng
giảm độ sáng cho màu nền.
I R G B
MÀU
I R G B
MÀU
0 0 0 0
đen
1 0 0 0
đen nhạt
0 0 0 1
xanh dương
1 0 0 1
da trời
0 0 1 0
xanh lá cây
1 0 1 0
xanh nhạt
0 0 1 1 cyan 1 0 1 1
cyan sáng
0 1 0 0
đỏû
1 1 0 0

đỏ sáng
0 1 0 1
tím
1 1 0 1
tím cà
0 1 1 0
nâu
1 1 1 0
vàng
0 1 1 1
xám đậm
1 1 1 1
trắng
Cách nhớù màu :
0
1 2 3 4 5 6 7
đen xanh dương xanh lá cây
cyan
đỏ
tím
nâu xám
- Muốn chử sáng : cộng thêm số 8 cho màu chử
- Muốn nền sáng / chử nháy cộng thêm số 8 cho màu nền
CÔNG THỨC :
Màu nền * 16 + màu chữ
Ví dụ :
Chữ A có màu xanh dương trên nền đỏ
A : 65 đổi sang hệ thập phân là : 1000000
Ta lấy 1000000 + 1 = 01000001
Trong đó 0100 là nền đỏ và 0001 là chử A màu

xanh dương .
Công thức tính đòa chỉ offset của ký tự cần xuất ra màn hình
( dòng * 80 + cột) * 2
Ví du ï :
Viết chương trình in chử A tại dòng 5 cột 10 có
maứu xanh dửụng nen ủoỷ
Code segment
Assume CS : code , DS : code
Org 100h
Begin
MOV AX, 0B800h
MOV DS, AX
MOV AL, 'A'
MOV AH, 65
doứng = 5
coọt = 10
MOV BX , ( doứng * 80 + coọt ) * 2
MOV [ BX ], AX
Code Ends
End Begin
;Viet Chuong trinh nhap vao 1 chuoi ki tu thuong in ra chuoi ki tu hoa
.MODEL SMALL
.STACK 100H
.DATA
A DB "MOI NHAP : $"
B DB 13,10,"XUAT : $"
C DB 40,?,40 DUP(?)
.CODE
MAIN PROC
MOV AX,@DATA

MOV DS,AX
MOV AH,9
LEA DX,A
INT 21H
MOV AH,0AH
INT 21H
LEA DX,B
MOV AH,9
INT 21H
MOV CL,C[1]
MOV CH,0
MOV BX,2
HOA:
MOV AL,C[BX]
JL INRA
CMP AL,'Z'
JG INRA
AND AL,0DFH
INRA:
MOV AH,2
MOV DL,AL
INT 21H
ADD BX,1
LOOP HOA
MOV AH,4CH

×