Hello everyone,
I have seen here
"http://programminggroundup.blogspot.com.tr/2007/01/appendix-g-document-history.html"
that this book has a V1.1 but I can't seem to find it's pdf anywhere. Where
can I find it? I know that there is a plan on releasing "Programming Under the
Hood" but I was just wondering since the change-log said that there were lots
of minor updates on the book.
Also I try to answer all the review questions as good as I can but as someone
else pointed some years ago, is there any way to compare our answers to
solutions of these reviews? Are you also planning to put solutions or something
similar to the new book?
I'm also kind of confused about the 3rd chapter reviews. To solve this question
"Modify the maximum program to use an ending address rather than the number 0
to know when to stop." my instinct was to get the address of the last item in
data_items and compare that address with the address we're checking each time.
I kind of implemented it like this;
(But my question is, should I calculate the byte offset of the last item every
time by hand? I tried things like data_items(,15,8) but I knew that memory
address reference doesn't work like this. And lastly, lets say there is an X
variable, I want to get the address of X and add Y to it and store it in a
register. How can I do that without using lea instruction? Can I do that using
mov instruction?
.section .data
data_items: #These are the data items
.quad 3,67,2,34,222,45,75,54,34,44,33,1,22,11,66,245
.section .text
.globl _start
_start:
movq $0, %rdi # move 0 into the index register
lea data_items + 120, %rdx # put the address of the 15th (15 * 8 =
120 since it is the last item) item to rdx
movq data_items(,%rdi,8), %rax # load the first byte of data
movq %rax, %rbx # since this is the first item, %rax is
# the smallest
start_loop: # start loop
lea data_items(,%rdi,8), %r10 # put the address of the item being
examined to r10
cmpq %rdx, %r10 # check to see if we've hit the end
je loop_exit
incq %rdi # load next value
movq data_items(,%rdi,8), %rax
cmpq %rbx, %rax # compare values
jle start_loop # jump to loop beginning if the new
# one isn't bigger
movq %rax, %rbx # move the value as the smallest
jmp start_loop # jump to loop beginning
loop_exit:
# %rbx is the status code for the exit
system call
# and it already has the minimum number
movq $1, %rax #1 is the exit() syscall
Thanks in advance,
_______________________________________________
Pgubook-readers mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/pgubook-readers