luisnaxxario 0 Newbie Poster

;I wrote this program that will display a calendar for 3 months.I try to run it with NASM and TASM but i keep getting errors . Can somebody run it and tell me what to do . thanks

.MODEL small
.386
.STACK
.DATA
inBuffer DB 80 DUP(?)
scrBuffer DW 25*80 DUP(?)
.CODE

MAIN PROC 
    mov ax, @DATA
    mov ds, ax

    ;video
    mov ax, 0300h


    int 10h

    ;new
    sub ax, ax
    mov ah, 3h
    mov bh, 0
    int 10h

    mov ax, 0B800h
    mov es, ax



    call savescreen   ; saves screen before continuing      


;********************* Draw screen for Each Month*********************
; Draw Screen for November
Case1: call drawscreen
        mov ah, 00h
        call October
        call hidecursor     
        mov dl, 0
        mov bx, 3848
        mov si, 0

Case2:  mov ah, 10h ;Keyboard Input
        int 16h         ;Using BIOS
        cmp al, 0Dh ; Enter
        je Case3
        cmp al, 1bh ;Esc
        je Exit         
        jmp Case2

; Draw screen for December      
Case3:call drawscreen
        mov ah, 160
        call November
        mov bx, 3848
        mov si, 0

Case4:mov ah, 10h
        int 16h
        cmp al, 0Dh
        je Case5
        cmp al, 8h
        je Case1
        cmp al, 1bh
        je Exit
        jmp Case4

; Draw screen for january
Case5:  call drawscreen
        mov ah, 50h
        call December
        mov bx, 3848
        mov si, 0

Case6:  mov ah, 10h
        int 16h
        cmp al, 8h 
        je Case3
        cmp al, 1bh
        je Exit
        jmp Case6

Exit:   call restorescreen  

    sub ax, ax
    mov ah, 02h
    mov bx, 0
    int 10h 

    mov ax, 4c00h   
    int 21h

MAIN ENDP


Menu PROC

    push ax
    push bx
    push cx
    push dx

    mov bx, 3200+8    ; quit
    mov byte ptr es:[bx+60],  'E'
    mov byte ptr es:[bx+62],  'S'
    mov byte ptr es:[bx+64],  'C'
    mov byte ptr es:[bx+78],  ' '
    mov byte ptr es:[bx+80],  '-'
    mov byte ptr es:[bx+82],  ' '
    mov byte ptr es:[bx+84],  'Q'
    mov byte ptr es:[bx+86],  'U'
    mov byte ptr es:[bx+88],  'I'
    mov byte ptr es:[bx+90],  'T'
    mov bx, 3360+8    ; next
    mov byte ptr es:[bx+60],  'E'
    mov byte ptr es:[bx+62],  'N'
    mov byte ptr es:[bx+64],  'T'
    mov byte ptr es:[bx+66],  'E'
    mov byte ptr es:[bx+68],  'R'
    mov byte ptr es:[bx+78],  ' '
    mov byte ptr es:[bx+80],  '-'
    mov byte ptr es:[bx+82],  ' '
    mov byte ptr es:[bx+84],  'N'
    mov byte ptr es:[bx+86],  'E'
    mov byte ptr es:[bx+88],  'X'
    mov byte ptr es:[bx+90],  'T'
    mov bx, 3520+8    ; back
    mov byte ptr es:[bx+60],  'B'
    mov byte ptr es:[bx+62],  'A'
    mov byte ptr es:[bx+64],  'C'
    mov byte ptr es:[bx+66],  'K'
    mov byte ptr es:[bx+68],  'S'
    mov byte ptr es:[bx+70],  'P'
    mov byte ptr es:[bx+72],  'A'
    mov byte ptr es:[bx+74],  'C'
    mov byte ptr es:[bx+76],  'E'
    mov byte ptr es:[bx+78],  ' '
    mov byte ptr es:[bx+80],  '-'
    mov byte ptr es:[bx+82],  ' '
    mov byte ptr es:[bx+84],  'B'
    mov byte ptr es:[bx+86],  'A'
    mov byte ptr es:[bx+88],  'C'
    mov byte ptr es:[bx+90],  'K'

    pop dx
    pop cx
    pop bx
    pop ax

    ret

Menu ENDP


