Difference between revisions of "CSC231 Exercises with conditinal jumps Solutions"

From dftwiki3
Jump to: navigation, search
(Loop until overflow)
(Loop until overflow)
Line 58: Line 58:
 
3 Solution programs:
 
3 Solution programs:
 
* [[CSC231 FibOverflowByte.asm | FibOverflowByte.asm]]: using an array of bytes
 
* [[CSC231 FibOverflowByte.asm | FibOverflowByte.asm]]: using an array of bytes
 +
fib(2) = 2
 +
fib(3) = 3
 +
fib(4) = 5
 +
fib(5) = 8
 +
fib(6) = 13
 +
fib(7) = 21
 +
fib(8) = 34
 +
fib(9) = 55
 +
fib(10) = 89
 +
 
* [[CSC231 FibOverflowWorde.asm | FibOverflowWord.asm]]: using an array of words
 
* [[CSC231 FibOverflowWorde.asm | FibOverflowWord.asm]]: using an array of words
 +
 +
fib(2) = 2
 +
fib(3) = 3
 +
fib(4) = 5
 +
fib(5) = 8
 +
fib(6) = 13
 +
...
 +
fib(19) = 6765
 +
fib(20) = 10946
 +
fib(21) = 17711
 +
fib(22) = 28657
 +
 
* [[CSC231 FibOverflowDWord.asm | FibOverflowDWord.asm]]: using an array of dwords
 
* [[CSC231 FibOverflowDWord.asm | FibOverflowDWord.asm]]: using an array of dwords
  
All 3 require
+
fib(2) = 2
 +
fib(3) = 3
 +
fib(4) = 5
 +
fib(5) = 8
 +
...
 +
fib(43) = 701408733
 +
fib(44) = 1134903170
 +
fib(45) = 1836311903
 +
 
 +
All 3 programs require
 
* [[CSC231 driver.c | driver.c ]]
 
* [[CSC231 driver.c | driver.c ]]
 
* [[CSC231 asm_io.inc | asm_io.inc]]
 
* [[CSC231 asm_io.inc | asm_io.inc]]

Revision as of 09:05, 29 October 2008

Exercises on Conditional Jumps

Finding the minimum

Find the minimum of 3 signed int variables a, b, and c

	section	.data
a       dd      3
b       dd      5
c       dd      1        
min     dd      0
        
	section	.text
	global	_start

_start:

;;; if a <= b:           # if1
;;;     if a <= c:       # if2
;;;         min = a      # 
;;;     else: # a > c    # else2
;;;         min = c      
;;; else: # a > b        # else1
;;;     if b >= c:       # if3
;;;         min = c
;;;     else: # b < c    # else3
;;;         min = b

        mov     eax, dword[a]
        mov     ebx, dword[b]
        mov     ecx, dword[c]
        
if1:    cmp     eax, ebx
        jg      else1
if2     cmp     eax, ecx
        jg      else2
        mov     dword[min], eax
        jmp     done
else2:  mov     dword[min], ecx
        jmp     done
else1:
if3:    cmp     ebx, ecx
        jl      else3
        mov     dword[min], ecx
        jmp     done
else3:  mov     dword[min], ebx
done:
        

Loop until overflow

Print fibonacci numbers coded as unsigned words until the result overflows. Don't print erroneous numbers!

3 Solution programs:

fib(2) = 2
fib(3) = 3
fib(4) = 5
fib(5) = 8
fib(6) = 13
fib(7) = 21
fib(8) = 34
fib(9) = 55
fib(10) = 89
fib(2) = 2
fib(3) = 3
fib(4) = 5
fib(5) = 8
fib(6) = 13
...
fib(19) = 6765
fib(20) = 10946
fib(21) = 17711
fib(22) = 28657
fib(2) = 2
fib(3) = 3
fib(4) = 5
fib(5) = 8
...
fib(43) = 701408733
fib(44) = 1134903170
fib(45) = 1836311903

All 3 programs require

Scanning an array

Find the largest element of a 1-dimensional array of signed double-words.

Same question, but with unsigned double words.


Characters and lower/upper case conversion

The program makeUpper.asm transforms all characters in a string to uppercase, but will also transform other characters that are not letters.

Modify the program so that it modifies only characters between 'a' and 'z' included.

Long/short jumps

Conditional jumps can jump only +127 bytes down, -128 bytes up in the code. How can we code something like this:

                 cmp     eax,10
                 jl      there
                 ...
                 ...
        there:   ...


when the instruction at Label there is 1000 bytes away from the jl conditional jump?

Print 2-dimensional arrays

Write the code necessary for printing an array of chars (maze) using for-loops depending on i and j indexes.

;;;  ------------------------------------------------------------
;;;  data areas
;;;  ------------------------------------------------------------

        section .data
maze    db "################################"     
maze2   db "            #  #           #    "     
        db "#########   #  #  #######  #   #"
        db "#           #  #        #      #"
        db "#########         ##############"
        db "#           ####               #"
        db "################################"
C       equ maze2-maze  ; num of columns
R       equ 7           ; num of rows

i        dd          0
j        dd          0