Section Exercises

True or False

chevron-rightprintf takes only one argument which represents the memory address of the first byte of a string.hashtag

False!

printf takes a variable number of arguments depending on how many format specifiers are in your string (if you want to deepen you knowledge regarding the printf functionality try A5: Printf). More important, the first argument is always the format string.

chevron-rightscanf takes a variable number of arguments, the first one being a format string.hashtag

True!

Note: Because of this, for scanf, the number of vector registers specified in the al registers will be 0.

chevron-rightStack pointer relative addressing is useful when the values read with scanf are needed throughout the program/subroutines.hashtag

False!

The base pointer relative addressing is useful in this case. Stack pointer relative addressing is useful for values used once or for a short period of time.

chevron-rightBase pointer relative addressing should be used for values that are used for a short time.hashtag

False!

Base pointer relative addressing is useful when the value of a variable is needed throughout a program/subroutine.

chevron-rightStack pointer relative addressing should be used for values that are only accessed once.hashtag

True!

Stack pointer relative addressing is useful when the value should only be stored on the stack until it can be moved to registers for further usage, so for values that are only used once or for a short time.

The following assembly code shows a correct usage of scanf:

chevron-rightIn the previous question, we should have used movq $0, %al instead of movb $0, %al.hashtag

False!

In the register section, we saw that the name of the register can indicate its size and location. In this case, al stores 8 bits (1 byte), so we need to use movb to indicate that we move one byte.

Multiple Choice

Which directive tells the assembler that a string should be placed in a text section as ASCII-encoded characters?

chevron-right.ascizhashtag

Correct!

The .asciz directive indicates that a string should be placed in a text section as ASCII-encoded characters, but it also indicates the fact that the string will be followed by a zero byte.

chevron-right.asciihashtag

Correct!

chevron-right.texthashtag

Wrong!

The .text directive specifies that the following line should be placed in the text section of the program, but does not indicate the type or encoding of the content of the line.

chevron-right.equhashtag

Wrong!

The .equ directive can be used to define symbolic names for expressions, such as numeric constants.

Which format specifiers indicate a signed long, a zero-terminated string and hexadecimal integer?

chevron-rightd, s, xhashtag

Wrong!

d indicates a signed integer.

chevron-rightld, s, lxhashtag

Wrong!

lx indicates a hexadecimal long.

chevron-rightld, s, xhashtag

Correct!

chevron-rightd, s, lxhashtag

Wrong!

d indicates a signed integer, while %lx indicates a hexadecimal long.

Last updated