Tổng hợp 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

Tổng hợp 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

 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.

Tổng hợp 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


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.

ĐĂNG NHẬN XÉT

Previous Post Next Post