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 17: Cấu trúc vòng lặp Do-While

[Java cơ bản] Bài 17: Cấu trúc vòng lặp Do-While

Cấu trúc lệnh do while tương tự cấu trúc lệnh while. Khác nhau là do while dù biểu thức điều kiện sai nó vẫn thực hiện vòng lặp ít nhất một lần, còn while nếu biểu thức điều kiện sai thì nó sẽ không làm…

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

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

Video ngày hôm nay của chúng tôi sẽ nói về Thread trong Java, vì nội dung dài nên sẽ chia làm 2 phần. Các bạn hãy theo dõi để nắm được kiến thức tốt nhất!

[Java cơ bản] Bài 24: Interface

[Java cơ bản] Bài 24: Interface

Video clip này sẽ giới thiệu tới các bạn về Interface trong lập trình Java. Chúc các bạn học tốt.

[Java cơ bản] Bài 21: Class, Abstract Class và Interface

[Java cơ bản] Bài 21: Class, Abstract Class và Interface

Giới thiệu về Class, Abstract Class và Interface trong Java. Các bạn hãy xem video, nếu có thắc mắc gì hãy để lại bình luận nhé, chúc các bạn học tập tốt.

Bình luận ()