import java.io.*; import java.util.*; class descriptor { static String descriptor=new String(); static String selector=new String(); static String offset=new String(); static String base=new String(); static String limit=new String(); static int segment; static boolean add=false; public static void main(String args[]) { Scanner sc=new Scanner(System.in); char des[],sel[],off[]; char desframe[],selframe[]; String desbin=""; String selbin=""; String offsetbin=""; System.out.println("Enter the descriptor in 16bit hex: "); descriptor=sc.nextLine(); des=descriptor.toCharArray(); for(int i=0;i < des.length;i++) { String temp=des[i]+""; String t=hexToBin(temp); desbin+=t; } System.out.println("Descriptor Frame: [ "+desbin+" ]\n"); desframe=desbin.toCharArray(); String dpl=desbin.substring(45,47); base = desbin.substring(16,40) + desbin.substring(56,64) +""; System.out.println("Base Add. : [ "+base+" ]"); limit = desbin.substring(0,16)+desbin.substring(48,52)+""; System.out.println("Limit Add. : [ "+limit+" ]"); System.out.println("\nEnter the selector in 4bit hex: "); selector=sc.nextLine(); sel=selector.toCharArray(); for(int i=0;i < sel.length;i++) { String temp=sel[i]+""; String t=hexToBin(temp); selbin+=t; } System.out.println("Selector Frame: [ "+selbin+" ]\n"); selframe=selbin.toCharArray(); String rpl=selbin.substring(0,2); for(char i:selframe) { System.out.print(" ["+i+"] "); } System.out.println("\n"); System.out.println("Enter The Offset of 4bit Hex: "); offset=sc.nextLine(); off=offset.toCharArray(); for(int i=0;i < off.length;i++){ String temp=off[i]+""; String t=hexToBin(temp); offsetbin+=t; } System.out.println("Offset Frame: [ "+offsetbin+" ]\n"); add=checkLimitValidation(base,offsetbin,limit); checkforValidity(desframe[47],dpl,rpl,desframe[44],add); } static String hexToBin(String input) { int value=Integer.parseInt(input,16); String binary=Integer.toBinaryString(value); int j=4-binary.length(); for(int k=0;k < j;k++) { binary=0+binary; } return binary; } static void checkforValidity(char p,String dpl,String rpl,char s,boolean ac) { if(p=='1') { if(s=='1') { System.out.println("\n---You are working in System Segment---"); if(ac) { System.out.println("\n segment can be accessed(sufficient memory)"); int dl=Integer.parseInt(dpl,2); int pl=Integer.parseInt(rpl,2); System.out.println("\nRPL: "+pl+" DPL: "+dl); if(pl <= dl) { System.out.println("\nsegment can be accessed"); } else { System.out.println("\nsegment cannot be accessed"); } } else System.out.println("\nInvalid addresss"); } else System.out.println("\nYou have not selected System Segment"); } else System.out.println("\nFrame address is not valid"); } static boolean checkLimitValidation(String base_Add, String offset, String limit_Add) { boolean flag=false; long base=Long.parseLong(base_Add,2); long off=Long.parseLong(offset,2); long limit=Long.parseLong(limit_Add,2); long physical_Add=base+limit; long p_limit=base+off; if(physical_Add >= p_limit) { flag=true; } return flag; } } /*Output 1.Enter the descriptor in 16bit hex: abcdefabcdefabcd Descriptor Frame: [ 1010101111001101111011111010101111001101111011111010101111001101 ] Base Add. : [ 11101111101010111100110111001101 ] Limit Add. : [ 10101011110011011010 ] Enter the selector in 4bit hex: abcd Selector Frame: [ 1010101111001101 ] [1] [0] [1] [0] [1] [0] [1] [1] [1] [1] [0] [0] [1] [1] [0] [1] Enter The Offset of 4bit Hex: abcd Offset Frame: [ 1010101111001101 ] ---You are working in System Segment--- segment can be accessed(sufficient memory) RPL: 2 DPL: 3 segment can be accessed */
Comments
Post a Comment