Menu

Convert C Language Assembly Language Assembly Simulator Assembly Instructions Program Coun Q43878840

Convert C language to Assembly Language for AssemblySimulator

Assembly Instructions :

Program should count the taxicab distance of the empty space (inthis case represented by the number 16) to the last index.

Start Position -> 8000h

Result -> R1

If error return FFFFh in R1

Rules :

Program should end as follow -> END: JMP END ;END OFPROGRAM

C code :

#include

int main ()
{
int array[] = {9, 7, 1, 6, 13, 3, 12, 2, 11, 15, 10, 14, 5, 16, 8,4};
int i, row, rowcounter = 1, columncounter = 1, nrOfcolumns = 4,nrOfrows = 4, result = 0;
  
  
  
  
for( i = 0; i <= 16; ++i )
{
// Calculate each column, reset(change to value 1) for each 4values
if(columncounter > 4)
columncounter = 1;
  
// Calculate row
if(array[i] == 16)
{
if(rowcounter <= 4)
row = 1;
else if (rowcounter <= 8)
row = 2;
else if (rowcounter <= 12)
row = 3;
else if (rowcounter <= 16)
row = 4;
  
break;
}
  
rowcounter ++;
columncounter++;
}
  
// Using the taxicab formula |x1-x2| + |y1-y2| when it finds thenumber 16
result = abs(row-nrOfrows) + abs(columncounter-nrOfcolumns);
  
printf(“nResult: %d”,result);
  
return 0;
}

Example of another working assembly program for P3 Simulator.Try to keep the same code configuration

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; EP1A1 (Example 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function EP1A1(N)
; res = 0
; For i=1 To N
; res=res+i
; Next
; EP1A1=res
; End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 1. Arguments in memory, away from the start of the program
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORIG 1000h

_N WORD 10

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; If the program reaches 1000h, overlaps
; the memory value of _N, that at the moment is
; 10.
; As it’s a small program, the risk of that happening
; is very small.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 2. Allocate the program in the beggining fof the memory
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; the returned value stays at R1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORIG 0000h

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 3. Inititate R1 that is res with value 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EP1A1: MOV R1,R0 ; R1 <- res

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 4. Initiate R2 that is the iterator variable i
; with the value 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOV R2,R0 ; R2 <- i

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 5. for each step of the cicle, increase the variable
;iterator value
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Cicle: INC R2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 6. Add the iterator variable i (R2)
; to the result res (R1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ADD R1, R2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 7. Check if iterator variable i (R2)
; have reached the limit that we are interested in _N
; Note that the access to _N is M[_N] as we are interested
; in having the value of _N, and not the memory
; position of _N, that is 1000h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CMP R2,M[_N] ; i!=_N

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 8. If the limit is not being reached,
; continue to the next cycle
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

BR.NZ Cicle

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 9. The limit has been reached
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

End: JMP End ; End of program

Expert Answer


Answer to Convert C language to Assembly Language for Assembly Simulator Assembly Instructions : Program should count the taxicab …

OR