What Do These Assembly Instructions Do with $30 in Register d0?

  • Thread starter Thread starter chelsea9947
  • Start date Start date
Click For Summary
SUMMARY

The discussion focuses on the behavior of specific assembly instructions in Motorola 68000 architecture when the content of register d0 is $30. The instructions analyzed include bne, beq, bpl, and bmi, which control branching based on the value in d0. The tst instruction is used to test the value of d0 against zero, affecting the condition flags. The participants clarify that beq branches if d0 equals zero, while bne branches if d0 is not zero, and similar logic applies to bpl and bmi based on the sign of d0.

PREREQUISITES
  • Understanding of Motorola 68000 assembly language
  • Familiarity with register operations and branching instructions
  • Knowledge of condition flags (N and Z) in assembly
  • Basic concepts of comparing values in assembly
NEXT STEPS
  • Study the operation of the tst instruction in Motorola 68000 assembly
  • Learn about the implications of condition flags in assembly programming
  • Explore the differences between cmpi, cmp.l, and cmp.w instructions
  • Investigate practical examples of branching instructions in assembly code
USEFUL FOR

Assembly language programmers, computer architecture students, and anyone interested in low-level programming and control flow in Motorola 68000 assembly.

chelsea9947
Messages
7
Reaction score
0

Homework Statement



If the content of d0 is $30 state in words what each of the following numbered instructions will do when placed immediately after the test instruction below
tst d0

Homework Equations



a) bne fred
b) beq fred
c) bpl fred
d) bmi fred

The Attempt at a Solution



a) bne fred = [go to label fred] [if d0] [not equal to $30]
b) beq fred = [go to label fred] [if d0] [equal to $30]
c) bpl fred = [go to label fred] [if d0] [ plus $30]
d) bmi fred = [go to label fred] [if d0] [minus $30]

example

TST or tst direct against zero instruction.

This is really the same as compare with zero

tst <effective address>

it subtracts 0 from a copy of the location specified and sets the condition flags accordingly.
If the value to be tested is positive then +N –0 = +N or if negative –N –0= -N or if 0 then 0-0 =0

tst d0 is d0 equal to 0, greater than zero or less than zero

beq joe = [go to label joe] [if d0] [equal to 0]
bgt dan= [go to label dan] [if d0] [greater than 0]
blt ben= [go to label ben] [if d0] [less than 0]iam confused can someone help

If the content of d0 is $30 state in words what each of the following numbered instruction pairs will do.

a. cmpi #$30,d0
beq dan

b. cmp.l unknown,d0
bne dan

c. cmp.w d1,d0
bgt dan
 
Physics news on Phys.org
chelsea9947 said:

Homework Statement



If the content of d0 is $30 state in words what each of the following numbered instructions will do when placed immediately after the test instruction below
tst d0


Homework Equations



a) bne fred
b) beq fred
c) bpl fred
d) bmi fred


The Attempt at a Solution



a) bne fred = [go to label fred] [if d0] [not equal to $30]
b) beq fred = [go to label fred] [if d0] [equal to $30]
c) bpl fred = [go to label fred] [if d0] [ plus $30]
d) bmi fred = [go to label fred] [if d0] [minus $30]
These are not right. I'm a little rusty on Motorola 68000 assembly (which is what I think you are using), so I assume these instructions are inspecting the contents of the D0 register.
bne <label> - means branch to <label> if d0 is not equal to zero.
beq <label> - means branch to <label> if d0 is equal to zero.
bpl <label> - means branch to <label> if d0 is positive (plus).
bmi <label> - means branch to <label> if d0 is negative (minus).
chelsea9947 said:
example

TST or tst direct against zero instruction.

This is really the same as compare with zero

tst <effective address>

it subtracts 0 from a copy of the location specified and sets the condition flags accordingly.
If the value to be tested is positive then +N –0 = +N or if negative –N –0= -N or if 0 then 0-0 =0

tst d0 is d0 equal to 0, greater than zero or less than zero

beq joe = [go to label joe] [if d0] [equal to 0]
bgt dan= [go to label dan] [if d0] [greater than 0]
blt ben= [go to label ben] [if d0] [less than 0]
These all look fine to me.
chelsea9947 said:
iam confused can someone help

If the content of d0 is $30 state in words what each of the following numbered instruction pairs will do.

a. cmpi #$30,d0
beq dan

b. cmp.l unknown,d0
bne dan

c. cmp.w d1,d0
bgt dan

These compare instructions subtract the first operand from the second and set the N and Z flags as appropriate. For a, D0 - #$30 = what? Does control branch to label dan?
For b, you don't know what value is in unknown, but whatever value is in this location, it is either >= $30 or < $30.
For c, you don't know what is in D1, but you can say what will happen depending on what value is in that register.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 1 ·
Replies
1
Views
13K
  • · Replies 4 ·
Replies
4
Views
17K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
5K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 2 ·
Replies
2
Views
4K