Homework
• Reading Assignment
– Professional Assembly Language, pp 39-59, 62-65
• MP1
– Get assignment file from my web page and study it
– Make and populate your UNIX mp1 subdirectory
– Study the source code for mp1
• Lab 1
– Load and Read Lab1 Write up
– GO TO LAB WITH YOUR SECTION!
1
The SAPC “Big” Picture
ulab
(OS is LINUX)
Pico
or vi
SAPC’s in Server Room
(OS is “Tutor” not LINUX)
COM2
IBM Compatible
mtip
COM2
IBM Compatible
COM1
SSH Communications
On PC via Internet
COM2
COM1
COM2
IBM Compatible
IBM Compatible
Reset Server
2
The “Big” Picture
• LINUX system is your “development host”
• SAPC is your “target machine”
• SAPC does not normally have its keyboard,
video monitor, or mouse attached!
• SAPC COM1 and COM2 ports are cabled
virtually to ports on the UNIX host “ulab”
3
The “Big” Picture
• You will use a UNIX system to edit your
source files, compile and assemble them.
• You will use the UNIX system as a server
for downloading code to an SAPC
• You may be using an SAPC
– Locally in the SAPC lab via a terminal attached
to one of its COM ports
– Remotely via the UNIX system named “ulab”
4
Picture of mtip “Session”
You
ulab
SAPC
mtip
Tutor
Transparent Relaying of Tutor commands
~d
~r
file.lnx
Memory
Reset Server
5
System Build Processes
• The system build processes for C and assembly
source courses are driven by our make files
• However, it is important to understand how the
component build steps work with the SW tools:
Sun/UNIX
gcc
as
ld
nm
objdump
Intel/SAPC
i386-gcc
i386-as (informally called “gas”)
i386-ld
i386-nm
6
i386-objdump (alias “disas”)
Build for gcc Compilation
C Source
Code
Translation
Unit
Assembly
Code
Object
Code
Executable
File
prog.c
prog.i
prog.s
prog.o
prog
gcc -E
gcc -S
gcc -c
gcc -o
7
Build for i386-gcc Compilation
C Source
Code
Translation
Unit
Assembly
Code
Object
Code
Executable
File
prog.c
prog.i
prog.s
prog.opc
prog.lnx
i386-gcc -E
i386-gcc -S
i386-gcc -c
i386-gcc -o
8
Build for i386-gcc and i386-as
C Source
Code
Assembly
Code
Object
Code
Executable
File
progc.c
prog.s
prog.opc
prog.lnx
i386-gcc -c
i386-as
i386-ld
9
Build - Symbol Table Generation
Object
Code
Executable
File
Symbol
File
prog.opc
prog.lnx
syms
i386-nm
i386-nm
• The syms file shows the memory address
assigned for each variable or source label
10
Example: Test Program
• Login to UNIX host “ulab” instead of “users”
• We will compile and run a program named
test.c on both Unix and an SAPC
–
–
–
–
–
–
Produce UNIX executable
Run it using ./test
Produce SAPC executable (.lnx extension)
Download to the SAPC
Run it
Exit from the SAPC
11
Setup Test files on Unix
• Make a subdirectory “test” on your cs341
• Copy these files to that directory
– $pcex/makefile
– $pcex/test.c
• Note the name $pcex is defined by the ulab
module in your .cshrc file. If you can’t use
$pcex as a directory name, check your ulab
module configuration in .cshrc
12
Running test program on UNIX
• Create the UNIX executable “test”
ulab(60)% gcc –o test test.c
• Execute it (avoiding conflict with UNIX “test”)
ulab(61)% ./test
• Follow the program’s directions. It should
finish up quickly and hand control back to
UNIX. You will see a UNIX prompt again.
13
Running a program on SAPC
• Make the SAPC executable, test.lnx .
ulab(65)% make C=test test.lnx
– The suffix “.lnx” is short for Linux, since we are
using a Linux-defined executable format
• Must be logged in on host ulab to use mtip
– Otherwise, we get an error message:
blade64(9)% mtip -f test.lnx
. . .
Sorry, no board currently available
blade64(10)%
14
Running a program on SAPC
• Execute mtip to access an SAPC
ulab(66)% mtip -f test.lnx
• Obtains an SAPC for you and tells mtip the
executable file you are planning to download
• When you get an SAPC assigned, hit CR to get
its Tutor prompt.
• It’s safest to use ~r to reboot the SAPC which
takes about 12 seconds. (If an SAPC ever starts
15
working weirdly, you should reboot it.)
Running a program on SAPC
• Type “~d” to download test.lnx
• To execute the program, when you see the Tutor
prompt again, type
Tutor> go 100100
• Follow the program’s directions. It should finish
up quickly and hand control back to Tutor. You
will see Tutor prompt again.
• You can run it again by command “go 100100”.
• Type “~q” or two ctrl-Cs to quit out of mtip
16
Analysis of Example
• For UNIX or SAPCs, basic process to develop
programs is the same - only different in the details
• “Cross-compilation” is defined as the compilation
of a program on one computer (Sun development
host) for execution on another computer (SAPC
target machine)
– We used gcc to generate an executable file that will
run on the Sun-based UNIX system
– We used i386-gcc to generate an executable file that
would NOT run on UNIX but will run on an SAPC
17
Analysis of Example
• Portability
– Defined as ability to write source code so that it
can run on two or more types of machines
– Requires use of a different compiler/loader and
library for each type of machine
• Notice that the library functions called by
the test program worked slightly differently
on the two types of machines (as noted in
the text produced by the test program)
18
Analysis of Example
• Another difference between the Unix system
and the SAPC is the presence/ absence of an
operating system
– UNIX is an operating system that runs programs
in a protected environment. Our code can not do
some things such as access hardware directly
– Tutor is a debug monitor only and does not run
programs in a protected environment. Our code
can access hardware directly as you’ll see later
19
Machine Project 1
• In mp1, you will add commands to a program
that is a simple version of the Tutor program
that we just used on the SAPC
• The program is “portable” so that it can be
run on both the UNIX system and an SAPC
• You will learn about some things about the
differences between the UNIX environment
and the SAPC environment
20
Two Different Environments
• How is our program loaded into memory?
Unix/Sun
SAPC
0x00000000
0x00010000
0x00020000
Reserved
Code
Data
Reserved
0x00000000
Reserved
0x00050000
Tutor
0x000A0000
Video Memory
0x000F0000
0x00100000
BIOS (ROM)
code
data
0x003FFFFF
0xFFFFFFFF
Stack
stack
Not Implemented
0xFFFFFFFF
21
Machine Project 1
• Key to understanding “tutor” is a struct:
typedef struct {
char *cmdtoken;
int (*cmdfn)();
char *help;
} cmd;
/* char string to invoke cmd
*/
/* function to call for this cmd */
/* helpstring for cmd */
cmd
*cmdtoken
‘m’ ‘d’ ‘\0’
(*cmdfn) ( )
Function to process command
*help
‘h’ ‘e’ ‘l’ ‘p’ ‘ ’ ‘t’ ‘e’ ‘x’ ‘t’ ‘\0’
22
Machine Project 1
• Your job entails
– Replacing the stub for the md command to:
•
•
•
•
Convert the character string to an integer
Use that integer as an address (a pointer to memory)
Find the contents of that address
Display the contents of that address to the terminal
– Adding commands to the command table and
writing code to make both of them work
• Memory Set - ms
• Help - h
23