Pl CORRIG 1.DOC

From Atari Wiki
Jump to navigation Jump to search

                                     -------------------------
                                          EXERCISES PART I

                                            CORRECTIONS
         
                                     -------------------------

- The solutions to the exercises proposed in this file are related
to exercises nr°1 in the file: EXOS_1.DOC
-----------
Refer to the nr° of the exercise whose solution you want to know.



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

nr° 1:
------

The error in this program had to be found:

     text

ab   move.b    #345,d0        ; -128<BYTE<128  !!
     add.b     #1,d0
     jmp       ab

     end

The answer was very simple, the error is in the first instruction,
indeed, we do a 'MOVE.B  #345,d0' i.e., we put Byte 345 in
the low weight Byte of register d0, but I remind you that the
maximum value a byte can have is 128 and 345>128, this leads
to an error during assembly.
To correct, simply write 'MOVE.W #345,d0' or 'MOVE.L #345,d0'


nr° 2:
------
The value of data register d3 after the program had to be found.

     text

     move.l    #12,d3    ;We put the L-M=12 in the d3 register
     add.l     #4,d3     ;We add the L-M=4 to it:  d3=12+4=16
     add.l     d3,d3     ;We add the L-M d3 to itself, so
                         ;d3=d3+d3=16+16=32 (on an L-M)
     move.l    var,d2    ;We put the L-M pointed by 'var', i.e.
                         ;458 in the data register d2
     add.l     d2,d3     ;we add the L-M of d2 to the L-M of d3,
                         ;so d3=d2+d3=458+32=490 (L-M)

     data                ;data segment

var  dc.l      458

     end

As the Remarks show, d3=490


nr° 3:
------
It was asked what the d5 register would contain after the program.

     text

     move      ici,d4    ;we place the word pointed by 'here' in the low
                         ;weight word of the data register d4
                         ;so d4=10 (on a word)
     add       #5,d4     ;we add the word 5 to the low weight word of d4
     move      d4,la     ;We put the low weight word of d4 (15) at 'there' 
     add       ici,la    ;We add the value pointed by 'here' to the
                         ;data pointed by 'there', 'there' therefore points to
                         ;a word (ds.w) equal to 10+15=25
     move      la,d5     ;We put the word pointed by 'there' in the low
                         ;weight word of d5.So d5=25

     data 

here  dc.w      10

     bss

there   ds.w      1

     end

We then find d5=25


nr°4:
-----
You had to:
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 (dc.l) at the number 45


     text

     move.l    #ad,a4   ;we put the address of 'ad' (L-M) in the
                        ;address register a4, so a4=$ff0 
     move.l    ad,d5    ;we put the L-M pointed by 'ad', i.e. 45 in
                        ;the data register d5
          
     data

ad   dc.l      45       ;we suppose that here PC=$ff0

     end

In this specific case, a4=$ff0 (and not 45, review your lessons!)
It was really very simple.


nr°5:
-----
You must find the value of d5 and a5 after this program.

     text

     move      #15,d5    ;We put the word 15 in the low weight word of d5
     move.l    #zz,a5    ;We put the address of 'zz' in the address
                         ;register a5
     move      zz,d5     ;We put the word pointed by 'zz' in the low
                         ;weight word of the data register d5, so d5=0.
     
     data

zz   dc.w      0

     end

So d5=0 (word) and a5=address of 'zz' (L-M)


nr°6:
-----
The value contained at the address 'out', the value of d0 
and d5 at the end of this program had to be found.

     text

     move      #247,d0   ;we put the word 247 in the low weight word of d0
     move      #3,d5     ;we put the word 3 in the low weight word of d5

bbb  add       #8,d0     ;we add the word 8 to the low weight word of d0
     move      d0,out    ;then we put the low weight word of d0 in 'out'
     dbf       d5,bbb    ;we come back to 'bbb' until d5=-1
                         ;i.e. 4 times because d5=3 at the beginning
                         ;at the end of the loop, d0=247+(8*4)=279 (word)
     bss

out  ds.b      2         ;we reserve 2 Bytes (i.e. 1 word) in 'out' 

     end

In 'out' we therefore find a Word, the last value of d0 so 279, d5=-1
because its register is decremented until d5=-1.


