Hưỡng dẫn code lời giải bài tập lập trình emu8086 cho môn kỹ thuật vi xử lý từ a-z
Ngôn ngữ Assembly code trên phần mềm emu8086 đang là một trong những ngôn ngữ lập trình gây ra nhiều sự ức chế bởi nó cũng không khác gì các ngôn ngữ lập trình khác như C, C++, Visua Basic, C#… Chúng ta chỉ cần thiếu một dấu chấm hay dấu phẩy thì chương trình cũng không thể chạy được.
Hầu hết các bài tập Assembly cho môn kỹ thuật vi xử lý đều rất khó tìm bởi đa phần những người giải được ít khi chia sẻ trên các trang mạng, chúng ta cần phải tự mày mò và tìm ra phương pháp giải hay tham khảo một số bài tập tương tự để có thể tư duy thêm về phương pháp viết chương trình:
Dưới đây Viết mã bug xin chia sẻ các bài tập assembly có lời giải cho các sinh viên ngành kỹ thuật đặc biệt là những sinh viên học ngành kỹ thuật điện , công nghệ thông tin :
Bài 1: Viết chương trình hiện ra câu “Hello Assembly 2021”
.MODEL small
.STACK 100h
.DATA
tb1 db ‘Hello Assembly 2021!$’
.CODE
main proc
Mov AX,@DATA
Mov DS,AX
Lea DX,tb1
Mov AH,9
Int 21h
Mov AH,4Ch
Int 21h
endp main
end main
Bài 2: Viết chương trình hiện ra hai câu “Chao mung ban den voi Assembly 2021” “Assembly 2021 that de!”. Mỗi câu trên một dòng.
.MODEL small
.STACK 100h
.DATA
tb1 db “Chao mung ban den voi Assembly 2021$”
tb2 db 0DH,0AH,”Assembly 2021 that de!$”
.CODE
main proc
Mov AX,@DATA
Mov DS,AX
;xuat thong bao 1
Lea DX,tb1
Mov AH,9
Int 21h
;xuat thong bao 2
Lea DX,tb2
Mov AH,9
Int 21h
Mov AH,4Ch
Int 21h
endp main
end main
Bài 3: Viết chương trình yêu cầu nhập một ký tự từ bàn phím và xuất ra màn hình ký tự vừa nhập.
.model small
.stack
.data
tb1 db 13,10,“Hay nhap mot ky tu: $”
tb2 db 13,10,”Ky tu da nhap: $”
KyTu db ?
.code
main proc
Mov ax,@data
Mov ds,ax
; nhac nhap
Lea dx, tb1
Mov ah, 9
int 21h
; nhap 1 ky tu
Mov ah, 1
Int 21h
Mov KyTu, al
; thong bao ket qua
lea dx, tb2
mov ah, 9
int 21h
; hien thi ky tu da nhap
Mov ah, 2
Mov dl, KyTu
Int 21h
; ve dos
Mov ah, 4Ch
Int 21h
endp main
end main
Bài 4: Viết chương nhập vào một ký tự từ bàn phím. Chuyển ký tự đó sang ký tự hoa.
.MODEL SMALL
.STACK 100h
.DATA
tb1 DB ‘Nhap vao ki tu thuong : $’
tb2 DB 13,10,’Chuyen sang ki tu hoa la : ‘
Char DB ?,’$’
.CODE
Main PROC
MOV AX,@DATA
MOV DS,AX
; In ra thong bao 1
LEA DX,tb1
MOV AH,9
INT 21h
; Nhap vao 1 ki tu thuong va doi thanh ki tu hoa
MOV AH,1
INT 21h ; Doc 1 ki tu thuong va luu vao AL
SUB AL,20h ; Doi thanh ki tu hoa
MOV Char,AL
; Hien len chu hoa
LEA DX,tb2
MOV AH,9
INT 21h
; Ket thuc chuong trinh
MOV AH,4Ch
INT 21h
endp main
end main
Bài 5: Viết chương trình chuyển đổi ký tự hoa thành ký tự thường trong môn kỹ thuật vi xử lý.
.MODEL SMALL
.STACK 100h
.DATA
tb1 DB ‘Nhap vao ki tu hoa : $’
tb22 DB 0Dh,0Ah,’Chuyen sang ki tu thuong la : ‘
Char DB ?,’$’
.CODE
Main PROC
MOV AX,@DATA
MOV DS,AX
; In ra thong bao 1
LEA DX,tb1
MOV AH,9
INT 21h
; Nhap vao 1 ki tu hoa va doi thanh ki tu thuong
MOV AH,1
INT 21h ; Doc 1 ki tu hoa va luu vao AL
ADD AL,20h ; Doi thanh ki tu thuong
MOV Char,AL
; Hien len chu thuong
LEA DX,tb2
MOV AH,9
INT 21h
; Ket thuc chuong trinh
MOV AH,4Ch
INT 21h
endp main
end main
nhap chuoi
data segment
tb1 db “Hay nhap vao mot chuoi ky tu: $”
tb2 db 13, 10,”chuoi vua nhap la: $”
str db 200,?,200 dup(‘$’)
ends
stack segment
dw 128 dub(?)
ends
code segment
mov ax,data
mov ds,ax
lea dx,tb1
mov ah,09h
int 21h
mov ah,0Ah
lea dx,str
int 21h
lea DX,tb2
mov ah,09h
int 21h
lea bx,str
mov al,{bx+01h}
mov ah,00h
add bx,ax
;mov [bx+2],”$”
mov ah,09h
lea dx,str+2
int 21h
ends
Bài 6: Viết chương trình nhập vào một chuỗi. In ra màn hình chuỗi thường, chuỗi in. Dùng chương con.
.MODEL small
.STACK
.DATA
tb1 DB ‘Nhap vao 1 chuoi: $’
tb2 DB 10,13,’Doi thanh chu thuong: $’
tb3 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 thuong
CALL InChuoiThuong
; xuat chuoi tb3
MOV AH,09h
LEA DX,tb3
INT 21h
; Goi chuong trinh con in chuoi thuong
CALL InChuoiHoa
MOV AH,4ch
INT 21h
;**************************************
; Doi thanh chuoi ky tu thuong
InChuoiThuong PROC
LEA SI,s+1
XOR CX,CX
MOV CL,[SI]
INC SI
LapThuong:
MOV AH,02h
MOV DL,[SI]
CMP DL,’A’
JB LT1
CMP DL,’Z’
JA LT1
ADD DL,32
LT1: INC SI
INT 21h
LOOP LapThuong
RET
InChuoiThuong ENDP
; Doi thanh chuoi ky tu hoa
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 8: Viết chương trình nhập vào một chuỗi. Đếm chiều dài của chuỗi nhập vừa nhập trong môn kỹ thuật vi xử lý.
.MODEL small
.STACK
.DATA
tb1 DB ‘Nhap vao 1 chuoi: $’
tb2 DB 10,13,’Tong chieu dai cua chuoi: $’
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
;Tinh chieu dai chuoi
XOR AX,AX
MOV AL,s+1 ;Chuyen chieu dai chuoi vao ax
MOV CX,0 ;Khoi tao bien dem
MOV BX,10
LapDem1:
MOV DX,0
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LapDem1
;xuat chieu dai chuoi
MOV AH,2
LapDem2:
POP DX
OR DL,’0′ ;chuyen chu so -> so
INT 21H
LOOP LapDem2
MOV AH,4ch
INT 21h
END BEGIN
Bài 9: Viết chương trình nhập vào 2 số kiểu byte, in ra màn hình tích 2 số vừa nhập trong môn kỹ thuật vi xử lý.
.model tiny
.stack 100h
.data
tb1 db ‘nhap a=$’
tb2 13,10,’nhap b=$’
tb3 13,10,’tich 2 so la:$’
so1 db 0
so2 db 0
.code
main proc
Mov ax,@Data
Mov ds,ax
Mov ah,9
;in thong bao nhap so thu 1
Lea dx,tb1
int 21h
nhap1:
mov ah,1
int 21h
cmp al,13 ;so sanh al voi 13
je nhap2 ;neu bang thi nhay den nhap 2
sub al,30h ; chuyen ky tu thanh so
mov dl,al ;cat al vao dl
mov al,so1 ; dua so vua nhap ve kieu byte
mov bl,10 ;gan bl =10
mul bl ;nhan al voi 10
add al,dl ;lay ket qua vua nhan cong voi so vua nhap
mov s01,al ;cat ket qua sau khi doi vao bien so1
jmp nhap1 ;nhay den nhan nhap 1
nhap2:
lea dx,tb2; in thong bao nhap so thu 2
mov ah,9
int 21h
nhap: mov ah,1
int 21h
cmp al,13 ; so sanh so vua nhap voi enter
je tinhtich ;neu bang thi tinh tich
sub al,30h ; chuyen xau vua nhap thanh so
mov dl,al ;cat so vua nhap vao dl
mov al,so2 ;dua so vua nhap ve kieu byte
mov bl,10 ;gan bl=10
mul bl ; lay so ban dau nhan voi 10
add al,dl ;lay ket qua vua nhan cong voi so vua nhap
mov s02,al ;cat ket qua sau khi doi vao bien so2
jmp nhap
tinhtich:
mov al,so1 ;dua so vua nhap ra thanh ghi al
mul so2 ;nhan voi so 2
mov bx,ax ;lay ket qua vua tinh chuyen vao thanh ghi bx
jmp tinhtich
;in tich
mov ah,9 ;hien thong bao in tich
lea dx,tb3
int 21h
mov ax,bx ;chuyen ket qua ra thanh ghi ax
mov bx,10 ;gan bx=10
xor cx,cx ;khoi tao bien dem
chia: xor dx,dx ;xoa bit cao
div bx ;lay ket qua chia cho 10 du dat dx,thuong dat ax
push dx ;day du trong dx vao ngan xep
inc cx ;tang bien dem
cmp ax,0 ;so sanh thuong voi 0
ja chia ;neu lon hon thi chia
mov ah,2 ;lay chuc nang in ky tu ra man hinh
lay: pop dx ;lay du trong stasck khoi dx
add dl,30h ;chuyen so vua nhap sang dang ky tu
int 21h ;thuc hien in ky tu nam trong dl ra man hinh
loop lay
ra: mov ah,4ch
int 21h
Main endp
End main
Bài 10 : Viết chương trình nhập vào 2 số kiểu word, in ra màn hình tổng 2 số vừa nhập trong môn kỹ thuật vi xử lý.
.model tiny
.stack 100h
.data
tb1 db ‘nhap so thu 1:$’
tb2 db 13,10 ,’nhap so thu 2:$’
tb3 db 13,10,’tong 2 so$’
so1 dw 0
so2 dw 0
tong dw 0
.code
main proc
mov ax,@data
mov ds,ax
;in thong bao nhap so thu nhat
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 ;đua bien sô 1 vê kiêu byte de chuan bi nhann vói 10
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 so1,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 băng thì tính tông
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,so2 ;đua 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 so2,ax ;cât kêt qua vào biên sô 2
jmp nhap
tinhtong:
mov dx,tong
mov ax,so1 ;đua biên sô 1 ra thanh ghi ax
mov bx,so2 ;đua biên só 2 ra thanh ghi bx
add ax,bx ;công ax voi bx kêt qua cat vao ax
mov tong,ax ;dua kêt qua tu ax vào biên tông
inso: mov ah,9 ;hiên thông báo in tông
lea dx,tb3
int 21h
mov ax,tong ;đua 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 đêm
chia: div bx ;lây kêt qua chia cho 10
push dx ;du o dx đây vao ngăn xêp
inc cx ;tăng biên đêm
cmp ax,0 ;so sanh thuong voi 0
je hienkq ;neu băng thì hiên kêt qua
xor dx,dx ;xoa bit cao trong dx
jmp chia
hienkq: pop dx ;lây du trong ngăn 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
ra: mov ah,4ch
int 21h
Main endp
End main
Bài 11 : Cho một mảng M gồm 20 phần tử kiểu Word giá trị tuỳ ý (không phải nhập giá trị các phần tử).Tính tổng giá trị các phần tử có giá trị chia hết cho 7 trong môn kỹ thuật vi xử lý.
.model tiny
.stack 100h
.data
st1 db 13,10,’tong cac phan tu chia het cho 7:$’
st2 db 13,10,’$’
m db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
a db 0
.code
main proc
mov ax,@data
mov ds,ax
;in thông báo nhập số thứ 1
lea dx,st1
mov ah,9
int 21h
mov cx,20 ;gán cx=20
lea si,m ;si trỏ đến ngăn nhớ đầu tiên của mảng M
mov a,0 ; khởi tạo a=0
duyet:
mov al,[si] ; đưa các giá trị trong mảng do si trỏ đến vào al
mov bl,7 ;gán bl=7
mov ah,0 ;xoá bít cao
div bl ;chia al cho 7
cmp ah,0 ;so sánh thương với 0
je tong ;nếu bằng thì tính tổng
jmp tiep
tong:
mov al,[si] ; đưa các giá trị trong mảng do si trỏ đến vào al
mov bl,a ; đ ưa số a vào bl
add al,bl ;c ộng al v ơí bl kết quả cất vào al
mov a,al ;chuyển kết quae\r vào biến a
tiep:
inc si ;tăng chỉ số mảng
inc dl ;tăng dl
loop duyet
mov al,a ;chuyển số trở lại thanh ghi al
mov bl,10 ;gán bl =10
mov cx,0 ;khởi tạo biến đếm
chia:
mov ah,0 ;xoá bít cao
div bl ;lấy kết quả chia cho 10
mov dl,ah ;chuyển dư vào dl
add dl,30h ;chuyển số sang dạng ký tự
push dx ;dẩy dư vào ngăn xếp
inc cx ;tăng biến đếm
cmp al,0 ;so sánh thương với 0
je inso ;nếu bằng thì in số
jmp chia
inso:
pop dx
mov ah,2
int 21h
loop inso
ra:
mov ah,4ch
int 21h
main endp
end main
Bài 12 : Viết chương trình nhập vào 1 số kiểu word in ra màn hình mã nhị phân tương ứng của số đó trong môn kỹ thuật vi xử lý.
.model tiny
.stack 100h
.data
st1 db ‘Nhap so kieu WORD :$’
st2 db 13,10,’Ma nhi phan tuong ung:$’
so dw 0
.code
main proc
mov ax,@data
mov ds,ax
lea dx,st1
mov ah,9
int 21h ;In xau st1
nhap:
mov ah,1
int 21h
cmp al,13
je nhiphan
sub al,30h
mov ah,0
mov cx,ax
mov bx,10
mov ax,so
mul bx
add ax,cx
mov so,ax
jmp nhap
nhiphan:
lea dx,st2
mov ah,9
int 21h
mov cx,0
mov bx,2
mov ax,so
chia:
mov dx,0
div bx
add dx,30h
push dx
inc cx
cmp ax,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
Bài 13 : Viết chương trình nhập vào 1 số kiểu word in ra màn hình mã Hexa tương ứng của số đó trong môn kỹ thuật vi xử lý.
.model tiny
.stack 100h
.data
st1 db ‘nhap so kieu word:$’
st2 db 13,10,’so do duoi dang hecxa:$’
a dw 0
.code
main proc
;
mov ax,@data
mov ds,ax
;
lea dx,st1
mov ah,9
int 21h
nhap:
mov ah,1
int 21h
cmp al,13
je inso
mov ah,0
sub al,30h
mov cx,ax
mov ax,a
mov bx,10
mul bx
add ax,cx
mov a,ax
jmp nhap
inso:
;
lea dx,st2
mov ah,9
int 21h
mov bx,16
mov ax,a
mov cx,0
chia:
mov dx,0
div bx
cmp dx,10
jae doi
add dx,30h
jmp cat
doi: add dx,37h
cat:
push dx
inc cx
cmp ax,0
je hien
jmp chia
hien:
pop dx
mov ah,2
int 21h
loop hien
ra:
mov ah,4ch
int 21h
main endp
end main
Bài 14 : Viết chương trình nhập vào 1 mảng 15 phần tử kiểu word in ra màn hình mã Hexa tương ứng của số đó trong môn kỹ thuật vi xử lý.
.model tiny
.stack 100h
.data
tb1 db ‘Nhap mang 15 phan tu kieu word: $’
tb2 db 10,13,’Nhap phan tu : $’
tb3 db 10,13,’Phan tu co gia tri lon nhat la: $’
a dw 20 dup(0)
.code
main proc
mov ax,@data
mov ds,ax
;-------------
lea dx,tb1
mov ah,9
int 21h
mov cx,15 ;Nhap 15 phan tu kieu word
xor si,si
nhapmang:
mov ah,9
lea dx,tb2
int 21h
push cx
nhapso:
mov ah,1
int 21h
cmp al,13
je catkq
sub al,30h
mov cl,al
xor ch,ch
mov bx,10
mov ax,a[si]
mul bx
add ax,cx
mov a[si],ax
jmp nhapso
catkq:
add si,2
pop cx
loop nhapmang
lea dx,tb3
mov ah,9
int 21h
xor si,si
mov ax,a[si]
mov cx,15 ; mov cx,14 add si,2
duyet:
cmp a[si],ax
jbe qua
mov ax,a[si]
qua:
add si,2
loop duyet
;mov ax,a[0]
xor cx,cx
mov bx,10
chia:
xor dx,dx
div bx
push dx
inc cx
cmp ax,0
jne chia
mov ah,2
hienso:
pop dx
add dl,30h
int 21h
loop hienso
;—————–
mov ah,4ch
int 21h
main endp
end main
Bài 15 : Tính tổng 2 số:
Code Segment
Assume cs: Code
Org 100h
Start: jmp over
tb1 db ‘Nhap a = $’
tb2 db 10, 13, ‘Nhap b = $’
tb3 db 10, 13, ‘Tong 2 so
da nhap la $’
over:
Tính hiệu hai số:
Code Segment
Assume cs: Code
Org 100h
Start: jmp over
tb1 db ‘Nhap a = $’
tb2 db 10, 13, ‘Nhap b = $’
tb3 db 10, 13, ‘Hieu 2 so da
nhap la $’
over:
Bài 16 : Viết chương trình nhập 1 kí tự cho ra số có mã Hexa tương ứng trong môn kỹ thuật vi xử lý.
Code Segment
Assume cs: Code
Org 100h
Start: jmp over
tb1 db 10, 13, ‘Nhap ki tu
kt = $’
tb2 db 10, 13, ‘So thap
phan tuong ung la 1$’
Trang 3
Mov ah,9
lea dx,tb1
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,tb2
int 21h
mov ah,1
int 21h
add bl,al
mov ah,9
lea dx,tb3
int 21h
sub bl,30h
cmp bl,39h
jbe thoat
sub bl,10
mov ah,2
mov dl,’1′
int 21h
thoat:
mov dl,bl
mov ah,2
int 21h
int 20h
Mov ah,9
lea dx,tb1
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,tb2
int 21h
mov ah,1
int 21h
mov cl,al
mov ah,9
lea dx,tb3
int 21h
cmp bl,cl
jae thoat
xchg bl,cl
mov ah,2
mov dl,’-‘
int 21h
thoat:
sub bl,cl
add bl,30h
mov ah,2
mov dl,bl
int 21h
tb3 db 10, 13, ‘Hay nhap
lai voi ( A <= kt <= F) or (a <=
kt <= f)$ ‘
over:
nhap: Mov ah,9
lea dx,tb1
int 21h
mov ah,1
int 21h
mov bl,al
cmp bl,’A’
jae ss1
jmp loi
ss1: cmp bl,’F’
jbe thoat1
cmp bl,’a’
jae ss2
jmp loi
ss2: cmp bl,’f’
jbe thoat2
loi: Mov ah,9
lea dx,tb3
int 21h
jmp nhap
thoat1:
sub bl,11h
jmp thoat3
thoat2:
Trang 4
Code Ends
End Start
Bài 17 : Viết chương trình kiểm tra tính chẵn lẻ của 1 chữ số trong môn kỹ thuật vi xử lý.
Code Segment
Assume cs: Code
Org 100h
Start: jmp over
tb1 db 10, 13, ‘Nhap ki tu
so kt = $’
tb2 db 10, 13, ‘Do la so
chan $’
tb3 db 10, 13, ‘Do la so le$’
tb4 db 10, 13, ‘Hay nhap
lai voi ( 0 <= kt <= 9) $’
over:
nhap: Mov ah,9
lea dx,tb1
int 21h
mov ah,1
int 21h
mov bl,al
cmp bl,30h
jae sosanh
jmp loi
sosanh:
cmp bl,39h
jbe inra
int 20h
Code Ends
End Start
Câu 18: Viết chương trình in theo thứ tự bảng chữ cái trong môn kỹ thuật vi xử lý.
Code Segment
Assume cs: Code
Org 100h
Start: jmp over
tb1 db ‘Nhap ki tu thu 1 : $’
tb2 db 10, 13, ‘Nhap ki tu
thu 2 : $’
tb3 db 10, 13, ‘Thu tu bang
ma la : $’
over:
Mov ah,9
lea dx,tb1
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,tb2
int 21h
mov ah,1
int 21h
mov cl,al
sub bl,31h
thoat3:
Mov ah,9
lea dx,tb2
int 21h
mov ah,2
mov dl,bl
int 21h
int 20h
Code Ends
End Start
Bài 17 : Viết chương trình tính thương – dư và xuất ra màn hình trong môn kỹ thuật vi xử lý.
Code Segment
Assume cs: Code
Org 100h
Start: jmp over
tb1 db ‘Nhap mot so bat ky
a = $’
tb2 db 10, 13, ‘Thuong cua
BL : $’
tb3 db 10, 13, ‘Du cua BL :
$’
over:
Mov bl,19
Mov ah,9
lea dx,tb1
int 21h
mov cl,0
mov ah,1
loi: mov ah,9
lea dx,tb4
int 21h
jmp nhap
inra: Test bl,1
jne sole
mov ah,9
lea dx,tb2
jmp thoat
sole: mov ah,9
lea dx,tb3
thoat: int 21h
int 20h
Code Ends
End Start
Bài 18 : Viết chương trình kiểm tra số nguyên tố trong môn kỹ thuật vi xử lý.
include mylib.mac
Code Segment
Assume cs: Code
Org 100h
Start:
@write ‘Nhap so n = ‘
Call nhap_so
@xuongdong
mov cx,ax
mov bx,1
lap: mov ax,bx
mul bx
inc bx
cmp ax,cx
jb lap
je cp
@write ‘Ko phai so chinh
phuong’
jmp thoat
cp: @write ‘So da nhap la so
chinh phuong’
thoat:
int 20h
include proc.asm
Code Ends
End Start
Bài 19 : Viết chương trình tính tổng các phần tử lẻ trong môn kỹ thuật vi xử lý.
Include Mylib.mac
Code Segment
Trang 12
chia: xor dx,dx
div bx
push dx
inc cx
cmp ax,0
ja chia
mov ah,2
inra: pop dx
or dx,30h
int 21h
loop inra
int 20h
Code Ends
End Start
Bài 20: Kiểm tra số hoàn thiện
Include Mylib.mac
Code Segment
Assume cs : code
Org 100h
Start : jmp over
n dw ?
over:
@Write ‘Nhap n = ‘
Call Nhap_so
mov n,ax
mov bx,2
xor cx,cx
lap:
Include Mylib.mac
Code Segment
Assume Cs : Code
Org 100h
Start : jmp over
n dw ?
over:
@Write ‘Nhap x = ‘
Call nhap_so
cmp ax,2
jbe ngt
mov n,ax
shr ax,1
mov cx,ax
mov bx,2
chia:
xor dx,dx
mov ax,n
div bx
inc bx
cmp dx,0 ; hay or dx,dx
je hopso
loop chia
ngt:
@xuongdong
@write ‘Do la so nguyen to’
jmp thoat
hopso:
@xuongdong
@write ‘Do la hop so ‘
Assume Cs : Code
Org 100h
Start : jmp over
a dw 20 dup(?)
n dw ?
over:
@write ‘nhap mang n = ‘
Call nhap_so
mov n,ax
mov cx,ax
xor bx,bx
nhap:
@xuongdong
@write ‘Nhap 1 phan tu: ‘
Call nhap_so
mov a[bx],ax
add bx,2
loop nhap
mov cx,n
xor bx,bx
xor ax,ax
lap:
xor dx,dx
mov dx,a[bx]
Test dx,1
je tiep
add ax,a[bx]
tiep:
add bx,2
loop lap
xor dx,dx
div bx
cmp dx,0
jne tiep
add cx,ax
tiep:
inc bx
mov ax,n
cmp bx,ax
jbe lap
cmp cx,n
jne khong
@xuongdong
@write ‘So da cho la hoan
thien ‘
jmp thoat
khong:
@xuongdong
@write ‘So da cho ko hoan
thien’
thoat:
int 20h
Include Proc.asm
Code Ends
End Start
Bài 21: Viết chương trình tính tích 2 số trong môn kỹ thuật vi xử lý.
include mylib.mac
code segment
assume cs:code
org 100h
start:
thoat:
int 20h
Include Proc.asm
Code ends
End Start
Bài 22: Viết chương trình tính số Fibonacy thứ n trong môn kỹ thuật vi xử lý.
Include mylib.mac
Code Segment
Assume cs: Code
Org 100h
Start:jmp over
n dw ?
over:
@write ‘Nhap so Fibonaci
thu n = ‘
Call nhap_so
@xuongdong
cmp ax,2
jbe thoat
mov n,ax
mov ax,1
mov bx,1
mov cx,2 ;tinh tu n>2
tinh: add bx,ax
sub ax,bx
neg ax
inc cx
cmp n,cx
je thoat1
@xuongdong
@write ‘tong la : ‘
Call in_so
int 20h
Include Proc.asm
Code Ends
End Start
Câu 23: Tìm Min-Max của mảng:
Include Mylib.mac
Max Macro w1,w2
local thoat
mov ax,w1
cmp ax,w2
ja thoat
mov ax,w2
thoat:
EndM
Min Macro w1,w2
local thoat
mov ax,w1
cmp ax,w2
jbe thoat
mov ax,w2
thoat:
EndM
Code Segment
Assume Cs : Code
Org 100h
Start : jmp over
@write ‘nhap a:’
call nhap_so
mov bx,ax
@xuongdong
@write ‘nhap b:’
call nhap_so
@xuongdong
xor cx,cx
lap: test bx,1
je sochan
add cx,ax
sochan:
shl ax,1
shr bx,1
cmp bx,0
ja lap
@write ‘tich cua a*b la:’
mov ax,cx
call in_so
int 20h
include proc.asm
code ends
end start
Bài 24 : Viết chương trình sắp xếp các phần tử tăng dần trong môn kỹ thuật vi xử lý.
include mylib.mac
code segment
assume cs: code
jmp tinh
thoat:
mov bx,1
thoat1:
@write ‘So Fibonaci thu n
la ‘
Mov ax,bx
Call in_so
int 20h
include proc.asm
Code Ends
End Start
Bài 25 : Viết chương trình nhập xâu kí tự từ bàn phím chuyển kí tự đó thành chữ hoa sang xâu khác và in ra màn hình trong môn kỹ thuật vi xử lý.
Include Mylib.mac
Code Segment
Assume CS : Code
Org 100h
Start : Jmp over
x1 db 80 dup(?)
x2 db 80 dup(?)
over:
@write ‘Nhap xau : ‘
lea di,x1
xor bx,bx
cld
nhap:
mov ah,1
int 21h
cmp al,0dh
je chuyen
stosb
inc bx
cmp ax,a[bx+2]
jle qua_
xchg ax,a[bx+2]
mov a[bx],ax
qua_:
add bx,2
cmp bx,dx
jb lap_
loop for_
@xuongdong
@write ‘Day sau khi sap: ‘
mov cx,n
xor bx,bx
forin_:
mov ax,a[bx]
call In_so
add bx,2
@write ‘ ‘
loop forin_
int 20h
include proc.asm
code ends
end start
Câu 26 : Viết chương trình nhập xâu kí tự từ bàn phím chuyển kí tự vừa nhập thành chữ thường sang xâu khác và in ran màn hình trong môn kỹ thuật vi xử lý.
Include Mylib.mac
Code Segment
Assume CS : Code
Org 100h
Start : Jmp over
x1 db 80 dup(?)
x2 db 80 dup(?)
over:
@write ‘Nhap xau : ‘
lea di,x1
xor bx,bx
cld
nhap:
mov ah,1
int 21h
cmp al,0dh
je chuyen
stosb
inc bx
jmp nhap
chuyen:
mov byte ptr[di],’$’
inc bx
lea si,x1
@xuongdong
lea di,x2
jmp nhap
chuyen:
mov byte ptr[di],’$’
inc bx
lea si,x1
@xuongdong
lea di,x2
mov cx,bx
lap:
mov al,[si]
cmp al,’A’
jb nhay
cmp al,’Z’
ja nhay
stosb
nhay: inc si
loop lap
mov byte ptr[di],’$’
lea si,x2
@xuongdong
mov ah,9
lea dx,x1
int 21h
@xuongdong
mov ah,9
lea dx,x2
int 21h
int 20h
Code Ends
Bài 27 : Viết chương trình nhập họ tên và tách tên đó hiển thị ra màn hình trong môn kỹ thuật vi xử lý.
@write ‘Nhap ho & ten:‘
lea di,hten
cld
nhap:
mov ah,1
int 21h
cmp al,0dh
je chuyen
stosb
jmp nhap
chuyen:
mov byte ptr[di],’$’
@xuongdong
@write ‘Ho ten la : ‘
mov ah,9
lea dx,hten
int 21h
dec di
std
mov al,’ ‘
repe scasb
inc cx
inc di
mov bx,cx
repne scasb
inc cx
add di,2
sub bx,cx
mov cx,bx
lap:
mov al,[si]
cmp al,’a’
jb nhay
cmp al,’z’
ja nhay
stosb
nhay: inc si
loop lap
mov byte ptr[di],’$’
lea si,x2
@xuongdong
mov ah,9
lea dx,x1
int 21h
@xuongdong
mov ah,9
lea dx,x2
int 21h
int 20h
Code Ends
End Start
Bài 28 : Viết chương trình kiểm tra tính đối xứng của xâu trong môn kỹ thuật vi xử lý.
include mylib.mac
code segment
assume cs:code
org 100h
start:jmp over
xau db 80 dup (‘$’)
End Start
Bài 29 : Đếm từ trong xâu
include mylib.mac
code segment
assume cs:code
org 100h
start:jmp over
xau db 80 dup (‘$’)
over:
@write ‘nhap xau: ‘
xor cx,cx
xor bx,bx
lea di,xau
cld
mov ah,1
nhap:
int 21h
cmp al,13
je tiep
inc cx
stosb
jmp nhap
tiep:
jcxz inra
dec di
std
mov al,’ ‘
lap:
repe scasb
or cx,cx
je inra
inc cx
Trang 18
mov cx,bx
mov si,di
lea di,ten
cld
rep movsb
mov byte ptr[di],’$’
@xuongdong
@write ‘Ten la:’
lea dx,ten
mov ah,9
int 21h
int 20h
Code Ends
End Start
Bài 30 : Viết chương trình kiểm tra chữ hoa trong môn kỹ thuật vi xử lý.
code segment
assume cs:code
org 100h
start:jmp over
tb1 db ‘nhap mot ki tu:$’
tb2 db 10,13,’la chu hoa$’
tb3 db 10,13,’khong$’
over:
mov ah,9
lea dx,tb1
int 21h
mov ah,1
int 21h
cmp al,’A’
jb ko
cmp al,’Z’
ja ko
mov ah,9
lea dx,tb2
int 21h
jmp het
over:
@write ‘nhap xau:’
@xuongdong
lea di,xau
xor cx,cx
cld
mov ah,1
nhap:
int 21h
cmp al,13
je tiep
inc cx
stosb
jmp nhap
tiep:
dec di
shr cx,1
lea si,xau
lap:
cmpsb
jne kdxung
sub di,2
loop lap
@xuongdong
@write ‘Xau doi xung’
jmp thoat
kdxung:
@xuongdong
@write ‘Xau khong doi
xung’
thoat:
int 20h
include proc.asm
inc di
inc bx
repne scasb
inc cx
inc di
jmp lap
inra:
@xuong_dong
@write ‘So tu trong xau la:’
mov ax,bx
call in_so
int 20h
include proc.asm
code ends
end start
Đó là tổng hợp 30 bài tập Assembly cho môn kỹ thuật vi xử lý có lời giải cho những ai có những sinh viên cần, nên nhớ chúng ta chỉ cần copy paste là chạy thôi nhé.
Chúc các bạn học tốt môn này.
Post a Comment