In this project I was able to develop a simple OS which have kernel and a Shell by configuring a given simple OS. You can find that preliminary OS  by reading this article,
http://asiri.rathnayake.org/articles/hacking-josh-operating-system-tutorial/
I implemented a new command for my operating system which prints hardware information about the computer.To achieve that functionality after some research work over the internet and experts of this area I found several waysto get hardware information using x86 Assembly language.
They were BIOS interrupt calls, CPUID instruction, BIOS data area, SMBIOS – Collection of tables which can provides you hardware information. In these methods I choose interrupt calls, CPUID instruction to display hardware information of the system.
In my function which I add to existing kernel  it can show Processor Brand, Processor Type, Ram Size, system date and time, check the availability of serial ports, floppy drives, printers, co-processors and mouse. 
Following articles will explain the steps which I took to develop this operating system, It will explain step by step to develop a OS like that.
http://www.insightforfuture.blogspot.com/2010/11/useful-techniques-in-assembly.html
http://www.insightforfuture.blogspot.com/2010/11/x86-assembly-if-else-control-structures.html
http://www.insightforfuture.blogspot.com/2010/11/bios-interrupt-calls-to-get-hardware.html
http://www.insightforfuture.blogspot.com/2010/11/find-hardware-infodo-you-know-how.html
http://www.insightforfuture.blogspot.com/2010/11/smbios-gives-hardware-specifications.html
Next I will Explain the source code of this new functionality,
This is the shell command which is responsible for run the hardware info;
    hwi:                    ;;;;;;;;This is the place hardware info Procedure Starts
    mov SI,strCmd0                
    mov DI,hw                
    call os_string_strincmp            ;check is the entered command is HW_Info
    jc    hardware_info            ;if it is call the hardware info function
    jmp _cmd_ver                ;else go to next shell command
    else:
    jmp _cmd_done ;;;;;;;;;End of the Hardware info call
This is the code where the original functionality lies, These assembly code are responsible to retrieve hardware info by using interrupt calls.
;;;;;;;;;;;;;;Start of Hardware Info;;;;;;;;;;;;;;
hardware_info:
    mov si,ent    
    call    _disp_str    
    mov si,hwinfo
    call    _disp_str    
    mov si,ent    
    call    _disp_str    
