Bài viết liên quan
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
Bình Luận