nr°7:
----- 
It was necessary to: 
Find the BINARY value of the data register d1 at the end of this program.
knowing that 5438=%0001010100111110

     text

     move      #5391,d0  ;we put the word 5391 in the low weight word of d0
     add       #47,d0    ;we add 47, so d0=5438 (word)

     move      d0,ten    ;we put the low weight word of d0 in 'ten',
                         ;as in 'ten' there is 'ds.b', only the high byte
                         ;of d0 will be in 'ten', the low weight byte
                         ;will be in 'in' (address 'ten'+1).
     move.b    in,d1     ;we put the byte pointed by 'in' in the low weight
                         ;byte of d1
                         ;in 'in' there is the low weight byte of d0,
                         ;so d1 will contain %00111110

     bss

ten  ds.b      1         ;reserve one byte in 'ten'
in   ds.w      47        ;reserve 47 words in 'in'='ten'+1 

     data

null  dc.w      5438      ;nothing to do here...

     end


We therefore have d1=%00111110 (byte)


nr°8:
-----
What is going to happen in 'gag'?

     text

     move.l    #gag,a2        ;a2 points to the address of 'gag'
     
gag  move.b    #100,d1        ;we put the byte 100 in the low weight
                              ;of d1
     jmp       (a2)           ;we jump to the address pointed by a2 (so
                              ;the address of 'gag')

     end


The program is therefore an infinite loop, we put the byte 100 in d1
an infinite number of times.


nr°9:
-----
What will the value of d3 be after this program?

     text

     move.b    #12,lab   ;we put the byte 12 in 'lab'
     move.b    #14,lac   ;"  "  "  "  the byte 14 in 'lac'
     move.b    #15,lad   ;"  "  "  "  the byte 15 in 'lad'

     move.l    #lab,a3   ;we put the address of 'lab' in a3 
     move.b    #1,d1     ;we put the byte 1 in the low weight byte of a1

fff  move.b    (a3)+,d3  ;we take the value pointed by a3, we increment
                         ;a3 by 1 (.b) and we put it in the low weight byte
                         ;of d3.
     dbf       d1,fff    ;we decrement d1 by 1 unit until d1=-1
                         ;if d1 is different from -1, we jump to 'fff'

     add.b     (a3),-(a3);we add the byte pointed by a3 (we decrement 
                         ;a3 by 1 (.b)) to the byte pointed by the new
                         ;address of a3.
     move.b    -(a3),d3  ;We decrement a3 by 1 (.b) and we put the value
                         ;thus pointed in the low weight byte of d3
     add.b     (a3),d3   ;We add the value pointed by a3 to d3 (byte)

     
     bss

lab  ds.w      1         ;we reserve 1 L-M
lac  ds.b      1         ;we   "   1 byte
lad  ds.w      5         ;we reserve 5 words

     end


In 'fff', the first time: d1=1, a3 points to 'lab'.

With 'move.b (a3)+,d3', we take the byte in 'lab', we increment a3 by
one unit (.b) so now a3 points at 'lab'+1 and we put the byte in 
the low weight byte of d3, so d3=12 (we have put the byte 12 in 'lab').

Then we have:
 
'dbf d1,fff': d1=d1-1=0 as 0 is different from -1, we jump to 'fff'.

again: 

'move.b (a3)+,d3': we take the byte pointed by a3 (here a3 points to the 
second byte of 'lab', which is 0 since here nothing has been initialized...)and we put it
in d3 after having incremented a3 by one unit: d3=0 and a3 points on 
'lab'+2='lac'.
We arrive at 'dbf d1,fff',again, d1=d1-1=-1, this time we will no more
go to 'fff' because d1=-1: we continue.

Then comes 'add.b  (a3),-(a3)', a3 points to 'lac' ('lab'+2), we take the
data (the byte) pointed by a3 (which is worth 14), we decrement a3 by one
unit (.b) and we add it to the new value thus pointed by a3 (which is 0)

finally:

With 'move.b  -(a3),d3' , we decrement a3 by one unit (so a3 points at  
'lab') and we put the data thus pointed in the low weight byte of
d3, so d3=12.

