Assignment #1
To allow you to get your feet wet with assembly, here is our first assignment:
Write an assembly program which prompts the user for their name, printing
What is your name?and then accepts up to 255 characters of input, and then prints outHello,name, nice to meet you!followed by a newline.
Here’s an example transcript:
What is your name? Andy
Hello, Andy, nice to meet you!
You’ll have to use both the SYS_WRITE (= 1) and SYS_READ (= 0) syscalls.
Use the following .data section (do not modify the .data section):
section .data
prompt: db "What is your name? "
prompt_len: equ $-prompt
buffer: times 255 db '!'
resp1: db "Hello, "
resp1_len: equ $-resp1
resp2: db ", nice to meet you!", 10
resp2_len: equ $-resp2
buffer is the input buffer to pass to the SYS_READ call; it consists of
255 ! characters. Note that SYS_READ will “return” the actual number of bytes
read in rax, which you will then have to use when you print out the contents
of the buffer. (If you get the length of the input wrong, you’ll see either the
user’s name cut off, or with !!!!s added onto the end of it.)
The “fd” parameter to both SYS_READ and SYS_WRITE is a file descriptor,
a number which identifies a file or stream. The standard file descriptors which
are always available are
| FD Number | Stream |
|---|---|
| 0 | Standard input |
| 1 | Standard output |
| 2 | Standard error (output) |
So you’ll SYS_READ from FD #0, and SYS_WRITE to FD #1 (as we did before).
Don’t forget to end your program with a SYS_EXIT (= 60) syscall, to gracefully
end your program!
Submission
Create directories cs241 and cs241/assign1 on the server and place your
code there. I.e.,
mkdir cs241/
mkdir cs241/assign1
cd cs241/assign1
and then open a .s file in your favorite editor (the file name doesn’t matter).