Anda di halaman 1dari 3

Q80: Assembly Language

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

cmp rax, rbx


je done

; have we reached the end?


; yes, we are done

mov [rax], byte HYPHEN


inc rax
jmp repeat

; *buffer = '-'
; buffer++
; repeat

xor rax, rax


ret

; set return status to 0

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

Anda mungkin juga menyukai