October PROC

    push ax
    push bx
    push cx
    push dx

    mov bx, 392
    mov byte ptr es:[bx+2],  'O'
    mov byte ptr es:[bx+4],  'C'
    mov byte ptr es:[bx+6],  'T'
    mov byte ptr es:[bx+8],  'O'
    mov byte ptr es:[bx+10], 'B'
    mov byte ptr es:[bx+12], 'E'
    mov byte ptr es:[bx+14], 'R'
    mov byte ptr es:[bx+16], '2'
    mov byte ptr es:[bx+20], '0'
    mov byte ptr es:[bx+22], '1'
    mov byte ptr es:[bx+24], '2'

    mov bx, 692
    mov byte ptr es:[bx+2], 'S'
    mov byte ptr es:[bx+4], 'U'
    mov byte ptr es:[bx+6], 'N'

    mov bx, 702
    mov byte ptr es:[bx+2], 'M'
    mov byte ptr es:[bx+4], 'O'
    mov byte ptr es:[bx+6], 'N'

    mov bx, 712
    mov byte ptr es:[bx+2], 'T'
    mov byte ptr es:[bx+4], 'U'
    mov byte ptr es:[bx+6], 'E'

    mov bx, 722
    mov byte ptr es:[bx+2], 'W'
    mov byte ptr es:[bx+4], 'E'
    mov byte ptr es:[bx+6], 'D'

    mov bx, 732
    mov byte ptr es:[bx+2], 'T'
    mov byte ptr es:[bx+4], 'H'
    mov byte ptr es:[bx+6], 'U'

    mov bx, 742
    mov byte ptr es:[bx+2], 'F'
    mov byte ptr es:[bx+4], 'R'
    mov byte ptr es:[bx+6], 'I'

    mov bx, 752
    mov byte ptr es:[bx+2], 'S'
    mov byte ptr es:[bx+4], 'A'
    mov byte ptr es:[bx+6], 'T'

    mov bx, 984   ;1042
    mov byte ptr es:[bx+42], '1'
    mov byte ptr es:[bx+52], '2'
    mov byte ptr es:[bx+62], '3'
    mov byte ptr es:[bx+72], '4'
    mov byte ptr es:[bx+82], '5'
    mov byte ptr es:[bx+92], '6'
    mov byte ptr es:[bx+352], '7'
    mov byte ptr es:[bx+362], '8'
    mov byte ptr es:[bx+372], '9'
    mov byte ptr es:[bx+380], '1'
    mov byte ptr es:[bx+382], '0'
    mov byte ptr es:[bx+390], '1'
    mov byte ptr es:[bx+392], '1'
    mov byte ptr es:[bx+400], '1'
    mov byte ptr es:[bx+402], '2'
    mov byte ptr es:[bx+410], '1'
    mov byte ptr es:[bx+412], '3'

    mov byte ptr es:[bx+670], '1'
    mov byte ptr es:[bx+672], '4'
    mov byte ptr es:[bx+680], '1'
    mov byte ptr es:[bx+682], '5'
    mov byte ptr es:[bx+690], '1'
    mov byte ptr es:[bx+692], '6'
    mov byte ptr es:[bx+700], '1'
    mov byte ptr es:[bx+702], '7'
    mov byte ptr es:[bx+710], '1'
    mov byte ptr es:[bx+712], '8'
    mov byte ptr es:[bx+720], '1'
    mov byte ptr es:[bx+722], '9'
    mov byte ptr es:[bx+730], '2'
    mov byte ptr es:[bx+732], '0'

    mov byte ptr es:[bx+990], '2'
    mov byte ptr es:[bx+992], '1'
    mov byte ptr es:[bx+1000], '2'
    mov byte ptr es:[bx+1002], '2'
    mov byte ptr es:[bx+1010], '2'
    mov byte ptr es:[bx+1012], '3'
    mov byte ptr es:[bx+1020], '2'
    mov byte ptr es:[bx+1022], '4'
    mov byte ptr es:[bx+1030], '2'
    mov byte ptr es:[bx+1032], '5'
    mov byte ptr es:[bx+1040], '2'
    mov byte ptr es:[bx+1042], '6'
    mov byte ptr es:[bx+1050], '2'
    mov byte ptr es:[bx+1052], '7'

    mov bx, 2294
    mov byte ptr es:[bx], '2'
    mov byte ptr es:[bx+2], '8'
    mov byte ptr es:[bx+10], '2'
    mov byte ptr es:[bx+12], '9'
    mov byte ptr es:[bx+20], '3'
    mov byte ptr es:[bx+22], '0'
    mov byte ptr es:[bx+24], '3'
    mov byte ptr es:[bx+26], '1'


    pop dx
    pop cx
    pop bx
    pop ax

    ret