Finally, with 'add.b (a3),d3', we add to d3 the data pointed by a3,
as a3 points at 'lab', we get: d3=d3+12=12+12=24

Finally: d3=24. and a3 points at 'lab' ...








     
nr°10:
------

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

     text

     move.b    #10,a     ;we put the byte 10 in a
     move.b    #11,b     ;            11 in b
     move.b    #12,c     ;            12 in c 
     move.b    #13,d     ;            13 in d 
     move.b    #98,e     ;            98 in e

     move.l    #begin,a0   ;we put the address of 'begin' in a0
                         ;:a0 points to 'begin'
     move.b    (a0)+,d0  ;we put the byte pointed by a0 :0 because nothing is
                         ;initialized in 'begin',(we increment a0 by one 
                         ;unit (.b)), in d0, so:
                         ;d0=0 (byte), a0=a0+1, so a0 points at 'a'.
     move.b    (a0)+,d1  ;same for d1: d1=10, a0 points at 'a'+1='b'
     move.b    (a0)+,d2  ;for d2: d2=11, a0 points at 'b'+1='c'
     move.b    (a0),d3   ;We place the byte pointed by a0 in d3:
                         ;a0 points at 'c', therefore d3=12 
     move.b    -(a0),d4  ;decrement a0 by one unit and put the byte
                         ;thus pointed by a0 in the low weight byte
                         ; of d4:
                         ;as a0 was pointing to 'c', we have now:
                         ;a0='c'-1='b', so d4=11 (we have put 11 in 'b')

     bss

begin  ds.b      1    ;reserve 1 byte in begin
a    ds.b      1    ;in a
b    ds.b      1    ;in b
c    ds.b      1    ;in c
d    ds.b      1    ;in d
e    ds.b      1    ;in e
f    ds.l      4    ;reserve in L-M in f

     end

So: d0=0, d1=10, d2=11, d3=12, d4=11, a0 points at 'b'.


nr°11:
------
One had to find the value of a4 and d0, d1 after this program.

     text

     move.b    #3,d0     ;we put the byte 3 in the register d0
     move.l    #stack,a4   ;we put the address of 'stack' in a4

rrr  move.b    -(a4),d1  ;we decrement a4 by one unit (.b) and put the 
                         ;byte pointed by a4 in the low weight byte of d1
     add.b     #4,d1     ;we add the byte 4 to the low weight byte of d1
     dbf       d0,rrr    ;loop until d0=-1

     data

     dc.b      1,2,3,4,5,6,7,8,9   ;9 bytes are stored here
stack  dc.b      245                 ;byte 245 at the address 'stack'

     end


at the end of the program, d0=-1, it is the loop counter...

the loop:

1st pass: d0=3, a4 points to 'stack'
with 'move.b -(a4),d1', we decrement a4 by 1 unit (because .b), we take 
the byte pointed by a4 and we place it in the low weight byte of d1:
a4='stack'-1 so a4 is pointing to the byte '9', d1=9+4=13 because we 'add.b #4, d1'
We decrement d0 and go back to 'rrr' because d0=2

2nd pass: d0=2, a4 points to the byte '9'
The same operation as before:
a4 is pointing to the byte '8', d1=8+4=12 (byte), d0=2-1=1

3rd pass: d0=1, a4 points to the byte '8'
the same, we obtain:
a4 is pointing to the byte '7', d1=7+4=11 (byte), d0=1-1=0

4th pass: d0=0, a4 points to the byte '7'
the same, we have:
a4 is pointing to the byte '6', d1=6+4=10 (byte), d0=0-1=-1 so we get out of
the loop and finally:

d0=-1, d1=10, a4 points to the byte '6'


nr°12:
------
Let's find what is in 'out' and the value of d2.

     text

