CENG 222 – Computer Organization
Lab Work 5
Jump and Labels
JMP instruction allows to “jump”
into an address of a instruction in our program. You can make loops by using
JMP. Usage of JMP:
JMP <address or label name>
In assembly programs, we
generally use labels to mark a starting point of a code. They end with a colon
sign (“:”). Example:
L1:
…
MOV
…
SUB
…
…
JMP
L1 ; Jump into the first
instruction after the label “L1”.
Testing conditions and Conditional Jump
In order to test a condition, you
can use SUB or AND instructions. For example you can test A = B, A > B, A
>= B, A < B and A <=B conditions using SUB. You can also test the
status of any bit of a register by using AND. These instructions will modify
the flag bits according to the results they produce. Therefore, you can make a
conditional jump using flag bits’ status. However, SUB and AND instructions
also store the result into the destination register. If you just want to test
the condition without modifying operands, you need to use CMP and TEST
instructions. These instructions are used to modify just the flag bits.
CMP is the same as SUB but it does not modify the destination. TEST is the same as AND but it does not
modify the destination. However they both modify the flag bits.
Analyze the code below:
…
MOV
CX, 0
L1:
CMP
CX, 10
JE
L2 ; Go to L2 if
CX = 10
INC
CX
JMP
L1 ; Go to L1 (CMP
instruction)
L2:
…
Some of conditional jump
instructions are:
JE, JNE, JZ, JNZ, JG, JNG, JL, JNL, JLE, JGE, JNLE, JNGE
JE: Jump if equal to
JNE: Jump if not equal to
JZ: Jump if zero
JNZ: Jump if not zero
JG: Jump if greater than
JNG: Jump if not greater
than
JL: Jump if less than
JNL: Jump if not less than
JLE: Jump if less than or
equal to
JGE: Jump if greater than
or equal to
JNLE: Jump if not less than
nor equal to (same as JG)
JNGE: Jump if not greater than
nor equal to (same as JL)
Please note that conditional jump
instructions are useless alone, but if you use an instruction that modifies
flag bits, before the jump instruction, you can make IF…THEN…ELSE structures.
For example:
CMP
var1, var2 ; Compare var1 and
var2
JG
L1 ; Jump to L1
if var1>var2
… ; “IF” block
… ; These
instructions will be executed if var1<=var2
JMP
L2 ; End of “IF”
block, we need to jump L2
L1:
… ; “ELSE” block
… ; These
instructions will be executed if var1>var2
L2: ; End of “IF…ELSE” block
LOOP instruction
LOOP instruction allows creating
a simple loop using CX register as a counter.
Usage:
LOOP <address of label>
You need to initialize CX first
for the number of repentance of the loop. Analyze the code below:
MOV
CX, 10 ; Loop 10 times
L1:
…
… ; Instructions
in the loop
…
LOOP
L1
LOOP instruction simply
decrements CX and tests if it is zero. If not zero, then jump. Otherwise, continue.
EXPERIMENTS
1.
Find the sum [1+2+3+4+5+...+10] by using both
compare-jump combination and loop instruction.
2.
Find the sum [1+3+5+..+17] by using both compare-jump
combination and loop instruction.
3.
Find the sum of numbers between 0 and 20 that are not
divisible by 4
4.
Write a program to find the factorial of the number
given in AL register. (Assume that the number is sufficiently small so that the
factorial wont be larger than 32 bits)
No comments:
Post a Comment