October ENDP

November PROC

    push ax
    push bx
    push cx
    push dx

    mov bx, 392
    mov byte ptr es:[bx+2], 'N'
    mov byte ptr es:[bx+4], 'O'
    mov byte ptr es:[bx+6], 'V'
    mov byte ptr es:[bx+8], 'E'
    mov byte ptr es:[bx+10], 'M'
    mov byte ptr es:[bx+12], 'B'
    mov byte ptr es:[bx+14], 'E'
    mov byte ptr es:[bx+16], 'R'
    mov byte ptr es:[bx+20], '2'
    mov byte ptr es:[bx+22], '0'
    mov byte ptr es:[bx+24], '1'
    mov byte ptr es:[bx+26], '2'

    mov bx, 692
    mov byte ptr es:[bx+2], 'S'
    mov byte ptr es:[bx+4], 'U'
    mov byte ptr es:[bx+6], 'N'

    mov bx, 702
    mov byte ptr es:[bx+2], 'M'
    mov byte ptr es:[bx+4], 'O'
    mov byte ptr es:[bx+6], 'N'

    mov bx, 712
    mov byte ptr es:[bx+2], 'T'
    mov byte ptr es:[bx+4], 'U'
    mov byte ptr es:[bx+6], 'E'

    mov bx, 722
    mov byte ptr es:[bx+2], 'W'
    mov byte ptr es:[bx+4], 'E'
    mov byte ptr es:[bx+6], 'D'

    mov bx, 732
    mov byte ptr es:[bx+2], 'T'
    mov byte ptr es:[bx+4], 'H'
    mov byte ptr es:[bx+6], 'U'

    mov bx, 742
    mov byte ptr es:[bx+2], 'F'
    mov byte ptr es:[bx+4], 'R'
    mov byte ptr es:[bx+6], 'I'

    mov bx, 752
    mov byte ptr es:[bx+2], 'S'
    mov byte ptr es:[bx+4], 'A'
    mov byte ptr es:[bx+6], 'T'

    mov bx, 1024
    mov byte ptr es:[bx+22], '1'
    mov byte ptr es:[bx+32], '2'
    mov byte ptr es:[bx+42], '3'
    mov byte ptr es:[bx+52], '4'

    mov byte ptr es:[bx+312], '5'
    mov byte ptr es:[bx+322], '6'
    mov byte ptr es:[bx+332], '7'
    mov byte ptr es:[bx+342], '8'
    mov byte ptr es:[bx+352], '9'
    mov byte ptr es:[bx+360], '1'
    mov byte ptr es:[bx+362], '0'
    mov byte ptr es:[bx+370], '1'
    mov byte ptr es:[bx+372], '1'

    mov byte ptr es:[bx+630], '1'
    mov byte ptr es:[bx+632], '2'
    mov byte ptr es:[bx+640], '1'
    mov byte ptr es:[bx+642], '3'
    mov byte ptr es:[bx+650], '1'
    mov byte ptr es:[bx+652], '4'
    mov byte ptr es:[bx+660], '1'
    mov byte ptr es:[bx+662], '5'
    mov byte ptr es:[bx+670], '1'
    mov byte ptr es:[bx+672], '6'
    mov byte ptr es:[bx+680], '1'
    mov byte ptr es:[bx+682], '7'
    mov byte ptr es:[bx+690], '1'
    mov byte ptr es:[bx+692], '8'

    mov byte ptr es:[bx+950], '1'
    mov byte ptr es:[bx+952], '9'
    mov byte ptr es:[bx+960], '2'
    mov byte ptr es:[bx+962], '0'
    mov byte ptr es:[bx+970], '2'
    mov byte ptr es:[bx+972], '1'
    mov byte ptr es:[bx+980], '2'
    mov byte ptr es:[bx+982], '2'
    mov byte ptr es:[bx+990], '2'
    mov byte ptr es:[bx+992], '3'
    mov byte ptr es:[bx+1000], '2'
    mov byte ptr es:[bx+1002], '4'
    mov byte ptr es:[bx+1010], '2'
    mov byte ptr es:[bx+1012], '5'

    mov byte ptr es:[bx+1270], '2'
    mov byte ptr es:[bx+1272], '6'
    mov byte ptr es:[bx+1280], '2'
    mov byte ptr es:[bx+1282], '7'
    mov byte ptr es:[bx+1290], '2'
    mov byte ptr es:[bx+1292], '8'
    mov byte ptr es:[bx+1300], '2'
    mov byte ptr es:[bx+1302], '9'
    mov byte ptr es:[bx+1310], '3'
    mov byte ptr es:[bx+1312], '0'


    pop dx
    pop cx
    pop bx
    pop ax

    ret

    November ENDP


    December PROC
    push ax
    push bx
    push cx
    push dx

    mov bx, 392
    mov byte ptr es:[bx+2], 'D'
    mov byte ptr es:[bx+4], 'E'
    mov byte ptr es:[bx+6], 'C'
    mov byte ptr es:[bx+8], 'E'
    mov byte ptr es:[bx+10], 'M'
    mov byte ptr es:[bx+12], 'B'
    mov byte ptr es:[bx+14], 'E'
    mov byte ptr es:[bx+18], 'R'
    mov byte ptr es:[bx+20], '2'
    mov byte ptr es:[bx+22], '0'
    mov byte ptr es:[bx+24], '1'
    mov byte ptr es:[bx+26], '2'


    mov bx, 640+52
    mov byte ptr es:[bx+2], 'S'
    mov byte ptr es:[bx+4], 'U'
    mov byte ptr es:[bx+6], 'N'
    mov bx, 702
    mov byte ptr es:[bx+2], 'M'
    mov byte ptr es:[bx+4], 'O'
    mov byte ptr es:[bx+6], 'N'
    mov bx, 712
    mov byte ptr es:[bx+2], 'T'
    mov byte ptr es:[bx+4], 'U'
    mov byte ptr es:[bx+6], 'E'
    mov bx, 722
    mov byte ptr es:[bx+2], 'W'
    mov byte ptr es:[bx+4], 'E'
    mov byte ptr es:[bx+6], 'D'
    mov bx, 732
    mov byte ptr es:[bx+2], 'T'
    mov byte ptr es:[bx+4], 'H'
    mov byte ptr es:[bx+6], 'U'
    mov bx, 742
    mov byte ptr es:[bx+2], 'F'
    mov byte ptr es:[bx+4], 'R'
    mov byte ptr es:[bx+6], 'I'
    mov bx, 752
    mov byte ptr es:[bx+2], 'S'
    mov byte ptr es:[bx+4], 'A'
    mov byte ptr es:[bx+6], 'T'

    mov bx, 1042
    mov byte ptr es:[bx+34], '1'

    mov byte ptr es:[bx+294], '2'
    mov byte ptr es:[bx+304], '3'
    mov byte ptr es:[bx+314], '4'
    mov byte ptr es:[bx+324], '5'
    mov byte ptr es:[bx+334], '6'
    mov byte ptr es:[bx+344], '7'
    mov byte ptr es:[bx+354], '8'

    mov byte ptr es:[bx+614], '9'
    mov byte ptr es:[bx+622], '1'
    mov byte ptr es:[bx+624], '0'
    mov byte ptr es:[bx+632], '1'
    mov byte ptr es:[bx+634], '1'
    mov byte ptr es:[bx+642], '1'
    mov byte ptr es:[bx+644], '2'
    mov byte ptr es:[bx+652], '1'
    mov byte ptr es:[bx+654], '3'
    mov byte ptr es:[bx+662], '1'
    mov byte ptr es:[bx+664], '4'
    mov byte ptr es:[bx+672], '1'
    mov byte ptr es:[bx+674], '5'

    mov byte ptr es:[bx+932], '1'
    mov byte ptr es:[bx+934], '6'
    mov byte ptr es:[bx+942], '1'
    mov byte ptr es:[bx+944], '7'
    mov byte ptr es:[bx+952], '1'
    mov byte ptr es:[bx+954], '8'
    mov byte ptr es:[bx+962], '1'
    mov byte ptr es:[bx+964], '9'
    mov byte ptr es:[bx+972], '2'
    mov byte ptr es:[bx+974], '0'
    mov byte ptr es:[bx+982], '2'
    mov byte ptr es:[bx+984], '1'
    mov byte ptr es:[bx+992], '2'
    mov byte ptr es:[bx+994], '2'

    mov bx, 2294
    mov byte ptr es:[bx], '2'
    mov byte ptr es:[bx+2], '3'
    mov byte ptr es:[bx+10], '2'
    mov byte ptr es:[bx+12], '4'
    mov byte ptr es:[bx+20], '2'
    mov byte ptr es:[bx+22], '5'
    mov byte ptr es:[bx+30], '2'
    mov byte ptr es:[bx+32], '6'
    mov byte ptr es:[bx+40], '2'
    mov byte ptr es:[bx+42], '7'
    mov byte ptr es:[bx+50], '2'
    mov byte ptr es:[bx+52], '8'
    mov byte ptr es:[bx+60], '2'
    mov byte ptr es:[bx+62], '9'

    mov byte ptr es:[bx+320], '3'
    mov byte ptr es:[bx+322], '0'
    mov byte ptr es:[bx+330], '3'
    mov byte ptr es:[bx+332], '1'

    pop dx
    pop cx
    pop bx
    pop ax

    ret

