thiet ke website

Một số bài tập và hướng dẫn lập trình hệ thống Assembly (Phần 2)

bai tap lap trinh he thong assembly

Mình xin tiếp tục chia sẻ phần 2 vài bài tập lập trình hệ thống Assembly và code của nó. Chúc các bạn học tập tốt, nếu có thắc mắc các bạn có thể để lại bình luận để cùng mọi người trao đổi ^^

1. Tính tổng 2 số a và b

     inxau macro tbao
        lea dx,tbao
        mov ah,9
        int 21h
        endm
    _stack segment stack
        dw 100 dup(0)
    _stack ends
    data segment
        m1 db 10,13,'a=$'
        m2 db 10,13,'b=$'
        m3 db 10,13,'ket qua=$'
        m4 db '.5$'
        so dw 0
        a dw 0
        b dw 0
        du dw 0
        data ends
    code segment
        assume cs:code, ds:data, ss:_stack
        begin:
        mov ax,data
        mov ds,ax
        ; nhap a
        inxau m1
        call nhap
        mov bx,so
        mov a,bx
        ;nhap b
        inxau m2
        call nhap
        mov bx,so
        mov b,bx
        ;cx=ax*bx
        inxau m3
        call tong
        call in10
        mov ah,1
        int 21h
        mov ah,4ch
        int 21h
     nhap proc
        push ax
        push bx
        push cx
        push dx
        mov bx,10
        xor cx,cx
        mov si,0
        l1:
        mov ah,1
        int 21h
        cmp al,13
        je het
        cmp al,8
        jnz so_am
        and cx,cx
        jz nodiv
        xor dx,dx
        mov ax,cx
        jmp ctro
        nodiv:
        xor si,si
        ctro:
        push cx
        mov cx,1
        mov ah,10
        mov dl,20h
        int 10h
        pop cx
        jmp l1
        so_am:
        cmp al,'-'
        jne nap
        mov si,1
        jmp l1
        nap:
        cmp al,'0'
        jl l1
        cmp al,'9'
        jg l1
        and al,0fh
        xor ah,ah
        xchg ax,cx
        mul bx
        add cx,ax
        jmp l1
        het:
        and si,si
        jz soduong
        neg cx
        soduong:
        mov so,cx
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        nhap endp
     tong proc
        push ax
        push bx
        push cx
        push dx
        mov ax,a
        mov bx,b
        add ax,bx
        mov so,ax
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        tong endp
     in10 proc
        push ax
        push bx
        push cx
        push dx
        mov ax,so
        xor cx,cx
        mov bx,10
        cmp ax,0
        jge duong
        push ax
        mov al,'-'
        mov ah,14
        int 10h
        pop ax
        neg ax
        duong:
        xor dx,dx
        div bx
        push dx
        inc cx
        cmp ax,0
        jnz duong
        ;in ra
        mov ah,2
        inra:
        pop dx
        or dl,30h
        int 21h
        loop inra
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        in10 endp
     code ends
     end begin

2. Tính hiệu 2 số a và b

     code segment
    assume cs:code
    org 100h
    start : jmp over
    msg1 db 'nhap a=$'
    msg2 db 10,13,'nhap b=$'
    msg3 db 10,13 ,'Hieu hai so la :$'
    over:

    mov ah,9
    lea dx,msg1
    int 21h

    mov ah,1
    int 21h
    mov bl,al

    mov ah,9
    lea dx,msg2
    int 21h

    mov ah,1
    int 21h
    mov cl,al

    mov ah,9
    lea dx,msg3
    int 21h

    cmp cl,bl
    jae truonghop2
    sub bl,cl
    jmp hieu
    truonghop2: ;in dau tru
    mov ah,2
    mov dl,'-'
    int 21h
    sub bl,cl
    neg bl
    hieu:
    ;in hieu
    add bl,30h
    mov ah,2
    mov dl,bl
    int 21h
    int 20h
    code ends
    end start

