This homework tests your ability to evaluate potential pipeline hazards. The fol
ID: 3843399 • Letter: T
Question
This homework tests your ability to evaluate potential pipeline hazards. The following program is used as a model. It computes vehicle sales by large (>50000) and small makes.
// WarRawWawRarSample.cpp : Sample program for Homework 5
#include <iostream>
#include <string>
#define makes 29
int main(int argc, char* argv[])
{
// Vehicle sales from
// http://online.wsj.com/mdc/public/page/2_3022-autosales.html#autosalesD
char makers[makes][12] = {
"GM", "Ford", "Chrysler", "Toyota",
"Honda", "Nissan", "Hyundai", "Mazda",
"Mitsubishi", "Kia", "Subaru", "Mercedes",
"Volvo", "Volkswagen", "Audi", "BMW",
"Porsche", "Fiat", "Tesla", "Jaguar",
"Land Rover", "Alfa Romeo", "Mini", "Smart",
"Ferrari", "Maserati", "Bentley", "Lamborghini",
"Rolls Royce"};
int sales[makes] = {
259557, 229739, 196526, 211125,
148829, 123861, 62213, 26195,
9674, 56508, 50380, 31825,
6168, 27112, 17801, 24951,
5410, 3045, 2900, 1087,
5188, 60, 4796, 466,
217, 1066, 110, 89,
79};
int i, j, large = 0, small = 0, largetot = 0, smalltot = 0;
const int lim = 50000;
for (i = 0; i < makes; i++) {
if (sales[i] > lim) {
large++;
largetot += sales[i];
}
else {
small++;
smalltot += sales[i];
}
}
std::cout << "Large:" << large << " vehicles:" << largetot << " Small:" << small << " vehicles:" << smalltot << ' ';
return 0;
}
On the following page, you will find the assembly code generated by the for loop above. List the type of hazard (WAR, WAW, RAW, RAR, Control, or none) and the data item causing the hazard in the spaces provided. These lines will be identified by an arrow ( ). Ignore lines marked N/A. The associated C++ code is interspersed. Note that the dword ptr [i] syntax refers to i as a variable, not as a subscript.
Address
Opcode
Operands
Hazard Type
Caused By
for (i = 0; i < makes; i++) {
010369EF
mov
dword ptr [i],0
N/A
010369F9
jmp
main+5EAh (01036A0Ah)
N/A
010369FB
mov
eax,dword ptr [i]
01036A01
add
eax,1
01036A04
mov
dword ptr [i],eax
01036A0A
cmp
dword ptr [i],1Dh
N/A
01036A11
jge
main+65Ah (01036A7Ah)
N/A
if (sales[i] > lim) {
01036A13
mov
eax,dword ptr [i]
01036A19
cmp
dword ptr sales[eax*4],0C350h
N/A
01036A24
jle
main+630h (01036A50h)
N/A
large++;
01036A26
mov
eax,dword ptr [large]
N/A
01036A2C
add
eax,1
N/A
01036A2F
mov
dword ptr [large],eax
N/A
largetot += sales[i];
01036A35
mov
eax,dword ptr [i]
01036A3B
mov
ecx,dword ptr [largetot]
01036A41
add
ecx,dword ptr sales[eax*4]
01036A48
mov
dword ptr [largetot],ecx
}
else {
01036A4E
jmp
main+658h (01036A78h)
N/A
small++;
01036A50
mov
eax,dword ptr [small]
01036A56
add
eax,1
N/A
01036A59
mov
dword ptr [small],eax
N/A
smalltot += sales[i];
01036A5F
mov
eax,dword ptr [i]
N/A
01036A65
mov
ecx,dword ptr [smalltot]
N/A
01036A6B
add
ecx,dword ptr sales[eax*4]
N/A
01036A72
mov
dword ptr [smalltot],ecx
}
}
01036A78
jmp
main+5DBh (010369FBh)
N/A
Which hazard type listed on the previous page (not none) is not really a hazard? ___________________
Address
Opcode
Operands
Hazard Type
Caused By
for (i = 0; i < makes; i++) {
010369EF
mov
dword ptr [i],0
N/A
010369F9
jmp
main+5EAh (01036A0Ah)
N/A
010369FB
mov
eax,dword ptr [i]
01036A01
add
eax,1
01036A04
mov
dword ptr [i],eax
01036A0A
cmp
dword ptr [i],1Dh
N/A
01036A11
jge
main+65Ah (01036A7Ah)
N/A
if (sales[i] > lim) {
01036A13
mov
eax,dword ptr [i]
01036A19
cmp
dword ptr sales[eax*4],0C350h
N/A
01036A24
jle
main+630h (01036A50h)
N/A
large++;
01036A26
mov
eax,dword ptr [large]
N/A
01036A2C
add
eax,1
N/A
01036A2F
mov
dword ptr [large],eax
N/A
largetot += sales[i];
01036A35
mov
eax,dword ptr [i]
01036A3B
mov
ecx,dword ptr [largetot]
01036A41
add
ecx,dword ptr sales[eax*4]
01036A48
mov
dword ptr [largetot],ecx
}
else {
01036A4E
jmp
main+658h (01036A78h)
N/A
small++;
01036A50
mov
eax,dword ptr [small]
01036A56
add
eax,1
N/A
01036A59
mov
dword ptr [small],eax
N/A
smalltot += sales[i];
01036A5F
mov
eax,dword ptr [i]
N/A
01036A65
mov
ecx,dword ptr [smalltot]
N/A
01036A6B
add
ecx,dword ptr sales[eax*4]
N/A
01036A72
mov
dword ptr [smalltot],ecx
}
}
01036A78
jmp
main+5DBh (010369FBh)
N/A
Explanation / Answer
RAR (read after read) is not a real hazard
010369FB mov eax,dword ptr [i] RAW i 01036A01 add eax,1 WAW i 01036A04 mov dword ptr [i],eax WAR i 01036A13 mov eax,dword ptr [i] RAW i 01036A35 mov eax,dword ptr [i] WAW i 01036A3B mov ecx,dword ptr [largetot] none largetot 01036A41 add ecx,dword ptr sales[eax*4] WAW sales 01036A48 mov dword ptr [largetot],ecx WAR largetot 01036A50 mov eax,dword ptr [small] WAW small 01036A72 mov dword ptr [smalltot],ecx WAR smalltotRelated Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.