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!