3. Tính trung bình cộng 2 số có 5 chữ số a và b

     inxau macro tbao
        lea dx,tbao
        mov ah,9
        int 21h
        endm
    _stack segment stack
        dw 100 dup(0)
    _stack ends
    data segment
        m1 db 10,13,'a=$'
        m2 db 10,13,'b=$'
        m3 db 10,13,'ket qua=$'
        m4 db '.5$'
        so dw 0
        a dw 0
        b dw 0
        du dw 0
        data ends
    code segment
        assume cs:code, ds:data, ss:_stack
        begin:
        mov ax,data
        mov ds,ax
        ; nhap a
        inxau m1
        call nhap
        mov bx,so
        mov a,bx
        ;nhap b
        inxau m2
        call nhap
        mov bx,so
        mov b,bx
        ;cx=ax*bx
        inxau m3
        call tbcong
       
        mov ah,1
        int 21h
        mov ah,4ch
        int 21h
     nhap proc
        push ax
        push bx
        push cx
        push dx
        mov bx,10
        xor cx,cx
        mov si,0
        l1:
        mov ah,1
        int 21h
        cmp al,13
        je het
        cmp al,8
        jnz so_am
        and cx,cx
        jz nodiv
        xor dx,dx
        mov ax,cx
        jmp ctro
        nodiv:
        xor si,si
        ctro:
        push cx
        mov cx,1
        mov ah,10
        mov dl,20h
        int 10h
        pop cx
        jmp l1
        so_am:
        cmp al,'-'
        jne nap
        mov si,1
        jmp l1
        nap:
        cmp al,'0'
        jl l1
        cmp al,'9'
        jg l1
        and al,0fh
        xor ah,ah
        xchg ax,cx
        mul bx
        add cx,ax
        jmp l1
        het:
        and si,si
        jz soduong
        neg cx
        soduong:
        mov so,cx
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        nhap endp
     tbcong proc
        push ax
        push bx
        push cx
        push dx
        xor dx,dx
        mov ax,a
        mov bx,b
        add ax,bx
        mov cx,2
        div cx
        mov so,ax
        call in10
        cmp dx,0
        je he
        inxau m4
         he:
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        tbcong endp
     in10 proc
        push ax
        push bx
        push cx
        push dx
        mov ax,so
        xor cx,cx
        mov bx,10
        cmp ax,0
        jge duong
        push ax
        mov al,'-'
        mov ah,14
        int 10h
        pop ax
        neg ax
        duong:
        xor dx,dx
        div bx
        push dx
        inc cx
        cmp ax,0
        jnz duong
        ;in ra
        mov ah,2
        inra:
        pop dx
        or dl,30h
        int 21h
        loop inra
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        in10 endp
     code ends
     end begin
Thiet ke logo

Bài viết liên quan

[Java cơ bản] Bài 32: Throw and Throws

[Java cơ bản] Bài 32: Throw and Throws

Video ngày hôm nay các bạn sẽ được hướng dẫn về Throw and Throws trong lập trình hướng đối tượng Java. Chúc các bạn học tốt!

[Java cơ bản] Bài 22: Multi-classes

[Java cơ bản] Bài 22: Multi-classes

Video giới thiệu về Multi classes trong lập trình Java. Chúc các bạn học vui!

[Java cơ bản] Bài 35: Override (Phần 1)

[Java cơ bản] Bài 35: Override (Phần 1)

Video tiếp theo này sẽ giới thiệu và hướng dẫn các bạn về Override trong lập trình hướng đối tượng Java. Chúc các bạn học tập thật tốt!

[Java cơ bản] Bài 15: Cấu trúc vòng lặp For

[Java cơ bản] Bài 15: Cấu trúc vòng lặp For

For là cấu trúc lệnh lặp, như khi muốn in ra 10 phần tử từ 0 đến 9 và khi đó ta sẽ viết ra 10 lệnh in ra màn hình như vậy thì sẽ rất bất tiện. Vậy ta sử dụng vòng lặp để…

Bình luận ()