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
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
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
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
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
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.
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
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
Mov ah,1
Int 21h
jmp tiep
Nhaplai:
Mov ah,2
Mov dl,0DH
int 21h
Mov dl,0AH
int 21h
Mov ah,9
Lea dx,Msg2
int 21h
Mov ah,1
Int 21h
tiep:
cmp al,'0'
jl Nhaplai
cmp al,'9'
Jg Nhaplai
Mov bl,al
Mov ah,2
Mov dl,0DH
int 21h
Mov dl,0AH
int 21h
Mov ah,9
Lea dx,Msg3
Int 21h
Mov ah,2
Mov dl,bl
int 21h
Mov dl,0AH
int 21h
Mov ah,9
Lea dx,s1
int 21h
Mov ah,1
Int 21h
tiep:
cmp al,'0'
jb Nhapso
cmp al,'9'
Ja Nhapso
Mov bl,al
Mov ah,2
Mov dl,0DH
int 21h
Mov dl,0AH
int 21h
Mov ah,9
Lea dx,s2
Int 21h
Mov ah,2
Mov dl,bl
Int 21h
Mov ah,2
Mov dl,0DH
int 21h
Mov dl,0AH
int 21h
Lea dx,s5
Int 21h
Mov ah,2
Mov dl,bl
Int 21h
Call VEDOS
Main Endp
VEDOS Proc
Mov ah,4ch
Int 21h
VEDOS Endp
End main
viết chương trình nhập vào số hệ thập lục phân chuyển thành nhị phân in ra màn
hình
.model small
.stack 100
.data
CRLF db 13,10,'$'
chao db 'Nhap vao so hexa: $'
ketqua db 'So nhi phan tuong ung la: $'
loi db 'So ban nhap khong phai hexa $'
sohexa db 100 dup(0)
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 9
lea dx, chao
int 21h
mov si, offset sohexa
and al, 8h
cmp al, 8h
jne conlai
mov dl, 31h
jmp ketif
conlai:
mov dl, 30h
ketif:
mov ah, 2
int 21h
pop ax
shl al, 1
loop lap
inc si
dec di
jnz dodaichuoi
;thoat khoi dos
mov ah, 4ch
int 21h
main endp
taohexa proc
push ax
push bx
push cx
push dx
jmp lap
gaploi:
mov ah, 9
.stack
.data
msg db 'Nhap so n = $'
n db ?
kq db 13,10,'Ket qua la: $'
coso dw 0ah
.code
main proc
mov ax,@data
mov ds,ax
mov ax,02h
int 10h
lea dx,msg ;in ra 'Nhap so n = '
mov ah,9
int 21h
mov ah,1 ;nhap so
int 21h
and al,0fh ;chuyen thanh so
mov n,al ;luu vao n
;Tinh toan BX
xor bx,bx ;lam sach thanh ghi
xor dx,dx
xor ah,ah ;ah=0 de gan ax cho dx
mov dx,ax ;lay dx lam bien trung gian
lap:
cmp dx,0ah ;so sanh DX voi 10
je thoat
inc dx ;tang dx len 1
add bx,dx ;cong don vao bx
jmp lap
;luu vao bx in ra man
.model small
.stack
.data
msg db 'Nhap vao mot so n<8 :$'
n db ?
msg2 db 13,10,'Ban vua nhap sai. Nhap lai$'
xuongdong db 13,10,'$'
msg3 db 13,10,'Ket qua la: $'
coso dw 10
.code
main proc
mov ax,@data
mov ds,ax
mov ah,02h
int 10h
;
;Nhap so nho hon 8
lap:
lea dx,msg
mov ah,9
int 21h
mov ah,1
int 21h
and al,0fh
mov n,al
cmp n,8
ja nhaplai
mov dl,2
mov ax,1
pop dx
or dl,30h
mov ah,2
int 21h
loop print
mov ah,4ch
int 21h
main endp
end quả vào BX.
3. Viết chương trình hợp ngữ dạng .EXE thực hiện nhập vào 2 số tự nhiên nhỏ hơn
10. Tìm số lớn nhất trong 2 số và in kết quả ra màn hình trên dòng tiếp theo.
.model
.stack
.data
msg db 'Nhap vao mot 2 so nho hon 10',13,10,'$'
msga db 'a= $'
msgb db 13,10,'b= $'
a db ?
msgkq db 13,10,'So lon nhat la: $'
b db ?
.code
main proc
mov ax,@data
mov ds,ax
lea dx,msg
mov ah,9
int 21h
lea dx,msga
mov ah,9
int 21h
mov ah,4ch
int 21h
main endp
end
6. 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 chữ cái
in thường ch và in ra các chữ cái in thường từ ch đến ‘z’.
;Viet ct nhap vào tu bàn phím mot chu cái in thuong ch
; in ra các chu cai in thuong tu ch den ‘z’.
.model small
.stack 100h
.data
s1 db 'nhap mot ky tu : $'
msg db 10,13,'$'
.code
main proc
mov ax,@data
mov ds,ax
;nhap mot ky tu
mov ah,9
lea dx,s1
int 21h
mov ah,1
int 21h
;chuyen ky tu vua nhap vao bl
mov bl,al
;xuong dong
mov ah,9
lea dx,msg
int 21h
inkytu:
.code
main proc
mov ax,@data
mov ds,ax
mov ch1,'A';luu ky tu 'A' vao ch1
mov ch2,'E';luu ky tu 'E' vao ch2
;trong doan tu 'A' den 'E' co 3 ky tu la B C D
;xuong dong
mov ah,9
lea dx,msg
int 21h
;in chuoi kq
mov ah,9
lea dx,kq
int 21h
mov al,ch1
mov cl,ch2
mov bx,'0' ;bx luc dau =0
demkytu:
inc al
cmp al,cl
je thoat
inc bx
jmp demkytu
thoat:
mov ah,2
mov dx,bx
int 21h
mov ah,4ch
int 21h
mov ah,2
print:
xor dl,dl
rol bx,1
adc dl,30h
int 21h
loop print
mov ah,4ch
int 21h
main endp
end
5. 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 chữ cái
in thường ch và in ra các chữ cái in thường từ ‘a’ đến ch.
;Viet ct nhap vào tu bàn phím mot chu cái in thuong ch
; in ra các chu cai in thuong tu 'a' den ch.
.model small
.stack 100h
.data
s1 db 'nhap mot ky tu : $'
msg db 10,13,'$'
.code
main proc
mov ax,@data
mov ds,ax
;nhap mot ky tu
mov ah,9
lea dx,s1
int 21h
mov ah,1
int 21h