Pl EXOS 1.DOC

From Atari Wiki
Revision as of 00:26, 17 December 2023 by Olivier.jan (talk | contribs)
Jump to navigation Jump to search

                         -------------------------
                               EXERCISES   I

                         -------------------------


- Solutions to the exercises proposed in this file are present 
  in the file: CORRIG_1.DOC
                    ------------
  You just need to note the exercise number whose answer you want to know.




                            ------------------

No. 1:
------

Find the error (easy...)


     text

ab   move.b    #345,d0
     add.b     #1,d0
     jmp       ab

     end


No. 2:
------
What will the data register d3 contain?

     text

     move.l    #12,d3
     add.l     #4,d3
     add.l     d3,d3
     move.l    var,d2
     add.l     d2,d3

     data                ;data segment

var  dc.l      458

     end


No. 3:
------
What will the d5 register contain?
     

     text

     move      ici,d4
     add       #5,d4
     move      d4,la
     add       ici,la
     move      la,d5

     data 

ici  dc.w      10

     bss

la   ds.w      1

     end

No. 4:
-----
Find the value of a4 at the end of the program knowing that the label 'ad' is 
located at an address equal to $ff0 and it points to (dc.l) the number 45

Find the value of d5:

     text

     move.l    #ad,a4
     move.l    ad,d5
          
     data

ad   dc.l      45       ; it is assumed that here PC=$ff0

     end


No. 5:
-----
Find the value of d5 and a5 following this program.

     text

     move      #15,d5
     move.l    #zz,a5
     move.w    zz,d5    
     
     data

zz   dc.w      0

     end



-   I will now use the control operation instruction 'DBF' which allows the 
    execution of a loop and whose syntax is: 'DBF  Dn,loop'. This instruction 
    uses a data register Dn and a Destination Label. Each call, Dn is decremented by 1
    unit, if Dn equals -1, the program continues after the instruction that follows
    'DBF' otherwise the instruction performs a jump to the Destination address.

   example:
   --------
     text
     
     move.b    #1,d3        ;d3=1 from the beginning
     move.w    #99,d0       ;number of loops -1 (because we go until -1!)
                            
tgv  add.b     #1,d3        ;we add 1 to d3 until d0=-1, so
     dbf       d0,tgv       ;100 times in a row

     move.b    d3,var       ;then we put d3.b (=101) in var
                            ;NB: d0 equals -1 ...
     bss

var  ds.b      1

     end


No. 6:
-----
Find the value contained at the address out, the value of d0 and d5 at 
the end of this program.

     text

     move      #247,d0
     move      #3,d5

bbb  add       #8,d0
     move      d0,out
     dbf       d5,bbb

     bss

out  ds.b      2

     end


No. 7:
-----  
Find the BINARY value of the data register d1 at the end of this program.
NB:5438=%0001010100111110

     text

     move      #5391,d0
     add       #47,d0

     move      d0,dix
     move.b    in,d1

     bss

dix  ds.b      1
in   ds.w      47         

     data

nul  dc.w      5438

     end


No. 8:
-----
what will happen at 'gag'?

     text

     move.l    #gag,a2
     
gag  move.b    #100,d1
     jmp       (a2)

     end

No. 9:
-----
What will be the value of d3 after this program?

     text

     move.b    #12,lab
     move.b    #14,lac
     move.b    #15,lad

     move.l    #lab,a3
     move.b    #1,d1

fff  move.b    (a3)+,d3
     dbf       d1,fff

     add.b     (a3),-(a3)
     move.b    -(a3),d3
     add.b     (a3),d3

     bss

lab  ds.w      1
lac  ds.b      1
lad  ds.w      5

     end

     
No. 10:
------

What will be the values of d0,d1,d2,d3,a0 after this program?

     text

     move.b    #10,a
     move.b    #11,b
     move.b    #12,c
     move.b    #13,d
     move.b    #98,e

     move.l    #deb,a0
     move.b    (a0)+,d0
     move.b    (a0)+,d1
     move.b    (a0)+,d2
     move.b    (a0),d3
     move.b    -(a0),d4

     bss