December ENDP

;*********************************Draw borders **************
drawscreen PROC

    call clearscreen
    call Menu
    push ax
    push bx
    push cx
    push dx

    ; ******************Menu   corners *****************
    mov word ptr es:[3040+62], 04dch; upper left
    mov word ptr es:[3040+104], 04dch; upper right
    mov word ptr es:[3680+62], 04dbh; lower left 
    mov word ptr es:[3680+104], 04dbh; lower right 

    ; ******************Calendar   corners *************
    mov word ptr es:[40], 04dch; upper left
    mov word ptr es:[130], 04dch;upper right
    mov word ptr es:[80*34+40], 04dbh; lower left 
    mov word ptr es:[80*36-30], 04dbh; lower right 
;upper border*********************************  
    mov cx, 44; size 
    mov bx, 42; location  
UP: mov word ptr es:[bx],04dch
    add bx, 2
    loop UP
;****menu upper border  
    mov bx, 3040+64; location  
    mov cx, 20; size
A:  mov word ptr es:[bx],04dch; 
    add bx, 2
    loop A
; left border********************************   
    mov bx, 200 ;  location 
    mov cx, 16 ; size
LB: mov word ptr es:[bx], 04dbh
    add bx, 160
    loop LB
; ****menu left border
    mov bx, 3200+62 ;  location 
    mov cx, 3 ; size
