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 1: Giới thiệu và cài đặt JDK

[Java cơ bản] Bài 1: Giới thiệu và cài đặt JDK

Dành cho những bạn đang và bắt đầu làm quen với lập trình java 😀 … Video đầu tiên này sẽ hướng dẫn các bạn cách cài đặt và cấu hình JDK. Chúc các bạn học tập vui vẻ!

[Java cơ bản] Bài 20: Hướng đối tượng OOP

[Java cơ bản] Bài 20: Hướng đối tượng OOP

Tóm tắt nội dung: Giới thiệu hướng đối tượng trong Java Nội dung: Trong lập trình hướng đối tượng thì có 3 đặc điểm cơ bản chính sau: – Thừa kế (Inheritance). – Đa hình (Polymorphism). – Đóng gói (Encapsulation). Thừa kế: Cho phép các…

[Java cơ bản] Bài 44: StringBuilder và StringBuffer

[Java cơ bản] Bài 44: StringBuilder và StringBuffer

Video ngày hôm nay chúng ta sẽ được học về StringBuilder và StringBuffer trong lập trình Java. Nếu có thắc mắc các bạn hãy để lại bình luận, cảm ơn các bạn!

Đổi màu chữ và màu nền đơn giản trong C++

Đổi màu chữ và màu nền đơn giản trong C++

Bạn đang thắc mắc làm sao để đổi màu chữ và màu nền trong console của C++? Bài viết này sẽ giới thiệu cho các bạn một cách đơn giản để đổi màu nền và màu chữ… các bạn hãy chép đoạn code phía dưới…

Bình luận ()