Hiển thị các bài đăng có nhãn Vi xu ly 8086. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Vi xu ly 8086. Hiển thị tất cả bài đăng

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

code ASM mẫu cho 8086 - Đọc từ bàn phím một số nhị phân


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


Mã nguồn ASM:


.model small
.stack 100
.data
    TBao DB 'Go vao 1 so he 2 (max 16 bit,'
         DB 'CR de thoi):$'
.code
MAIN Proc
    mov ax,@data
    mov ds,ax
 
    mov ah,9
    lea dx,TBao
    int 21h
 
    mov cx,16
    xor bx,bx   ;xoa bx=0
    mov ah,1    ;nhap 1 ky tu tu ban phim
TIEP:
    int 21h     ;Nhap vao thanh ghi AL.
    cmp al,13
    je THOIDOC  ;AL=enter thi THOIDOC
    sub al,30h  ;-30h chuyen qua he 2.
    rol bx,1    ;quay trai 1 bit de lay cho DOC tiep
    or bl,al    ;cong bit vua doc dc: al->bl
    LOOP TIEP
THOIDOC:
    mov ah,2
    mov dl,13   ;ve dau dong
    int 21h
    mov ah,2
    mov dl,10   ;enter
    int 21h
 
    mov cx,16   ;lap lai 16 lan in ra
    mov ah,2
HIEN:
    xor dl,dl   ;xoa dl=0
    rol bx,1    ;quay trai 1 bit, bit cao nhat dc dua vao CF

    adc dl,30h  ;cong co nho voi CF: dl=dl+30h+CF,chuyen qua ASCII
    int 21h
    LOOP HIEN
 
    mov ah,4ch
    int 21h
MAIN endp
end MAIN
Chi Tiết...

code ASM mẫu cho 8086 - Tính tổng 2 số thập phân 4 chữ số


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


Mã nguồn ASM:


;=================================================================
;Bai 2: TINH TONG 2 SO THAP PHAN CO 4 CHU SO
;VAN DE O CHO: PHAI NHAP VAO 2 SO O DANG MA ASCII TREN BAN PHIM,
;DE TINH TOAN DUOC TA PHAI CHUYEN SANG MA NHI PHAN.
;BANG CACH: DUNG 1CTC NHAPSO
;SAU KHI CO 2 SO DANG NHI PHAN THI OK. TUONG TU BAI 1.
;=================================================================
.model small
.stack 100
.data
    tong db 5 dup(0),'$' ;Chu y: tong o dau tien
    tb1 db 'nhap so thu nhat: $'
    tb2 db 13,10,'nhap so thu hai:  $'
    tb3 db 13,10,'tong hai so la: $'
    so1 dw 0
    so2 dw 0
.code
main proc
     mov ax,@data
     mov ds,ax
   
     mov ah,9
     lea dx,tb1
     int 21h        ;goi loi thong bao nhap
     call nhapso
     mov so1,bx
   
     mov ah,9
     lea dx,tb2
     int 21h
     call nhapso
     mov so2,bx
   
     mov ax,so1  
     add ax,so2     ;dung ax chua tong 2 so

     lea si,tong    ;si tro vao dia chi lech cua 'tong'
     add si,4
     mov cx,5       ;lap lai 5 lan chia,chuyen so sang chuoi: 'tong': tong 2 so 4 chu so co the la 5 chu so.
tach:
     mov dx,0       ;o lenh DIV BX: goc BX la 16bit=>DXAX/BX<=>AX/BX
     mov bx,10
     div bx         ;DXAX/BX: AX<-thuong , DX<-so du
     add dx,30h     ;doi ra ma ASCII
     mov [si],dl    ;dl -> thanh ghi tong
     dec si         ;si<- si-1
     loop tach
   
     mov ah,9       ;in ra thong bao va 'tong'
     lea dx,tb3
     int 21h
   
     lea dx,tong
     int 21h
         
     mov ah,4ch
     int 21h
main endp
;HAM NHAP**********************************
nhapso proc
       mov bx,0     ;chua so nhap vao
       mov cx,4     ;lap lai 4 lan luu 4 chu so
TIEP:
;nhap AX
       mov ah,1
       int 21h      ;doc 1 ky tu vao AL: (0->9)
       cmp al,13
       je thoat     ;neu = enter thi thoat.
;Cat AX->SP    
       sub al,30h   ;chuyen qua he 2
       push ax      ;cat ax -> {SP} ngan xep
;Nhan 10*BX      
       mov ax,bx    ;chuyen BX->AX de nhan 10 len
       mov si,10    ;nap 10 vao thanh ghi SI 16Bit
       mul si       ;AX*SI: DXAX<-tich. (KQ <=90 =>tich->AX)
;BX=AX+10*BX    
       mov bx,ax    ;AX=BX*10->BX
       pop ax       ;lay tu ngan xep {SP} ->ax
       mov ah,0     ;xoa ah=1 o tren
       add bx,ax    ;BX*10+AX->BX
       loop TIEP  
thoat:       ret          ;tro ve CTC tu ctc
nhapso endp
;*******************************************
end main
 
Chi Tiết...

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

Chi Tiết...