B:  mov word ptr es:[bx], 04dbh 
    add bx, 160
    loop B  
; right border********************************  
    mov bx, 290 ; move location 
    mov cx, 16
RB:mov word ptr es:[bx], 04dbh
    add bx, 160
    loop RB
; ****menu right border 
    mov bx, 3200+104 ; move location 
    mov cx, 3
D  :mov word ptr es:[bx], 04dbh
    add bx, 160
    loop D
; lower border***********************************
    mov cx, 44 ; size 
    mov bx, 80*34+42 ; location 
LBB:    mov word ptr es:[bx],04dch
    add bx, 2
    loop LBB
; ****menu lower border 
    mov bx, 3680+64 ; location 
    mov cx, 20 ; size 
F : mov word ptr es:[bx],04dch
    add bx, 2
    loop F

    pop dx
    pop cx
    pop bx
    pop ax  
    ret

drawscreen ENDP

;**********************SaveScreen*****************************
savescreen PROC
    mov ax, 0b800h
    mov es, ax
    mov cx, 25*80
    xor bx, bx
  t:mov ax,es:[bx]
    mov scrBuffer[bx],ax
    inc bx
    inc bx
    loop t
    ret
savescreen ENDP

;*********************ClearScreen************************
clearscreen PROC
    push ax
    push bx
    push cx
    push dx

    mov ax, 0B800h
    mov cx, 25*80
    mov bx,0; 1-dark blue 2- green 3- light blue  4- red  7 white
    mov ax, 0720h       ;BACKGROUND COLOR  |  CHARACTERS COLOR   |  
  L:mov es:[bx], ax
    add bx, 2
    loop L

    pop dx
    pop cx
    pop bx
    pop ax      
    ret
clearscreen ENDP

;*************************Restore Screen************************
restorescreen PROC
    mov ax,3h
    int 10h
    mov ax,0b800h
    mov es,ax
    mov cx,20*80
    xor bx,bx
    mov ax,0
  srcrst:
    mov ax, scrBuffer[bx]
    mov es:[bx],ax
    add bx,2
    loop srcrst
    ret
restorescreen ENDP

;**************************Hide Cursor************************
hidecursor PROC
    push ax
    push bx
    push cx
    push dx

    mov ah, 3
    int 10h
    or ch, 30h
    mov ah, 1
    int 10h

    pop dx
    pop cx
    pop bx
    pop ax  

    ret
hidecursor ENDP


END MAIN