deb  ds.b      1
a    ds.b      1
b    ds.b      1
c    ds.b      1
d    ds.b      1
e    ds.b      1
f    ds.l      4

     end

No. 11:
------
Find the value of a4 and d0,d1 after this program.

     text

     move.b    #3,d0
     move.l    #pil,a4

rrr  move.b    -(a4),d1
     add.b     #4,d1
     dbf       d0,rrr

     data

     dc.b      1,2,3,4,5,6,7,8,9
pil  dc.w      245     

     end

No. 12:
------
Find out what is in 'out' and the value of d2.

     text

a    equ       3
b    equ       5

     move.b    a,d2
     add.b     b,d2

     move.l    #g,a5
     move.b    d2,(a5)    
     move.b    d2,-(a5)
     move.b    (a5)+,d2
     move.b    (a5),d2

     bss

out  ds.b      1
g    ds.b      4

     end

No. 13:
------
Find the value of d1,d2,d3,d4 and a0.

     text

     move.l    #out,a0
     move.w    #2,d3
     move.w    (a0),d1
     move.w    -4(a0),d2
     move.w    -4(a0,d3),d3
     move.w    -(a0),d4
     data

     dc.l      1
     dc.w      12
     dc.w      2356
out  dc.b      15

     end 

No. 14:
------
What are the different values taken by a0 during this program?
What is the final value contained in 'res'?

     text
     
     move.l    #a,a5
     move.l    #2,d2

ttt  move.b    #1,(a5)+
     dbf       d2,ttt
     move.b    #5,(a5)

     move.l    #vec,a1
     move.b    #3,d0
     move.b    #0,d2

cde  move.l    0(a1,d2),a0
     add.l     #4,d2
     move.b    (a0),res
     dbf       d0,cde

     data

vec  dc.l      a,b,c,d

     bss

a    ds.b      1
b    ds.b      1
c    ds.b      1
d    ds.b      1
res  ds.b      1

     end

No. 15:
------
Find the value pointed by ret, at the end of this program.

     text

     move.l    #5,a
     move.l    #a,a0

     move.l    (a0)+,d2
     move.l    d2,ret

     bss

a    ds.l      2
ret  ds.l      1
     
     end

No. 16:
-----
Find the value of d0 and a0 after this program.

     text

     move.b    #3,d1
     move.b    #a,a0

mno  move.b    1(a0,d1),d0
     add.b     #14,d0
     add.b     a,d0
     dbf       d1,mno

     data

a    dc.b      0,5,6,7,8,9

     end
     
No. 17: 
------
Find the value of d3 after this program.

     text

     move.l    #a,a0
     move.b    #5,(a0)+
     move.b    #6,(a0)+

     move.b    -(a0),d2
     move.l    #a,a0
     move.b    1(a0),d3
     add.b     d2,d3

     bss

a    ds.w      1     
     ds.b      1 

     end

No. 18:
------
Find out what happens at 'stp', what does 'res' contain?
   
     text

     move.w    #5,d3
     add.b     #6,d2
     add.b     d2,d3
     move.l    #ad,a0

stp  jmp       10(a0)
 
ad   move.l    #5,res
     move.b    d3,res 

     bss

res  ds.b      1

     end

No. 19:
------
Now some quick questions:

a) If I write 'MOVE.W #0,d0', what will happen at the level of the CCR?
   And if I write afterwards 'ADD.W #-2,d0'?

b) Can we place a BYTE at an odd address?

c) How many digits is an L-M encoded in HEXADECIMAL?

d) Can we use the PC to store a digit as with a data or address register?
   (I remind you that it is a register).
   If yes, how?

e) The directive 'END' ends the program and allows the return to the DESKTOP,
   True or False? Argue.

f) A macro instruction is a subroutine called by the Linker every
   time it encounters its name in the object code.
   True or False? Explain.

g) You can use any addressing mode for the operands of the
   68000 instructions.
   True or False? 


                           -----------------


When you are finished with these exercises, look at the solutions
in the CORRIG_1.DOC file then go back to the courses.
Good luck!   ------------




PIECHOCKI Laurent
8,impasse Bellevue
57980 TENTELING


Back to ASM_Tutorial