Lab 3

Lab Description:
In this lab, I had to create a calculator that can add, subtract, and multiply using hla but I couldn’t use any if, while, for, and any related commands. I had to create those commands by using labels, and both conditional, unconditional Jump statement. I also couldn’t use the mul command to multiply. I created a “for” loop to add the input like for example (2*3=6 will be 2+2+2=6) to do the multiplication without the mul command.

Code:

program calc;
#include("stdlib.hhf");
static
input1: int32;
input2: int32;
output: int32;
input: int32;
begin calc;

stdout.put("********WELCOME**TO**HLA**CALCULATOR********", nl);
labelrepeat:
	mov(0,eax);
	mov(0,ebx);
	mov(0,output);
stdout.put("Enter your first input?", nl);
    stdin.get(input1);
stdout.put("Enter your second input?:");
    stdin.get(input2);
stdout.put("input 1 for add",nl,"input 2 for subtract",nl, "input 3 for multiplication", nl, "input 0 to exit", nl);
    stdin.get(input);

// Assembly code ADD
    mov(input1, eax);   
    mov(input2, ebx);
cmp(input,1);
jne Skipstaments;
    add(eax,ebx);
    mov(ebx, output);
    stdout.put("ADD=", output, nl);
Skipstaments:

// Assembly code SUB
    mov(input1, eax);
    mov(input2, ebx);
    cmp(input, 2);
jne Skipstamentss;
    sub(ebx, eax);
    mov(eax, output);
    stdout.put("SUB=",output,nl);
Skipstamentss:
//Assembly code Multiply without the use of mul
    mov(input1, eax);
    mov(input2, ebx);
    mov(0,ecx);
    cmp(input, 3);
jne Skipstamentsss;

//for loop
forstmt:
    cmp(ecx, ebx);
jnl forend;
    inc(ecx);
    add(eax, output);

jmp forstmt;
forend:
    stdout.put("Mul=",output,nl);
Skipstamentsss:
	cmp(input,0);
jne labelrepeat;

end calc;

Screenshots:

ADD & SUBTRACT:

Screenshot from 2013-11-02 12:27:53

MULTIPLY:

Screenshot from 2013-11-02 12:30:19

Leave a Reply