;;;;;;;;;;;;Processor Info Display;;;;;;;;;;;;;;;;    
    mov si,pinfo
    call    _disp_str
    mov eax,0
    cpuid
    mov [vendor_id],ebx            ;getting the cpu brand from ebx,ecx,edx
    mov [vendor_id+4],edx
    mov [vendor_id+8],ecx
    mov si,processor
    call    _disp_str
    mov si,vendor_id
    call    _disp_str
    mov si,ent    
    call    _disp_str
    mov si,processort
    call    _disp_str
    mov eax,80000002h
    cpuid
    mov [processor_type],eax        ;getting the cpu type string  brand from ebx,ecx,edx,eax
    mov [processor_type+4],ebx
    mov [processor_type+8],ecx
    mov [processor_type+12],edx
    mov si,processor_type
    call    _disp_str
    mov eax,80000003h
    cpuid
    mov [processor_type1],eax
    mov [processor_type1+4],ebx
    mov [processor_type1+8],ecx
    mov [processor_type1+12],edx
    mov si,processor_type1
    call    _disp_str        
    
    mov eax,80000004h
    cpuid
    mov [processor_type2],eax
    mov [processor_type2+4],ebx
    mov [processor_type2+8],ecx
    mov [processor_type2+12],edx
    mov si,processor_type2
    call    _disp_str
    mov si,ent    
    call    _disp_str
    ;;;;;;;;;;;;;;;RAM Info Display;;;;;;;;;;;;;;;;;;
    mov si,rinfo
    call    _disp_str
    mov si,ram    
    call    _disp_str
    MOV AX, 0xE801
    INT 0x15                ;calling the intruupt to get ram size in 64kb blocks
    call hex2dec
    mov si,ent    
    call    _disp_str
    ;;;;;;;;;;;;;;;Other Info Display;;;;;;;;;;;;;;;;;
    int 11h                ;calling the intruupt to get pheriperal device info
    mov cx,ax
    mov si,oinfo
    call    _disp_str
    ;;;;;;;;;;;;;;Check for Floppy Drive;;;;;;;;;;;;;;
    and ax,1h 
    cmp ax,0h 
    jz ifblock0 
    jmp elseblock0 
    ifblock0:
    mov si, floppyNotPresent
    call    _disp_str
        jmp end0 
    elseblock0:
    mov si, floppyPresent
    call    _disp_str 
    end0:
    mov ax,cx    
    
    ;;;;;;;;;;;;;;Check for Math Co-Processor;;;;;;;;
    and ax,2h 
    cmp ax,0h 
    jz ifblock1 
    jmp elseblock1 
    ifblock1:
    mov si, mathaNotPresent
    call    _disp_str
        jmp end1 
    elseblock1:
    mov si, mathaPresent
    call    _disp_str 
    end1:
    mov ax,cx    
    ;;;;;;;;;;;;;Check for Joystick;;;;;;;;;;;;;;;;;;
    and ax,800h 
    cmp ax,0h 
    jz ifblock2 
    jmp elseblock2 
    ifblock2:
    mov si, joyNotPresent
    call    _disp_str
        jmp end2 
    elseblock2:
    mov si, joyPresent
    call    _disp_str 
    end2:
    mov ax,cx    
    ;;;;;;;;;;;;;Check for Serial Printer;;;;;;;;;;;;;
    and ax,1000h 
    cmp ax,0h 
    jz ifblock3 
    jmp elseblock3 
    ifblock3:
    mov si, printerNotPresent
    call    _disp_str
        jmp end3 
    elseblock3:
    mov si, printerPresent
    call    _disp_str 
    end3:
    mov ax,cx    
    ;;;;;;;;;;;;Check for Serial Ports;;;;;;;;;;;;;;;;
    and ax,700h 
    cmp ax,0h 
    jz ifblock4_s0 
    ifblock4_s0:
    mov si, s0
    call    _disp_str
        jmp end4  
     
    cmp ax,100h 
    jz ifblock4_s1 
    ifblock4_s1:
    mov si, s1
    call    _disp_str
        jmp end4
    cmp ax,200h 
    jz ifblock4_s2 
    ifblock4_s2:
    mov si, s2
    call    _disp_str
        jmp end4
    cmp ax,300h 
    jz ifblock4_s3 
    ifblock4_s3:
    mov si, s3
    call    _disp_str
        jmp end4 
    cmp ax,400h 
    jz ifblock4_s4 
    ifblock4_s4:
    mov si, s4
    call    _disp_str
        jmp end4
    cmp ax,500h 
    jz ifblock4_s5 
    ifblock4_s5:
    mov si, s5
    call    _disp_str
        jmp end4
    cmp ax,600h 
    jz ifblock4_s6 
    ifblock4_s6:
    mov si, s6
    call    _disp_str
        jmp end4
    cmp ax,700h 
    jz ifblock4_s7 
    ifblock4_s7:
    mov si, s7
    call    _disp_str
        jmp end4
    end4:
    mov ax,cx    
    ;;;;;;;;;;;;;;Check for Mouse;;;;;;;;;;;;;;;;
     int 33h                  ; call interrupt 33h function 0
     cmp ax,0ffffh            ; compare AX and FFFFh (installed)
     jz endmouse              ; it is? Jump to the end!
     mov si, nmouse
     call    _disp_str 
     jmp end5
    endmouse:
     mov si, mouse
     call    _disp_str     
    end5:
    ;;;;;;;;;;;;;;Display Date and Time;;;;;;;;;;;;
    call os_get_date_string
    mov si,date_time
    call    _disp_str         
    mov si, BX
    call    _disp_str 
    call os_get_time_string
    mov si, space
    call    _disp_str 
    mov si, BX
    call    _disp_str 
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jmp else
If you want further info about this please contact me.