a    equ       3    ;we assign 3 to 'a'
b    equ       5    ;        5 to 'b'

     move.b    a,d2      ;we put the byte pointed by 'a' in the low weight
                         ;of d2, so d2=3
     add.b     b,d2      ;we add the byte pointed by 'b', so
                         ;d2=d2+5=8 (byte)

     move.l    #g,a5     ;we put the address of 'g' in a5
     move.b    d2,(a5)   ;we put the low weight byte of d2 at 
                         ;the address pointed by a5 (so in 'g') 
     move.b    d2,-(a5)  ;we put the low weight byte of d2 (we decrement
                         ;a5 by one unit) at the new address of a5
                         ;(here, a5 points to 'out', so we will find d2
                         ;i.e. the byte 8 in 'out')
     move.b    (a5)+,d2  ;we put the byte pointed by a5 (so the byte 8)
                         ;(we increment a5 by 1 unit) in the low weight byte
                         ;of d2: d2=8 and a5 points to 'g'
     move.b    (a5),d2   ;we put the byte pointed by a5 in the low weight 
                         ;of d2: a5 points to 'g', in 'g' there is
                         ;the byte 8 so d2=8 once again. 

     bss

out  ds.b      1
g    ds.b      4

     end

conclusion: in 'out' there is the byte 8 and d2=8 (byte)


nr°13:
------
We need to find the value of d1, d2, d3, d4, and a0.

     text

     move.l    #out,a0   ; we place the address of 'out' in a0
     move.w    #2,d3     ; we place the word '2' in d3
     move.w    (a0),d1   ; we place the word pointed by a0 (which is 15) into
                         ; the low word of d1: d1=15 (a0='out')
     move.w    -4(a0),d2 ; we take the word pointed by a0-4 (mode d(an))
                         ; and place it in the low word of d2: d2=12 (a0='out')

     move.w    -4(a0,d3),d3   ; we take the word pointed by 'a0'+d3-4
                              ; (mode d(an,rn)) which is 'a0'-2 and place it
                              ; in the low word of d3: d3=2356 (a0='out')  
     move.w    -(a0),d4       ; we decrement a0 by 2 units (.w) so a0
                              ; now points to 2356 and we place this
                              ; word in the low word of d4:
                              ; d4=2356 and a0 points to the word 2356
     data

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

     end 

Conclusion: d1=15, d2=12, d3=2356, d4=2356, and a0 points to the word 2356

nr°14:
------
We were asked:
What are the different values taken by a0 during this program?
What is the final value contained in 'res'?

     text
     
     move.l    #a,a5     ; we place the address of 'a' in a5
     move.l    #2,d2     ; we place the L-M '2' in d2 

ttt  move.b    #1,(a5)+  ; we add the byte 1 to the address pointed by a5
                         ; then increment a5 by one unit (.b)
     dbf       d2,ttt    ; loop
     move.b    #5,(a5)   ; we place the byte 5 at the address pointed by a5

     move.l    #vec,a1   ; we place the address of 'vec' in a1
     move.b    #3,d0     ; we place the byte 3 in the low byte
                         ; of d0
     move.b    #0,d2     ; we place the byte 0 in the low byte
                         ; of d2

cde  move.l    0(a1,d2),a0    ; we place the L-M pointed by 'a1'+d2 in a0
     add.l     #4,d2          ; we add the L-M 4 to d2
     move.b    (a0),res       ; we place the byte pointed by a0 in 'res'
     dbf       d0,cde         ; loop

     data

vec  dc.l      a,b,c,d        ; 4 L-M containing the addresses of 'a','b'
                              ; ,'c','d'

     bss

a    ds.b      1    ; here we reserve the bytes
b    ds.b      1
c    ds.b      1
d    ds.b      1
res  ds.b      1

     end

1st loop: in ttt
---------
1st pass: d2=2, a5 points to 'a'
----------
We place the byte '1' in 'a' then increment a5 by one unit, a5 now points
to 'b' and we go back to 'ttt' after decrementing d2

2nd pass: d2=1, a5 points to 'b'
----------
We place the byte '1' in 'b' then increment a5 by one unit, a5 now points
to 'c' and we go back to 'ttt' after decrementing d2

3rd pass: d2=0, a5 points to 'c'
----------
We place the byte '1' in 'c' then increment a5 by one unit, a5 now points
to 'd', then with 'dbf', we decrement d2 which now equals -1, i.e., we exit the loop.

With 'move.b #5,(a5)', we place the byte '5' at the address pointed by a5,
which is 'd'

At the end of this loop, we find the byte '1' in 'a', 'b', 'c' and
the byte '5' in 'd'

Then comes the 2nd loop in 'cde':
               ---------
