Một số bài bập Assembly

 Tài Liệu Blog

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ề

Một số bài tập công nghệ thông tin khác: Tại Đây