Thursday, January 27, 2011

File operations

Share Orkut
print macro msg lea dx,msg mov ah,09h int 21h endm readfilename macro msg1,j1,l1 mov si,offset msg1 l1: mov ah,01 int 21h cmp al,0dh je j1 mov [si],al inc si jmp l1 j1: mov al,00 mov [si],al endm .model small .stack 100h .data menu db 10,13,'MENU',10,13,'1.Create ',
              10,13,'2.Display ',10,13,'3.Copy',10,13,'4.Move'
              ,10,13,'5.Delete',10,13,'6.Exit$' str1 db 10,13,'Enter ur choice: $' str2 db 10,13,'Enter filename $' msg1 db 10,13,'Enter data $' filename1 db 30 dup(0) filename2 db 30 dup(0) handle1 dw ? handle2 dw ? handle3 dw ? handle4 dw ? errr db 10,13,'Errror $' succ db 10,13,'Success$' invalid db 10,13,'Invalid Entry $' newline db 10,13,'$' file1 db 100 dup('$') errflag dw 0 .code main proc mov ax,@data mov ds,ax loop1: print menu print str1 mov ah,01h int 21h cmp al,31h jne case2 print str2 readfilename filename1,loop2,jump1 call clearall mov dx, offset filename1 call createfile jc err12 call fileopen jc err12 mov handle1, ax call readstring mov cx,ax mov bx,handle1 lea dx,file1 mov ah,40h int 21h jc err12 mov bx, handle1 call closefile print succ jmp loop1 err12: mov errflag,01 mov al,00 case2: cmp al,32h jne case3 ;read filename print str2 readfilename filename1,loop3,jump2 call clearall ;open file mov dx, offset filename1 call fileopen jc err12 mov handle1, ax mov bx,handle1 call readfile cmp errflag,1 je err12 mov bx, handle1 call closefile print succ up1: jmp loop1 case3: cmp al,33h jne case44 ;read filename print str2 readfilename filename1,loop4,jump3 call clearall ;open file mov dx, offset filename1 call fileopen jc err13 mov handle1, ax ;read filename print str2 readfilename filename2,loop5,jump4 ;truncate mov dx, offset filename2 call createfile jc err13 ;open file mov dx, offset filename2 call fileopen jc err13 mov handle2, ax call copyfile cmp errflag,1 je err13 mov bx, handle1 call closefile mov bx,handle2 call closefile print succ up2: jmp up1 case44: jmp case4 err13: mov errflag,01 mov al,00 case4: cmp al,34h jne case5 call clearall mov ax,ds mov es,ax ;read filename print str2 readfilename filename1,loop6,jump5 ;read filename print str2 readfilename filename2,loop7,jump6 mov ah,56h lea dx,filename1 lea di,filename2 int 21h jc error1 print succ jmp up2 case5: cmp al,35h jne case6 call clearall ;read filename print str2 readfilename filename1,loop8,jump7 lea dx,filename1 mov ah,41h int 21h jc error1 print succ jmp up2 case6: cmp al,36h je stop cmp errflag,01 je error1 print invalid jmp up2 error1: print errr mov errflag,00 jmp up2 stop: mov ah,4ch int 21h main endp readstring proc print msg1 mov dx,offset file1 mov bx,00h mov ah,3fh int 21h sub ax,02h ret readstring endp createfile proc mov cx, 0 mov ah, 3ch int 21h ret createfile endp fileopen proc mov al, 2 mov ah, 3dh int 21h ret fileopen endp readfile proc print newline repet: mov ah, 3fh lea dx, file1 mov cx, 100 int 21h jc errrr; if error mov si, ax mov file1[si], '$' mov ah, 09h int 21h ;print on screen cmp si, 100 je repet jmp jump22 errrr: mov errflag,1 jump22: ret readfile endp closefile proc mov ah, 3eh ;close file int 21h ret closefile endp copyfile proc mov bx,handle1 mov handle3,bx mov bx,handle2 mov handle4,bx repet1: mov bx,handle3 mov ah, 3fh lea dx, file1 mov cx, 100 int 21h jc errr1; if error mov handle3,bx mov si, ax mov cx,ax mov bx,handle4 lea dx,file1 mov ah,40h int 21h jc errr1 mov handle4,bx cmp si, 100 je repet1 jmp jump23 errr1: mov errflag,1 jump23: ret copyfile endp clearall proc xor ax,ax xor bx,bx xor cx,cx xor dx,dx ret clearall endp end

Sunday, January 23, 2011

Display current date and time

Share Orkut
        print macro msg         lea dx,msg         mov ah,09h         int 21h     endm     .model small     .stack 100h     .data         msg1 db 10,13,'DATE(DD/MM/YYYY): $'         msg2 db '/$'         msg3 db 10,13,'TIME: $'         msg4 db ':$'         day db 0         month db 0         year dw 0         sec db 0         min db 0         hour db 0     .code     main proc         mov ax,@data         mov ds,ax         mov ah,2ah         int 21h         mov day,dl         mov month,dh         mov year,cx         ; AL = day of week(00h=Sunday)         print msg1         xor ax,ax         mov al,day         call printmul         print msg2         xor ax,ax         mov al,month         call printmul         print msg2         mov ax,year         call printmul         mov ah,2ch         int 21h         mov sec,dh         mov min,cl         mov hour,ch         ;DL = 1/100 seconds         print msg3         xor ax,ax         mov al,hour         call printmul         print msg4         xor ax,ax         mov al,min         call printmul         print msg4         xor ax,ax         mov al,sec         call printmul         mov ah,4ch         int 21h     main endp     printmul proc         mov bx,000ah         xor cx,cx         ;push into stack     l2:xor dx,dx         div bx         push dx         inc cx         cmp ax,0000h         jne l2         ;pop from stack     l3:pop dx         add dl,30h         mov ah,02h         int 21h         loop l3         ret     printmul endp     end

