1. Code to assembly #1
Write the assembly code for the following:
if (x < y)
y=x;
else
Assume:
y= y*32;
i. ‘x' and ‘y' addresses are stored in %ecx and %edx.
ii. Use registers %eax and %ebx to store ‘x' and ‘y' during computations.
iii. Use immediate for any constants.
2. Code to assembly #2
Write the assembly level program for the following:
if (a[1] == 0)
a[2]++;
else
if (a[2]!= 0)
a[2+i] += a[i+1];
Assume:
1. Base address of integer array a is stored in %esp
2. The value of i is available in %ecx
3. Computing assembly code output. Computing condition codes.
Given the following state of the registers and memory:
Address
|
Value
|
|
Register
|
Value
|
0x309
|
0xFF
|
%al
|
0x99
|
0x30A
|
0x1
|
%ebx
|
0x30C
|
0x30B
|
0x2
|
%ecx
|
0xFFFFFFFF
|
0x30C
|
0x20
|
%dl
|
0xFF
|
|
|
%esp
|
0x1
|
The following instructions are executed sequentially:
cmpb %dl, %al jge L1
cmovl $EC, %al subb %dl, %al js L2
L1:
subb $3, %ebx L2:
addb (%ebx), %dl
Fill up the below table as follows:
• Cross out the instructions that are not executed (if any).
• After every instruction is executed, write the status of the condition codes and changes to any register or memory location in the adjacent columns.
• What are the final hexadecimal values of the registers %al, %ebx %ecx and %dl?
Instruction
|
CF
|
ZF
|
SF
|
OF
|
Your calculations to determine output of move, compare and arithmetic operations & changes to register/memory (if any)
|
cmpb %dl, %al
|
|
|
|
|
|
jge L2
|
|
|
|
|
|
cmovl $EC, %al
|
|
|
|
|
|
subb %al, %dl
|
|
|
|
|
|
js L1
|
|
|
|
|
|
L1:
subb $3, %ebx
|
|
|
|
|
|
L2:
addb (%ebx), %dl
|
|
|
|
|
|
4. Stack creation
Each time a new procedure is called, a new stack frame is created for that procedure. Assume that a procedure P calls procedure Q and a new stack frame has been created.
You are given the following information:
1. Q has two arguments:
a. Argument 1 of type Integer
b. Argument 2 of type Character
2. The stack frame for P begins at memory address 0x200.
3. The memory address of Argument 1 is 0x100
Questions:
1. Draw a stack frame structure to show the caller frame P and the called frame Q. Draw the following in this frame structure:
a. The "top" and "bottom" of procedure P's stack
b. The location and memory address of Arguments 1 & 2.
c. The first value stored in the new stack frame (In hex). What does this value represent?
d. The value in %ebp after Q's stack is created
2. Which register stores Q's frame pointer after the stack frame for Q is created?
3. What is the value stored in this register before the stack for Q was created?