Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please i need this ASAP, this is done using LC-3. The average computer scientist

ID: 3723060 • Letter: P

Question

Please i need this ASAP, this is done using LC-3.

The average computer scientist programs in assembly very rarely. However, some familiarity with assembly level programming is necessary to develop the fundamental understanding of how high-­level programs get executed (which itself is necessary to understand high-­end performance issues). In this lab, students will gain familiarity with basic low-­ level programming.

ASSIGNMENT In this lab you will construct an assembly routine that puts the ASCII representation of an input string in memory at a specified location. The LC-machine language provides several useful TRAP calls fo I/O (Patt 2e Appendix A, p 541). For example, GETC (TRAP x20) gets one character from the keyboard and places its ASCII code in R0. OUT (TRAP x21) performs the opposite function – it takes the contents of R0 and outputs the specified character (using ASCII encoding) to the display. The LC-­3 provides two output TRAPS for strings:    PUTS (TRAP x22) and PUTSP (TRAP x24).    Both of these expect (in R0) a starting address for a string, and output the encode string to the display.    Your task is to produce two programs that provid the “opposite” function of PUTS a PUTSP – that is, they take a string as input and place the string into memory at a location specified in R0.    You will create two separate stand-­alone programs: one for GETS and one for GETSP.    The programs do not need to be implemented as subroutines or TRAP calls. Using the LC-­3 simulator, you will construct an assembly-­level program that prompts the user for a string (the end of the string will be delimited by the character x0A, the ASCII character “Enter”).    You will store the ASCII string representation of this input (including a terminating NULL character) in memory.    The “Enter” character should not be consider part of the string and thus should not be stored. For the purposes of demonstration, I would like you to store the string at address x3100 (add the appropriate code to your program) and show that you have successfully stored the string by printing it back to the display using PUTS or PUTSP.    Your program will be located in memory at location .ORIG x3000. The following is an example output for bot GETS.asm and GETSP.asm:

Enter string to echo: Go Raiders!

Go Raiders!

----- Halting the processor -----

Explanation / Answer

Hi there, Here you look interested for the codes of two programs. First let start writting for the code gets, which take string from the command line, and put in memory location X3100.

We will solve this issue with the help of trap getc. and will use the respective call as getchar.

Let's the function name as gets_me.

And will use the loop for it. Which can call iteratively, until the user hit enter. And will assign '' (or dec 0) in the place of enter.

I have used the C style commenting.

gets_me:

.LFB0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq %rsp, %rbp

.cfi_def_cfa_register 6

subq $16, %rsp

movq $12544, -8(%rbp) /* address 0x3100 */

jmp .L2 /* jump in case when its done */

.L3:

movq -8(%rbp), %rax

leaq 1(%rax), %rdx

movq %rdx, -8(%rbp)

movl -12(%rbp), %edx

movb %dl, (%rax)

.L2:

movl $0, %eax

call getchar

movl %eax, -12(%rbp)

cmpl $10, -12(%rbp)

jne .L3

movq -8(%rbp), %rax

movb $0, (%rax)

movl $12544, %eax

leave

.cfi_def_cfa 7, 8

ret

.cfi_endproc

the simulator function for it.

.LFB0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq %rsp, %rbp

.cfi_def_cfa_register 6

subq $32, %rsp

movq %fs:40, %rax

movq %rax, -8(%rbp)

xorl %eax, %eax

movl $.LC0, %edi

movl $0, %eax

call printf

movl $0, %eax

call gets_me

leaq -32(%rbp), %rax

movq %rax, %rsi

movl $.LC1, %edi

movl $0, %eax

call printf

movl $0, %eax

movq -8(%rbp), %rdx

xorq %fs:40, %rdx

je .L3

call __stack_chk_fail

Similarly you can write the routine for others too.