Difference between revisions of "CSC231 Addressing Mode Exercises"

From dftwiki3
Jump to: navigation, search
Line 42: Line 42:
 
Write a program that fills an array of 16 words with the first 16 fibonacci terms
 
Write a program that fills an array of 16 words with the first 16 fibonacci terms
  
 +
<onlydft>
 
<code><pre>
 
<code><pre>
 
fib    dw      1, 1, 0, 0, 0, 0, 0, 0
 
fib    dw      1, 1, 0, 0, 0, 0, 0, 0
Line 56: Line 57:
 
         loop    for              ; go back   
 
         loop    for              ; go back   
 
</pre></code>
 
</pre></code>
 +
</onlydft>
  
 +
==Exercise 4==
  
==Exercise 4==
 
 
Write a program that fills an array of 10 double-words with the first 10 powers of 2.
 
Write a program that fills an array of 10 double-words with the first 10 powers of 2.
  
 
+
<onlydft>
 
<code><pre>
 
<code><pre>
 
  Powers  dd      0,0,0,0,0,0,0,0,0,0
 
  Powers  dd      0,0,0,0,0,0,0,0,0,0
Line 76: Line 78:
 
         loop    for            ; go 9 times           
 
         loop    for            ; go 9 times           
 
</pre></code>
 
</pre></code>
 
+
</onlydft>
  
 
==Exercise 5==
 
==Exercise 5==
 
Assume Powers is an array of 11 words, and the first word contains a constant.  Write the program that stores 1/2 the value of the constant in the 2nd word, 1/4 the value in the 3rd word, 1/8 4th word, 1/16 5th word, etc.
 
Assume Powers is an array of 11 words, and the first word contains a constant.  Write the program that stores 1/2 the value of the constant in the 2nd word, 1/4 the value in the 3rd word, 1/8 4th word, 1/16 5th word, etc.
  
 
+
<onlydft>
 
<code><pre>
 
<code><pre>
 
Powers  dd      57,0,0,0,0,0,0,0,0,0
 
Powers  dd      57,0,0,0,0,0,0,0,0,0
Line 95: Line 97:
 
         loop    for            ; go 9 times           
 
         loop    for            ; go 9 times           
 
</pre></code>
 
</pre></code>
 
+
</onlydft>
  
 
==Exercise 6==
 
==Exercise 6==
Copy a string into another string, reversing the order of the string to see if they are palindromes.
+
The example below copies a string into another string, reversing the order of the string to see if they are palindromes. Rewrite it using a ''based indexed'' addressing mode.
 
 
  
 
<code><pre>
 
<code><pre>

Revision as of 08:44, 22 October 2010

Exercises on Addressing Modes

Exercise 1

Write a program that changes all the characters of an all-uppercase string to all-lowercase. We assume the string does not contain blank spaces


msg     db      "hellotherehowareyou"
MSGLEN  equ     $-msg

        mov     ebx, msg        ; ebx points to 1st char of msg                 
        mov     ecx, MSGLEN     ; # of chars in string                          
for:    sub     byte[ebx],32    ; lower to upper case, in memory                
        inc     ebx             ; ebx points to next char                       
        loop    for



Exercise 2

Write a program that fills an array of 8 bytes with the first 8 fibonacci terms


fib     db      1, 1, 0, 0, 0, 0, 0, 0
NOFIB   equ     $-fib

        mov     ebx, fib
        mov     esi, 2          ; point to Fib[3]                               
        mov     ecx, NOFIB-2    ; skip first 2 Fibs                             
        mov     al, byte[ebx+esi-1] ;                                           
for:    add     al, byte[ebx+esi-2]
        mov     byte[ebx+esi], al ; fib_i = fib_i-1 + fib_i-2                   
        inc     esi               ; point to next uncomputed fib                
        loop    for               ; go back  


Exercise 3

Write a program that fills an array of 16 words with the first 16 fibonacci terms


...


Exercise 4

Write a program that fills an array of 10 double-words with the first 10 powers of 2.


...


Exercise 5

Assume Powers is an array of 11 words, and the first word contains a constant. Write the program that stores 1/2 the value of the constant in the 2nd word, 1/4 the value in the 3rd word, 1/8 4th word, 1/16 5th word, etc.


...


Exercise 6

The example below copies a string into another string, reversing the order of the string to see if they are palindromes. Rewrite it using a based indexed addressing mode.

msg1    db      "Esope reste ici et se repose"
msg2    db      "                            "
MSGLEN  equ     $-msg2

        mov     esi, msg1
        mov     edi, msg2
        mov     ecx, MSGLEN

for     mov     al, byte[esi]
        mov     byte[edi], al
        inc     esi
        inc     edi
        loop    for