Một số bài bập Assembly
Bài tập Asembly
Bài 1: Viết chương trình hợp ngữ biến đổi chuỗi ký tự thường thành chuỗi ký tự hoa. In ra màn hình cả 2 chuỗi thu được
Code:
.MODEL small
.STACK
.DATA
tb1 DB 'Nhap vao 1 chuoi: $'
tb2 DB 10,13,'Doi thanh chu hoa: $'
s DB 100,?,101 dup('$')
.CODE
BEGIN:
MOV AX, @DATA
MOV DS,AX
;xuat chuoi tb1
MOV AH,09h
LEA DX,tb1
INT 21h
;nhap chuoi s
MOV AH,0AH
LEA DX,s
INT 21h
; xuat chuoi tb2
MOV AH,09h
LEA DX,tb2
INT 21h
; Goi chuong trinh con in chuoi hoa
CALL InChuoiHoa
MOV AH,4ch
INT 21h
;**************************************
InChuoiHoa PROC
LEA SI,s+1
XOR CX,CX
MOV CL,[SI]
INC SI
LapHoa:
MOV AH,02h
MOV DL,[SI]
CMP DL,'a'
JB LH1
CMP DL,'z'
JA LH1
SUB DL,32
LH1: INC SI
INT 21h
LOOP LapHoa
RET
InChuoiHoa ENDP
END BEGIN
Bài 2: Viết chương trình hợp ngữ cho phép tính ước số chung lớn nhất và bội chung nhỏ nhất của 2 số nhập vào từ bàn phím. In kết quả thu được ra màn hình dưới dạng thập phân
Code:
.Model small
.Stack 100H
.Data
tb1 DB 10,13,"Nhap so a:$"
tb2 DB 10,13,"Nhap so b:$"
tb3 DB 10,13,"UCLN:$"
tb4 DB 10,13,"BCNN:$"
a Dw ?
b Dw ?
c Dw ?
d Dw ?
.Code
MAIN Proc
;Khoi dau thanh ghi DS
MOV AX,@Data
MOV DS,AX
;in thong bao nhap a
lea dx,tb1
mov ah,9
int 21h
nhap1:
mov ah,1
int 21h
cmp al,13 ;so sanh ky tu vua nhap voi 13
je nhap2 ;neu bang nhap so thu 2
sub al,30h ;doi ky tu sang so
mov ah,0 ;xoa bit cao
mov cx,ax ;cat so vua nhap vào cx mov ax,so1 ;dua bien sô 1 vê kiêu byte de chuan bi nhann vói 10
mov ax,a
mov bx,10 ;gan bx =10
mul bx ; nhân ax voi 10
add ax,cx ;công ket qua vua nhan voi so vua nhap ket qua cât vào ax
mov a,ax ; cat kêt qua vao bién sô1
jmp nhap1
nhap2:
lea dx,tb2 ;hiên thông báo nhâp sô thu 2
mov ah,9
int 21h
nhap:
mov ah,1 ;nhap sô thu 2
int 21h
cmp al,13 ;so sánh ký tu vua nhâp voi 13 je tinhtong ;nêu bang thì tính tông
;MOV ax,a
je TINH_UCLN ;neu bang nhap so thu 2
sub al,30h ;chuyên ký tu sang dang sô
mov ah,0 ;xoá bít cao
mov cx,ax ;cât kêt qua vua nhap vào cx
mov ax,b ;dua biên sô 2 vê kiêu byte
mov bx,10 ;gan bx=10
mul bx ;nhân kêt qua vua nhap voi 10
add ax,cx ;công kêt qua vua nhân vói sô vua nhâp
mov b,ax ;cât kêt qua vào biên sô 2
jmp nhap
;______________________________________________________
TINH_UCLN:
MOV ax,a
MOV bx,b
LAP:
cmp ax,bx
jae TINH
xchg ax,bx
TINH:
sub ax,bx
cmp ax,0
je THOAT
jmp LAP
THOAT:
MOV c,bx
MOV AH,9
LEA DX,tb3
INT 21H
CALL KQ
;______________________________________
TINH_BCNN:
MOV ax,a
MOV bx,b
MUL bx
MOV bx,c
DIV bx
MOV bx,ax
MOV AH,9
LEA DX,tb4
INT 21H
CALL KQ
;Ket thuc
MOV AH,4CH
INT 21H
KQ PROC
mov ax,bx ;dua kêt qua trongv bien tông ra thanh ghi ax
mov dx,0 ;xoa bit cao dx
mov bx,10 ;gán bx=10
mov cx,0 ;khoi tao biên dêm
chia:
div bx ;lây kêt qua chia cho 10
push dx ;du o dx dây vao ngan xêp
inc cx ;tang biên dêm
cmp ax,0 ;so sanh thuong voi 0
je hienkq ;neu bang thì hiên kêt qua
xor dx,dx ;xoa bit cao trong dx
jmp chia
hienkq: pop dx ;lây du trong ngan xêp ra khoi dx
add dl,30h ;chuyên sô thành dang ký tu
mov ah,2 ;in tông
int 21h
loop hienkq
RET
KQ ENDP
END MAIN
Bài 3: Viết chương trình hợp ngữ tính giai thừa của 1 số nhập từ bàn phím(0<=x<=9). In kết quả ra màn hình dưới dạng thập phân
Code:
.model small
.stack 100h
.data
tb1 db 10,13,"Nhap so a:$"
tb3 db 10,13,"So khong dung! Nhap lai...$"
tb4 db 10,13,"Ket qua la: $"
tb5 db 10,13,"Ket qua la: 1$"
x dw ?
y dw ?
a dw ?
M dw ?
.code
main proc
mov ax,@data
mov ds,ax
nhap_so_a:
mov ah,9
lea dx,tb1
int 21h
call nhap_a
;Danh dau so lan lap va gia tri cua ax, n! co n lan lap
mov ax,x
mov a,ax
;Tinh toan
mov cx,a ;Luu lai so lan lap vong LOOP
mov ax,1
mov bx,1
tinh:
mul bx
add bx,1
loop tinh
mov M,ax ;Nhan don lan luot va luu ket qua n! vao M
;Hien thi ket qua
mov ah,9
lea dx,tb4
int 21h
mov ax,M
mov x,ax
call hthi_dec
jmp ket_thuc
main endp
;-------------------------------------------
;Nhap so a
nhap_a proc
mov x,0
mov y,0
mov bx,10
nhapa:
mov ah,1
int 21h
cmp al,13 ;Neu gap ky tu enter
je thoata
cmp al,30h ;So sanh voi so 0
je jmp KT
cmp al,39h ;;So sanh voi so 9
ja nhap_lai_a
;-------
sub al,30h
xor ah,ah
mov y,ax
mov ax,x
mul bx
add ax,y
cmp al,09h;Yeu cau so nhap phai <=9
ja nhap_lai_a
mov x,ax
jmp nhapa
nhap_lai_a:
mov ah,9
lea dx,tb3
int 21h
jmp nhap_so_a
KT:
mov ah,9
lea dx,tb5
int 21h
MOV AH,4ch
INT 21h
thoata:
ret
nhap_a endp
hthi_dec proc
mov bx,10
mov ax,x
mov cx,0
;Thuat toan la day tung so ket qua dec cua n! vao stack va su dung cx de dem so chu so
;dx luu gia tri tung chu so bi day vao hang doi
;Khi hien thi ket qua thi pop lay lan luot tu dau stack ra
chia:
mov dx,0
div bx
inc cx
push dx
cmp al,0
je ht
jmp chia
ht:
pop dx
add dl,30h
mov ah,2
int 21h
dec cx
cmp cx,0
jne ht
ret
hthi_dec endp
ket_thuc:
Bài 4: Viết chương trình hợp ngữ tính tổng các số chia hết cho 7 trong một mảng cho trước. In ra màn hình dưới dạng số hexa
Code:
.model small
.stack 100h
.data
st1 db 13,10,'tong cac phan tu chia het cho 7:$'
st2 db 13,10,'$'
m db 1,2,3,14,5,6,7,8,9,10
a db 0
.code
main proc
mov ax,@data
mov ds,ax
;in thong bao st1
lea dx,st1
mov ah,9
int 21h
mov cx,10
lea si,m;Tro den phan tu dau tien cua mang
mov a,0 ;
duyet:
mov al,[si] ; dua cac gia tri trong mang do si tro den vao al
mov bl,7 ;gan bl=7
mov ah,0 ;xoa bit cao
div bl ;chia al cho 7
cmp ah,0 ;so sanh thuong voi 0 , ah: luu phan du cua phep chia
je tong ;
jmp tiep
tong:
mov al,[si] ; dua gia tri trong mang si tro den vao al
mov bl,a ; gan a cho bl, a: chiu trach nhiem luu tong cac phtu %7=0
add al,bl
mov a,al
tiep:
inc si ;
inc dl ;
loop duyet;Duyet het n phan tu cua mang
mov al,a
mov bl,10
mov cx,0
chia:
mov ah,0
div bl
mov dl,ah
add dl,30h
push dx
inc cx
cmp al,0
je inso
jmp chia
inso:
pop dx
mov ah,2
int 21h
loop inso
ra:
mov ah,4ch
int 21h
main endp
end main
Link tài liệu tham khảo các bài tập Assembly: Tải về
Hãy ghé thăm Tài Liệu Blog để cùng nhau trao đổi kiến thức. Mọi ý kiến đóng góp xin comment ở dưới. Cảm ơn!
Hãy ghé thăm Tài Liệu Blog để cùng nhau trao đổi kiến thức. Mọi ý kiến đóng góp xin comment ở dưới. Cảm ơn!
Nhận xét