1st pass: d2=0, d0=3, a1 points to 'vec'
-----------
We place the L-M pointed by 0+'vec'+d2 i.e., 'vec'+0 in a0: a0 thus equals 'a',
then we add '4' to d2, we place the byte pointed by a0 (in 'a') in
'res' with 'move.b (a0),res'. In 'a' there is the byte '1', so this
means placing the byte '1' in res.
With 'dbf d0,cde', we decrement d0 and return to 'cde'

2nd pass: d2=4, d0=2, a1 points to 'vec', a0 points to 'a'
----------
We place the L-M pointed by 0+'vec'+d2 i.e., 'vec'+4 in a0: a0 thus equals 'b',
then we add '4' to d2, we place the byte pointed by a0 (in 'b') in
'res' with 'move.b (a0),res'. In 'b' there is the byte '1', so this
means placing the byte '1' in res.
With 'dbf d0,cde', we decrement d0 and return to 'cde'

3rd pass: d2=8, d0=1, a1 points to 'vec', a0 points to 'b'
----------
We place the L-M pointed by 0+'vec'+d2 i.e., 'vec'+8 in a0: a0 thus equals 'c',
then we add '4' to d2, we place the byte pointed by a0 (in 'c') in
'res' with 'move.b (a0),res'. In 'c' there is the byte '1', so this
means placing the byte '1' in res.
With 'dbf d0,cde', we decrement d0 and return to 'cde'

4th pass: d2=12, d0=0, a1 points to 'vec', a0 points to 'c'
----------
We place the L-M pointed by 0+'vec'+d2 i.e., 'vec'+8 in a0: a0 thus equals 'd',
then we add '4' to d2, we place the byte pointed by a0 (in 'd') in
'res' with 'move.b (a0),res'. In 'd' there is the byte '5', so this
means placing the byte '5' in res.
With 'dbf d0,cde', we decrement d0: d0=-1, we exit the loop.

In 'res' we find the byte '5'. At the end: a0='d'

nr°15:
------
We need to find the value pointed by ret, at the end of this program.

     text

     move.l    #5,a      ; we place the L-M 5 in 'a'
     move.l    #a,a0     ; we place the address of 'a' in a0

     move.l    (a0)+,d2  ; we place the L-M pointed by a0 (which is 5) (we increment
                         ; a0 by 4 units) in d2
     move.l    d2,ret    ; we place the L-M contained in d2 in 'ret'

     bss

a    ds.l      2    ; we reserve 2 L-M in 'a' 
ret  ds.l      1    ; we reserve one L-M in 'ret'
     
     end

We find the L-M '5' at the address 'ret'.

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

     text

     move.b    #3,d1          ;place the byte 3 in the least significant
                              ;byte of d1
     move.b    #a,a0          ;place the address of 'a' in a0

mno  move.b    1(a0,d1),d0    ;place the byte pointed by 1+'a0'+d1 in
                              ;the least significant byte of d0
     add.b     #14,d0         ;add the byte 14 to the least significant
                              ;byte of d0
     add.b     a,d0           ;add the byte pointed by 'a', which is 0
                              ;to the least significant byte of d0
     dbf       d1,mno         ;loop (4 times)

     data

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

     end

1st pass in the mno loop: d1=3, a0 points to 'a', d0=0
----------
Place the byte pointed by 1+'a'+d1, which is 'a'+4 (thus the byte '8') in
d0. Add the byte 14 and the byte 0: d0=8+14+0=22
Then decrement d1, the loop counter, and return to 'mno'

2nd pass: d1=2, a0 points to 'a', d0=22
----------
Place the byte pointed by 1+'a'+d1, which is 'a'+3 (thus the byte '7') in
d0. Add the byte 14 and the byte 0: d0=7+14+0=21
Then decrement d1, the loop counter, and return to 'mno'

3rd pass: d1=1, a0 points to 'a', d0=21
----------
Place the byte pointed by 1+'a'+d1, which is 'a'+2 (thus the byte '6') in
d0. Add the byte 14 and the byte 0: d0=6+14+0=20
Then decrement d1, the loop counter, and return to 'mno'

