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

Cách đọc và ghi file text trong C++

Cách đọc và ghi file text trong C++

Trong C++ việc đọc và ghi file thường được sử dụng để đưa các bài toán ở dạng đầu vào và xuất ra kết qủa, giúp cho người ta dễ dàng kiểm tra xem chương trình của bạn có thực sự đúng không khi cho…

[Java cơ bản] Bài 52: Iterator

[Java cơ bản] Bài 52: Iterator

Hôm nay sẽ nói về Iterator, là một cách duyệt khác của Java. Chỉ tìm hiểu về Iterator và cách sử dụng nó như thế nào. Chúc các bạn học tốt.

[Java cơ bản] Bài 27: Static

[Java cơ bản] Bài 27: Static

Giới thiệu từ khóa Static ở trong Java. Trong class của Java có hai thành phần là thuộc tính và phương thức. Thuộc tính và phương thức phụ thuộc vào đối tượng tạo ra.

[Java cơ bản] Bài 19: Thời gian hệ thống

[Java cơ bản] Bài 19: Thời gian hệ thống

Video clip này sẽ giới thiệu tới các bạn cách để lấy thời gian hệ thống trong lập trình Java. Cách lấy milisecond trong Java Cách lấy nanosecond trong Java Cách hiển thị ngày giờ trong hệ thống Các bạn hãy xem thêm video để…

Bình luận ()