Một số bài bập Assembly - HOIT ASIA

Thứ Hai, 23 tháng 12, 2019

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ề

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!

Không có nhận xét nào:

Đăng nhận xét