Thứ Bảy, 25 tháng 2, 2012

code ASM mẫu cho 8086 - Tính tổng các số từ 5 đến 185...


Chương trình sử dụng trình dịch emu8086.


Mã nguồn ASM:

;=====================================================
;Bai 1: TINH TONG 5->185
;TINH TONG BANG CACH; AX=AX+BX
;TRONG DO: BX: TANG TU 5->185
;          AX: SE CHUA TONG CUA TOAN BO DAY SO
;VAN DE O CHO: TONG SO SE O DANG NHI PHAN,
;MUON IN RA MAN HINH TA PHAI CHUYEN TUNG CHU SO SANG MA ASCII
;=====================================================
.model small
.stack 100
.data
     tong db 6 dup(0),'$'
     tongs db 'tong= $'
.code
main proc
     mov ax,@data ;tro A -> dia chi bat dau cua du lieu
     mov ds,ax    ;tro thanh ghi doan du lieu DS -> A
   
     mov ax,0
     mov bx,0
     lea si,tong  ;Tinh dia chi lech, nap dia chi -> chi so nguon SI.
     add si,5     ;Tang dia chi lech len 4.
tinhtong:
     add ax,bx
     add bx,5
     cmp bx,185
     JNG tinhtong  ;nhay neu <: neu = 190 thi dung.
;CHUYEN QUA MA ASCII
tach:          
     mov dx,0     ;muc dich de cho DXAX=AX
     mov bx,10    ;chia cho 10 de tach hang don vi.
     div bx       ;BX la thanh 16B => DXAX/BX, thuong->AX,du->DX.
     add dl,30h   ;+30H se chuyen sang ma ASCII.
     mov [si],dl  ;chuyen vao ma ASCII ->dia chi lech cua tong.
                  ;[si]: la dia chi cua 1 byte.
     dec si       ;si=si-1
     cmp si,0
     jg tach      ;nhay neu si>0
;IN RA MAN HINH        
     mov ah,9     ;ham in ra chuoi ket thuc = $.
     lea dx,tongs
     int 21h
   
     mov ah,9
     lea dx,tong
     int 21h
       
     mov ah,4ch   ;Ket thuc chuong trinh EXE.
     int 21h
     main endp
end  main

0 nhận xét:

Đăng nhận xét