;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