Please read the assembly language files we have
    provided before reading this section.  The file assembly_example.s contains several x86 assembly language examples.   For your 
    design review you are required to implement routines that print to the screen. 
     During the boot process, you can write directly to the screen by writing to the display 
    RAM which is mapped starting at 0xb800:0000. 
	Each location on the screen 
    requires two bytes---one to specify the attribute (Use 0x07) and the 
    second for the character itself. The text screen is 80x25 characters. So, to 
    write to i-th
    row and 
    j-th 
    column, you write the 2 bytes starting at offset 
    ((i-1)*80+(j-1))*2. So, the following code sequence writes the character 'K' (ascii 
        0x4b) to the top left corner of the screen:  This code sequence is very useful for debugging.
    
    Loading a segment:offset
    This project will require you to load a number into a segment register to
    setup the stack and data segments. The code segment register (CS) cannot be loaded 
    directly, but instead only indirectly through a special JMP instruction.  When 
    loading a value into the stack segment register (SS), interrupts are disabled 
    for the next instruction, thus allowing you to set the stack pointer (SP).  As 
    an example of setting up the segment registers for data, consider the following 
    string copy:
    
    # Setup the registers
    
    movw DATA_SEGMENT, %ax
    movw %ax, %ds
    movw OTHER_DATA_SEGMENT, %ax
    movw %ax, %es
    movw STRING_FROM_ADDRESS, %si
    movw STRING_TO_ADDRESS, %di
    
    
    # Move a byte from one string to the other (implictly DS:SI to ES:DI) 
    # The values in %si and %di are automatically incremented/decremented based on 
    the DF flag
    
    movsb
    
    Display memory
    
    movw $0xb800,%bx
                              movw %bx,%es
                              movw $0x074b,%es:(0x0)