Name: __________________________________________________________________
Turn OFF your cell phone/tablet/etc. Use of such devices during a quiz will lead to an
automatic 0. Place all books, notes, and electronic devices in your bag. A double-sided,
letter-sized help sheet is permitted. Complete this quiz on your own. If you don't understand
a question, please raise your hand.
1. Translate the following C program to assembly language:
#define BUFSIZE 100;
#define HYPHEN '-'
static char buffer[BUFSIZE];
int main() {
unsigned i = 0;
for (i = 0; i < BUFSIZE; i++) {
buffer[i] = HYPHEN;
}
return 0;
}
2. Translate the following C program to assembly language:
int main() {
char c;
while (1) {
c = getchar();
if (c != '\n') {
putchar(c);
}
}
return 0;
}
3. Translate the following C program to assembly language:
#define MAX 20
int main() {
unsigned i = 0;
unsigned power = 1;
while (i < MAX) {
power = power * 2;
}
return 0;
}
/10
BUFSIZE:
HYPHEN:
equ 100
equ '-'
segment
buffer
bufEnd:
.bss
resb BUFSIZE
equ $
segment
global
main:
.text
main
mov rax, buffer
mov rbx, bufEnd
; rax = &buffer
; rbx = &bufEnd
; *buffer = '-'
; buffer++
; repeat
repeat:
done:
=====
NEWLINE: equ 10
segment .text
extern getchar, putchar
global main
main:
call getchar
cmp rax, NEWLINE
je done
mov rdi, rax
call putchar
jmp main
;
;
;
;
;
rax = getchar()
reached NEWLINE?
yes, we are done
rdi = rax
putchar(rax)
done:
xor rax, rax
ret
=====
MAX: equ 20
segment .text
/10
global main
main:
xor rax, rax
xor rbx, rbx
repeat:
cmp rax, MAX
je done
imul rbx, 2
jmp repeat
; rax = 0
; rbx = 1
; reached MAX?
; yes, we are done
; rbx = rbx * 2
done:
xor rax, rax
ret
/10