session 4: atomic language. take turing machine look back to 1 st session’s work on hardware, risc...

Post on 18-Jan-2018

214 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

S1 ? ?

TRANSCRIPT

Session 4: Atomic Language.

Take Turing Machine

Look back to 1st session’s work on hardware, RISC and CISC register-based machines.

Also look forward to next week’s work on Software, computer programming languages.

S1

?

S1

?

S2

S1

S2

Sn

S1

?

S1

?

ax

eax

rax

0a

q

s1a2a 0b 1b 2b

m n

4 2 1 1 2 4

(s,m,n,q) (s*,m*,n*,q*)

4 2 1 1 2 4

0a

q

s1a2a 0b 1b 2b

m n

4 2 1 1 2 4

(s,m,n,q) (s’,m’,n’,q’)

sm n

8 4 2 1 1 2 4 8

0 1 1 0 1 1 1 0

(s,m,n) = ( , , )

s*m* n*

8 4 2 1 1 2 4 8

0 1 1 0 1 1 1 0

(s*,m*,n*) = ( , , )

sm n

8 4 2 1 1 2 4 8

0 1 1 1 0 1 1 0

(s,m,n) = ( , , )

s*m* n*

8 4 2 1 1 2 4 8

0 1 1 1 0 1 1 0

(s*,m*,n*) = ( , , )

* ( / 2)* 2* / 2

s rem nm s mn n

mov reg,0 Put 0 into register “reg”

inc reg Add 1 to the contents of register “reg”

decjmpreg reg,lab If register “reg” is zero, jump to the label “lab” else subtract 1 from “reg” and do the next instruction

jmp lab Jump straight to the label “lab”

hlt Halt

inc reg Add 1 to the contents of register “reg”

decjmpreg reg,lab If register “reg” is zero, jump to the label “lab” else subtract 1 from “reg” and do the next instruction

assume ecx is zeroinc ecxinc ecxinc ecx

assume ecx is zeroL1: …

…decjmpreg ecx,L1

mov ecx,3mov eax,0mov ebx,0

L3: decjmpreg ecx,L4inc ebxjmp L3

L4: nop

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov eax,0inc eaxhlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov ecx,3 decjmpreg ecx,L1L1: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov ecx,3L2: decjmpreg ecx,L1 jmp L2L1: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

is S = q?

read line

inc line pointer

end ofTable?

end (error)

is “read” = s? inc line pointer

move left/right

write in cell

Current state

read write moveL / R

New state

write in cell end ofTable?

end (error)

main PROC

mov ecx,N

mov eax,0

l1: mov ebx,0

decjmpz l2

inc ebx

decjmpz l2

inc eax

jmp l1

l2: hlt

main ENDP

ecx ebx eax

m

s

n

z

ALU

sm n

m

s

n

z

ALU z = 2m

* ( / 2)* 2* / 2

s rem nm s mn n

z = z + s

m* = z

s* = rem(n/2)

n = z

z = n/2

mov ecx,5mov eax,0

L3: mov ebx,0decjmpreg ecx,L4inc ebxdecjmpreg ecx,L4inc eaxjmp L3

L4: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov ecx,5mov eax,0

L3: mov ebx,0decjmpreg ecx,L4inc ebxdecjmpreg ecx,L4inc eaxjmp L3

L4: hlt

eax

ebx

ecx

edx

5

0

0

4

1

3

1

eax

ebx

ecx

edx

0

2

1

1

2

eax

ebx

ecx

edx

0

0

1

mov ecx,3mov eax,0

L3: decjmpreg ecx,L4inc eaxinc eaxjmp L3

L4: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov eax,3mov edx,0

L3: decjmpreg eax,L4inc edxinc edxjmp L3

L4: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov ecx,3L3: mov eax,0

decjmpreg ecx,L4inc eaxjmp L3

L4: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov reg,0inc regdecjmpz Ljmp L

mov ecx,3mov ebx,0

L3: decjmpreg ecx,L4inc ebxinc ebxjmp L3

L4: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov ecx,3mov ebx,0

L3: decjmpreg ecx,L4inc ebxinc ebxjmp L3

L4: hlt

eax

ebx

ecx

edx

3

0

2

1

2

eax

ebx

ecx

edx

1

3

4

eax

ebx

ecx

edx

0

5

6

……

L1: decjmpreg ecx,L2jmp L1

L2 …

eax

ebx

ecx

edx

3

2

eax

ebx

ecx

edx

1

eax

ebx

ecx

edx

0

L2: decjmpreg eax,L1inc edxinc edxjmp L2

L1: decjmpreg ebx,L3inc edx

L3: decjmpreg edx,L4inc eaxjmp L3

L4: mov ebx,0decjmpreg ecx,L6inc ebxdecjmpreg ecx,L6inc edxjmp L4

L6: decjmpreg edx,L7inc ecxjmp L6

L7: hlt

eax holds m ebx holds s ecx holds n edx holds z

If s is 1 z = z + 1

z = 2m

m* = z

s* = rem(n/2) z = n/2 whole

n* = z

rem whole

1 2 4 8 1 2 4 8

8 4 2 1 8 4 2 1

8 4 2 1 8 4 2 1

decjmpreg ebx,L3inc edx

L3:

eax holds m ebx holds s ecx holds n edx holds z

sm n

8 4 2 1 1 2 4 8

0 1 1 0 1 1 1 0

sm n

8 4 2 1 1 2 4 8

0 1 1 1 0 0 0 11

sm n

8 4 2 1 1 2 4 8

0 1 1 1 0 0 0 11

; get current state

; read current symbol s. (Read ebx)

; get new state using value of s (in ebx)

; write new symbol. (Write to ebx)

; get the movement direction

; execute the movement code (left or right)

; assume we start in state 0

; write the starting symbol into ebx

; write the code for move right or move left

; write the new symbol into ebx

; jump to the new state code

; repeat lines 2 to 4

The movement code (left or right) depending on the state

1

2

x

y

Head move

right code

Head move

left code

read the symbol sstore sif(s == 0), set s = 0 and jmp to move-right codeif(s == 1), set s = 0 and jmp to move-right code

use the stored s

if(s == 0), jump to the even state code

if(s == 1), jump to the odd state code

mov eax,3inc eaxinc ebx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov ecx,2L1: decjmpreg ecx,L2

jmp L1L2: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

mov eax,0mov ecx,2

L1: decjmpreg ecx,L2inc eaxjmp L1

L2: hlt

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

read the symbol sstore sif(s == 0), set s = 0 and jmp to move-right codeif(s == 1), set s = 0 and jmp to move-right code

use the stored s

if(s == 0), jump to the even state code

if(s == 1), jump to the odd state code

Code for read-write

head moveleft

Code for read-write

head moveright

Current State S

Symbol read s

Symbol to write s*

Direction to move d

New state S*

Even 0 0 R Even

Even 1 0 R Odd

Even @ 0 N Halt

StateEven

0 1 1 1

8 4 2 1 8 4 2 1

0 1 1 1

8 4 2 1 8 4 2 1

1 11 1 1 0

1 2 4 8 1 2 4 8

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

eax

ebx

ecx

edx

Turing MachineTable

Tape t

R/W Head

top related