The A-instruction: symbolic an binary syntax

Semantics: Set the A register to value

Symbolic syntax:	Example:

@value @21 0value

Where value is either:	Effect: sets the A register to 21

a non-negative decimal
≤ 32767$ ( = 215-1 ) or

a symbol referring to
such a constant (later)

Binary syntax:

0000000000010101

Where value is a 15-bit	Effect: sets the A register to 21
binary number

C-Instruction

Symbolic syntax:	dest = comp; jump

Binary syntax:	1 1 1 a c1 c2 c3 c4 c5 c6 d1 d2 d3 j1 j2 j3

Not Used

OP-Code comp bits	dest bits jump bits

comp	c1	c2	c3	c4	c5	c6
0		1	0	1	0	1	0
1		1	1	1	1	1	1
-1		1	1	1	0	1	0
D		0	0	1	1	0	0
A	M	1	1	0	0	0	0
!D		0	0	1	1	0	1
!A	!M	1	1	0	0	0	1
-D		0	0	1	1	1	1
-A	-M	1	1	0	0	1	1
D+1		0	1	1	1	1	1
A+1	M+1	1	1	0	1	1	1
D-1		0	0	1	1	1	0
A-1	M-1	1	1	0	0	1	0
D+1	D+M	0	0	0	0	1	0
D-A	D-M	0	1	0	0	1	1
D+A	D+M	0	0	0	0	1	0
D-A	D-M	0	1	0	0	1	1
A-D	M-D	0	0	0	1	1	1
D&A	D&M	0	0	0	0	0	0
D|A	D|M	0	1	0	1	0	1
a=0	a=1						

Beispiel:

1 1 1 1 0 1 0 1 0 1 1 0 1 1 0 0

entspricht:

AM = D|M;JLT

dest	d1	d2	d3	effect: the value is stored in:
null	0	0	0	The value is not stored
M	0	0	1	RAM[A]
D	0	1	0	D register
MD	0	1	1	RAM[A] and D register
A	1	0	0	A register
AM	1	0	1	A register and RAM[A]
AD	1	1	0	A register and D register
AMD	1	1	1	A register, RAM [A], and D register

jump	j1	j2	j3	effect
null	0	0	0	no jump
JGT	0	0	1	if out>0 jump
JEQ	0	1	0	if out=0 jump
JGE	0	1	1	if out≥0 jump
JLT	1	0	0	if out<0 jump
JNE	1	0	1	if out≠0 jump
JLE	1	1	0	if out≤0 jump
JMP	1	1	1	unconditional jump

Arbeit mit Registern und Speicher

D: data register

A: address/data register

M: das derzeit ausgewählte memory register M=RAM[A]

Beispiele:

// D = 10

@10 // A = 10

D=A // D = 10

// D++

D=D+1 // D = 11

// D=RAM[17]

@17 // A = 10

D=M

//RAM[17]=0

@17

M=D

//RAM[17]=10

@10

D=A

@17

M=D

//RAM[5] = RAM[3]

@3

D=M

@5

M=D

Welche der folgenden Zeilen vervollständigt das Programm so, dass RAM[11]=10 ist?

@10

D=A

A=D+1

M=D

D=A

M=A

D=M

Lösung:

@10	// A = 10

D=A	// D = 10

A=D+1	// A = M = 11

M=D	// M = D

Antwort:

Welche der folgenden Zeilen vervollständigt das Programm so, dass RAM[11]=10 ist?

A	D

@10	10	?

D=A	10	10

A=D+1	11	10

Wir müssen RAM[11] ändern, und da A=11 und M als RAM[A] definiert ist, müssen wir auf M zugreifen. Der Wert, den wir setzen müssen, ist 10, und D hat diesen Wert, also lautet die Antwort M=D.

// Program: Add2.asm

// Computes: RAM[2] = RAM[0] + RAM[1]

// Usage: put values in RAM[0], RAM[1]

@0	// in RAM[0] = 10 --> A = 0

D=M	// D = RAM[0] --> D = 10

@1	// A = 1

D=D+M	// D = D + RAM[1]

@2

M=D	// RAM[2] = D

2025-02-25T08:41:21.625000000