4th pass: d1=0, a0 points to 'a', d0=20
----------
Place the byte pointed by 1+'a'+d1, which is 'a'+1 (thus the byte '5') in
d0. Add the byte 14 and the byte 0: d0=5+14+0=19
Then decrement d1, the loop counter, d1=-1, exit the loop

Finally:

d0=19 and a0 points to the address of 'a'







     
nr°17: 
------
Find the value of d3 after this program.

     text

     move.l    #a,a0          ;place the address of 'a' in a0
     move.b    #5,(a0)+       ;place the byte 5 at the address pointed by
                              ;a0 and increment a0 by one unit
                              ;thus placing byte 5 in 'a'
     move.b    #6,(a0)+       ;place the byte 6 at the address pointed by
                              ;a0 and increment a0 by one unit
                              ;thus placing byte 6 in 'a'+1
     move.b    -(a0),d2       ;decrement a0 by one unit and place
                              ;the byte pointed by a0 in the least significant
                              ;byte of d2
                              ;thus placing the byte from 'a'+1+1-1, which is
                              ;'a'+1 or byte 6 in d3
     move.l    #a,a0          ;place the address of 'a' in a0
     move.b    1(a0),d3       ;place the byte at 'a'+1 in the least significant
                              ;byte of d3
                              ;which is byte 6 in d3
     add.b     d2,d3          ;add the 2 bytes of d2 and d3, the
                              ;result is in d3: d3=6+6=12

     bss

a    ds.w      1              ;reserve 1 word in 'a'
     ds.b      1              ;reserve 1 byte in 'a'+2

     end

So, d3=12











nr°18:
------
Find what happens in 'stp', and what is contained in 'res'?
   
     text

     move.w    #5,d3     ;place the word 5 in the least significant
                         ;word of d3
     add.b     #6,d2     ;add the byte 6 to the least significant
                         ;byte of d2, so d2=0+6=6
     add.b     d2,d3     ;add the least significant bytes of d2 and
                         ;d3, the result is in d3: d3=11
     move.l    #ad,a0    ;place the address of 'ad' in a0

stp  jmp       10(a0)    ;jump to the address a0+10 (d(an) mode) which is
                         ;'ad'+10      
 
ad   move.l    #5,res    ;at 'ad', there is an instruction of a size
                         ;of 10 bytes (4 for '.l', +4 for the word '5',
                         ;+2 for extension words=10 bytes)
     move.b    d3,res    ;thus jump here and place the least significant
                         ;byte of d3 in 'res'
    
     bss

res  ds.b      1

     end

In 'stp', the program jumps over the instruction at 'ad' and in 'res', we find
the byte 11







nr°19:
------
Now the quick response questions:

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

 With 'move.w  #0,d0', place the word 0 in the least significant word of
 d0, this will set the 'Z' (Zero) bit of the CCR to 1.

 With 'add.w  #-2,d0', place the word -2 in the least significant word of
 d0, this will set the 'N' (Negative) bit of the CCR to 1.
  

b) Can we place a BYTE at an odd address?
 
   Yes!
   It's also possible with a Bit, but not with a Word or a Long Word
   (see the course...)


c) How many digits are used to code a L-M in HEXADECIMAL?

   By 8 Hex digits. (see the course)     


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

   FALSE!!
   The PC is indeed a register, but it's impossible to place a
   data in it. The PC is only changed by jump instructions and each time an instruction is executed.



e) The 'END' directive ends the program and allows return to the DESKTOP,
   True or False? Argue.
 
   FALSE!!
   It only indicates to the assembler that the listing is finished.
   To return to the DESKTOP (or GEM Desktop) you need to use a
   GEMDOS instruction (we will see how in detail)


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

   FALSE!!
   Review the course, everything is explained in detail...


g) Any addressing mode can be used for the operands of the
   68000 instructions.
   True or False?

   FALSE!!
   Instructions only accept certain addressing modes for their
   source and destination operands.
   Therefore, I will need to indicate for each instruction the different
   addressing modes accepted for the operands.

   For example: Move (an)+,d(pc,rn) will be impossible...
   We will see all this in detail when I comment on the different
   instructions of the 68000.




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



PIECHOCKI Laurent
8,impasse Bellevue
57980 TENTELING


  

Back to ASM_Tutorial