Draw a Circle(Midpoint Algorithm)

Share Orkut
        print macro msg         lea dx,msg         mov ah,09h         int 21h     endm     read macro n,j1,j2         mov cx,0ah     j1:mov ah,01h         int 21h         cmp al,0dh         je j2         sub al,30h         mov bl,al         mov ax,n         mul cx         xor bh,bh         add ax,bx         mov n,ax         jmp j1     j2 :nop     endm     .model small     .stack 100h     .data         f db 0         n db 0         msg1 db 10,13,'Enter the center $'         msg2 db 10,13,'X cordinate: $'         msg3 db 10,13,'y cordinate: $'         msg4 db 10,13,'Enter the radius: $'         xc dw 0         yc dw 0         x dw 0         y dw 0         p dw 0         r dw 0     .code     main proc         mov ax,@data         mov ds,ax         ;read center(x,y)         print msg1         print msg2         read xc,ju1,ju2         print msg3         read yc,ju3,ju4         print msg4         read r,ju,ju6         ;selecting screen         mov ah,00         int 10h         ;select mode 12         mov al,12h         int 10h         ;plot the center         mov ah,0ch         mov al,05         mov cx,xc         mov dx,yc         int 10h         ;draw circle(midpoint algorithm)         ;y=r         mov ax,r         mov y,ax         ;plot initial point         call plot         ;p=1-r         mov ax,01         mov dx,r         xor dx,0ffffh         inc dx         add ax,dx         mov p,ax         ;while(x<y)     loop1: mov ax,x         cmp ax,y         jnc jump1         ;x++         inc x         ;if(p<0)         mov ax,p         rcl ax,01         jnc jump2         ;p+=2*x+1         mov ax,x         rcl ax,01         inc ax         add ax,p         jmp jump3         ;else         ;y++         ;p+=2*(x-y)+1;     jump2: dec y         mov ax,x         mov dx,y         xor dx,0ffffh         inc dx         add ax,dx         rcl ax,01         jnc jump4         or ax,8000h     jump4: inc ax         add ax,p     jump3: mov p,ax         ;plot point         call plot         jmp loop1     jump1: mov ah,00         int 16h         mov ax,0003         int 10h         stop:mov ah,4ch         int 21h     main endp     plot proc     mov ah,0ch         mov al,02         mov cx,xc         add cx,x         mov dx,yc         add dx,y         int 10h         mov cx,xc         add cx,x         mov dx,yc         sub dx,y         int 10h         mov cx,xc         sub cx,x         mov dx,yc         add dx,y         int 10h         mov cx,xc         sub cx,x         mov dx,yc         sub dx,y         int 10h         mov cx,xc         add cx,y         mov dx,yc         add dx,x         int 10h         mov cx,xc         add cx,y         mov dx,yc         sub dx,x         int 10h         mov cx,xc         sub cx,y         mov dx,yc         add dx,x         int 10h         mov cx,xc         sub cx,y         mov dx,yc         sub dx,x         int 10h         ret     plot endp     end

Sunday, January 9, 2011

Sort An Array Of numbers(Selection Sort)

Share Orkut
        print macro msg         lea dx,msg         mov ah,09h         int 21h     endm     read macro n,j1,j2     j1:mov ah,01h         int 21h         cmp al,0dh         je j2         sub al,30h         mov bl,al         mov ax,n         mov dx,0ah         mul dx         xor bh,bh         add ax,bx         mov n,ax         jmp j1     j2 :nop     endm     printmul macro n1,l2,l3         mov bx,000ah         mov ax,n1         xor cx,cx         ;push into stack     l2:xor dx,dx         div bx         push dx         inc cx         cmp ax,0000h         jne l2         ;pop from stack     l3:pop dx         add dl,30h         mov ah,02h         int 21h         loop l3     endm     .model small     .stack 100h     .data         msg1 db 10,13,'Enter a number: $'         msg2 db 10,13,' Sorted Array $'         msg3 db 10,13,' $'         msg4 db 10,13,'Enter the size of array: $'         msg5 db 10,13,' Orginal Array $'         n dw 0         num dw 100 dup(0)         sml dw 0     .code     main proc         mov ax,@data         mov ds,ax         print msg4         read n,jump1,jump2         ;read n elements         mov cx,n         mov si,00h     loop1:print msg1         ;read a multidigit number         read num[si],jump3,jump4         add si,02         loop loop1         ;printing unsorted array         print msg5         call display         ;Selection Sort         mov dx,n         dec dx         mov si,00h     loopout:mov cx,dx         mov di,si         ;assign 1st element as smallest         mov ax,num[di]         mov sml,ax         mov bx,di         ;compare smallest with other elements     loop2:add di,02         mov ax,num[di]         cmp sml,ax         jc notlarg         mov sml,ax         mov bx,di     notlarg:loop loop2         ;swap smallest and 1st element         mov ax,num[si]         mov di,bx         mov num[di],ax         mov bx,sml         mov num[si],bx         add si,02h         dec dx         jnz loopout         ;printing sorted array         print msg2         call display         mov ah,4ch         int 21h     main endp     display proc         mov cx,n         mov si,00h     l4: push cx         print msg3         printmul num[si],l5,l6         add si,02h         pop cx         loop l4         ret     display endp     end