M.Tech ES ARM LAB
M.Tech ES ARM LAB
Value1
Value2
Result
LDR
LDR
ADD
STR
SWI
R1,
R2,
R1,
R1,
&11
Value1
Value2
R1, R2
Result
AREA
DCD
DCD
DCD
END
Data1, DATA
&11112222
&55556666
0
b) 32-bit Subtraction:
AREA Program, CODE, READONLY
ENTRY
Main
LDR
LDR
SUB
STR
SWI
Value1
R1,
R2,
R1,
R1,
&11
Value1
Value2
R1, R2
Result
DCD
DCD
END
&55556666
0
c) 16-bit Multiplication:
AREA Program, CODE, READONLY
ENTRY
Main
LDR
LDR
MUL
STR
SWI
Value1
Value2
Result
R0,
R1,
R0,
R0,
&11
Value1
Value2
R1, R0
Result
R0, Number1
R1, Number2
R3, #0
CMP
BEQ
CMP
BLT
ADD
SUB
R1, #0
Err
R0, R1
Done
R3, R3, #1
R0, R0, R1
MOV
R3, #0xFFFFFFFF
STR
STR
R0, Remain
R3, Quotient
Loop
Err
Done
Number1
Number2
Quotient
Remain
&11
AREA
Data1, DATA
DCD &0075CBB1
DCD &0141
ALIGN
AREA Data2, DATA
DCD 0
DCD 0
ALIGN
END
wordcopy
src
dst
LDR
LDR
MOV
LDR
STR
SUBS
BNE
SWI
r0, =src
r1, =dst
r2, #num
r3, [r0], #4
r3, [r1], #4
r2, r2, #1
wordcopy
&11
LOOP
MOV
LDR
STR
MOV
LDR
STR
MOV
LDR
STR
B
END
R0, #0
R1, =PINSEL0
R0, [R1]
R0, #0x00000300
R1, =IO0DIR
R0, [R1]
R0, #0x00000300
R1, =IO0PIN
R0, [R1]
LOOP
initLCD(void);
enable(void);
LCD_WriteChar(char c);
LCD_WriteString(char * string);
LCD_Cmd(unsigned int cmd);
delay(void);
int main(void)
{
initLCD();
LCD_WriteString(".: Welcome to :.");
LCD_Cmd(0x80 + 0x40);
LCD_WriteString("TRML");
while(1);
return 0;
}
void initLCD(void)
{
IO0DIR = 0xFF;
IO1DIR |= (1<<16) | (1<<17);
IO0PIN = 0x0;
IO1PIN = 0x0;
delay();
LCD_Cmd(0x3C);
LCD_Cmd(0x0F);
LCD_Cmd(0x06);
PLOCK 0x00000400
THRE (1<<5)
MULVAL 15
DIVADDVAL 1
NEW_LINE 0xA
void initUART0(void);
void U0Write(char data);
void initClocks(void);
int main(void)
{
char msg[] = { 'T','R','M','L','\0' };
int c=0;
initClocks();
initUART0();
for(;;)
{
while( msg[c]!='\0' )
{
U0Write(msg[c]);
c++;
}
U0Write(NEW_LINE);
c=0;
}
return 0;
}
void initUART0(void)
{
PINSEL0 = 0x5;
U0LCR = 3 | (1<<7) ;
U0DLL = 110;