mirror of
https://github.com/pkivolowitz/asm_book.git
synced 2026-06-22 13:46:51 +08:00
added exercises and more detailed answers
This commit is contained in:
parent
68d49161cb
commit
cbb9044442
2 changed files with 23 additions and 7 deletions
|
|
@ -496,7 +496,8 @@ We do maintain that understanding assembly language principles will improve your
|
||||||
|
|
||||||
(T | F) It is the compiler's job to reduce a higher level language to assembly language.
|
(T | F) It is the compiler's job to reduce a higher level language to assembly language.
|
||||||
|
|
||||||
Answer: True
|
Answer: True - The "compiler" is just one step in the "compilation" process. In fact it
|
||||||
|
is step 2. Invoking the "preprocessor" is step 1.
|
||||||
|
|
||||||
### 2
|
### 2
|
||||||
|
|
||||||
|
|
@ -508,7 +509,8 @@ Answer: False - a linker error will happen, not a syntax error.
|
||||||
|
|
||||||
\___ and ___ implement the braces in C and C++.
|
\___ and ___ implement the braces in C and C++.
|
||||||
|
|
||||||
Answer: labels and branches.
|
Answer: labels and branches - the closing brace of a `while` loop for example,
|
||||||
|
is a branch instruction.
|
||||||
|
|
||||||
### 4
|
### 4
|
||||||
|
|
||||||
|
|
@ -519,7 +521,8 @@ if a_register has value 0
|
||||||
then goto label
|
then goto label
|
||||||
```
|
```
|
||||||
|
|
||||||
Answer: True
|
Answer: True - `cbz` stands for "compare and branch if zero". There is also
|
||||||
|
a `cbnz` instruction. To test for other Boolean conditions, use `cmp`.
|
||||||
|
|
||||||
### 5
|
### 5
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# The `if` statement
|
# Section 1 / Chapter 2 / The `if` Statement
|
||||||
|
|
||||||
We will begin with the `if` statement followed by a discussion of the `if / else`.
|
We will begin with the `if` statement followed by a discussion of the `if / else`.
|
||||||
|
|
||||||
|
|
@ -175,9 +175,11 @@ T: .asciz "TRUE" // 24
|
||||||
In this case, the label `T` corresponds to the address to the first
|
In this case, the label `T` corresponds to the address to the first
|
||||||
letter of the C string "TRUE".
|
letter of the C string "TRUE".
|
||||||
|
|
||||||
The occurrences of `.asciz` are invocations of an *assembler directive*
|
The occurrences of `.asciz` on `line 23` and `line 24` are invocations of
|
||||||
the creates a C string. Recall that C strings are NULL terminated. The
|
an *assembler directive* the creates a C string. Recall that C strings are NULL
|
||||||
NULL termination is indicated by the `z` which ends `.asciz`.
|
terminated. The NULL termination is indicated by the `z` which ends `.asciz`.
|
||||||
|
There is a similar directive `.ascii` that *does not NULL terminate* the
|
||||||
|
string.
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
|
|
@ -197,8 +199,19 @@ allow a branch to that code block, such as the beginning of an `else`.
|
||||||
|
|
||||||
### 1
|
### 1
|
||||||
|
|
||||||
|
(T | F) If statements in assembly language always test for the opposite condition
|
||||||
|
as the equivalent `if` statement in a high level language.
|
||||||
|
|
||||||
|
Answer: False - it is a matter of style but you may be able to
|
||||||
|
save an instruction or two by doing so.
|
||||||
|
|
||||||
### 2
|
### 2
|
||||||
|
|
||||||
|
(T | F) `cmp` isn't a "real" instruction but rather is an alias for a subtraction.
|
||||||
|
|
||||||
|
Answer: True - `cmp` is an alias for `subs` which is a subtract that discards the
|
||||||
|
resulting value but does set the condition bits.
|
||||||
|
|
||||||
### 3
|
### 3
|
||||||
|
|
||||||
### 4
|
### 4
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue