machne_lang_styl

machne_lang_styl - bitwise AND Machine Language Guide 9 RST...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: bitwise AND Machine Language Guide 9 RST xor R,S,T register[R]:=register[S] XOR register[T] bitwise eXclusive OR A R0X ror R,X register[R]:=register[R] ROR X Rotate Right register R for X times RXY 0XY jmpEQ R=R0,XY jmp XY PC:=XY, if R=R0 PC:=XY F RXY jmpLE R<=R0,X PC:=XY, if R<=R0 C 000 halt halt program Basic Program The basic template of a machine language program is shown below. ; Program name ;Programmer ;Last Modified : XOR Implementation : Jayakanth Srinivasan : Feb 18 2003 ; code segment Program Header, Contains - Program Name - Programmer Name - Last Modified B Start of code segment load load load R1,1 ;Load register R1 with 1 R2,0xff ;Load register R2 with 11111111 R3,[first_number] ; move contents of location labeled ; first_number into register R3 xor R4, R3,R2 ; flip the 0's and 1's in the first number store R4, [result]; store the result in location labeled result halt ;halt the program. ; data segment first_number: result: Start of data segment db 8 db 5 Assembler Syntax Label A label is a sequence of letters, decimal digits and special characters, but it may not start with a digit. Instruction Instruction Set Opcode The opcode is the first nibble (higher four bits of the first byte) and the three parts of the operand are the second, third and fourth nibble. Instruction Operation 2 RXY load R,XY register[R]:=XY 1 RXY load R,[XY] register[R]:=memory[XY] 3 RXY store R,[XY] memory[XY]:=register[R] D 0RS load R,[S] register[R]:=memory[register[S]] E 0RS store R,[S] memory[register[S]]:=register[R] 4 0RS move S,R register[S]:=register[R] 5 RST addi R,S,T register[R]:=register[S]+register[T] integer add 6 RST addf R,S,T register[R]:=register[S]+register[T] floating-point add 7 RST or R,S,T register[R]:=register[S] OR register[T] bitwise OR 8 RST and R,S,T register[R]:=register[S] AND register[T] An instruction starts with a mnemonic, followed by the operands. It has to be one of the 16 instructions listed in the previous section. Comment A comment starts after a semicolon ‘;’ and ends at the end of the line. Any character is allowed after the ‘;’. Numbers A number can be a decimal number, a binary number or a hexadecimal number. A decimal number is a sequence of decimal digits ('0' up to '9'). It may start with a '-' to indicate the number is negative. It may end with a 'd' to emphasize that the number is decimal. A binary number is a sequence of binary digits ('0' and '1') and ending with a 'b'. hexadecimal number can be written in 3 ways: A o C-style: The number starts with '0x', followed by a sequence of hexadecimal digits ('0' up to '9' and 'A' up to 'F'). o Pascal-style: The number starts with '$', followed by a sequence of hexadecimal digits ('0' up to '9' and 'A' up to 'F'). o Assembler-style: The number is a sequence of hexadecimal digits ('0' up to '9' and 'A' up to 'F'), but it may not start with a letter. This sequence is followed by an 'h'. A number can always be made to start with a decimal digit by prefixing the number with a '0', so ABh is written as 0ABh. - Different fragments of code are not allowed to overlap. Examples: org 60h load R0,2 ;put this instruction at address $60 immediate load load reg,number load reg,label - Assign the immediate value (number or address of label) to register reg. Examples: load R4,8 load R9,Label_of_something direct load paces are not allowed within a number. S Remarks All identifiers (labels and mnemonics) and (hexadecimal) numbers are case-insensitive. This means that load, Load, LOAD and lOaD are all the same and so are 0xAB, 0Xab and 0XAB. This editor uses syntax-highlighting: eywords: k numbers: comments: syntax errors: load, -123, ;this 12A3, store, addi 0x10, 11001011b is a comment -0x10, 1+1 load reg,[adr] - Assign the memory contents at address adr to register reg. - Address adr can be a number or a label. Examples: load R4,[8] load R9,[Label_of_something] indirect load load reg1,[reg2] - Assign the memory contents of which register reg2 holds the address to register reg1. Example: load R4,[R8] direct store store reg,[adr] - Put the value of register reg at memory location adr. - Address adr can be a number or a label. Examples: store R4,[8] store R9,[Label_of_something] Mnemonics and operand combinations data byte db dataitem_1, dataitem_2, ..., dataitem_n - Puts data directly into the memory. - A dataitem can be either a number or a string. - An unlimited number of dataitems can be specified. Examples: db 1,4,9,16,25,36 db "Hello world",0 indirect store store reg1,[reg2] - Put the value of register reg1 at memory location of which register reg2 holds the address. Example: store R4,[R8] move origin move reg1,reg2 - Assign the value of register reg2 to register reg1. Example: move R4,R8 org adr - The next code starts at address adr. - Address adr must be a number. addi integer addition reg1,reg2,reg3 - Assign the integer, 2-complement sum of register reg2 and register reg3 to register reg1. Example: addi R7,R1,R2 floating point addition addf reg1,reg2,reg3 - Assign the floating-point sum of register reg2 and register reg3 to register reg1. Example: addf R7,R1,R2 unconditional jump jmp adr - Jump to address adr. - Address adr can be a number or a label. Examples: jmp 42h jmp Label_to_some_code stop program bitwise or or reg1,reg2,reg3 - reg1 := reg2 OR reg3 Example: OR R7,R1,R2 bitwise and and reg1,reg2,reg3 - reg1 := reg2 AND reg3 Example: AND R7,R1,R2 bitwise exclusive or xor reg1,reg2,reg3 - reg1 := reg2 XOR regr3 Example: XOR R7,R1,R2 rotate right ror reg,num - Rotate register reg to the right for num number of times. Example: ror RC,3 jump when equal jmpEQ reg=R0,adr - Jump to address adr when register reg is equal to register R0. - Address adr can be a number or a label. Examples: jmpEQ R7=R0,42h jmpEQ R2=R0,Label_to_some_code jump when less or equal jmpLE reg<=R0,adr - Jump to address adr when register reg is less than or equal to register R0. - Address adr can be a number or a label. Examples: jmpLE R7<=R0,42h jmpLE R2<=R0,Label_to_some_code halt - Stop the execution of the program. Notes: This handout was put together with information from the help section of the Simple Simulator developed at http://wwwes.cs.utwente.nl/software/simpsim/ ...
View Full Document

This note was uploaded on 02/20/2012 for the course AERO 16.02 taught by Professor Charlescoleman during the Winter '12 term at MIT.

Ask a homework question - tutors are online