Как правильно разделить числа в сборке HLA

Я получил Integer overflow в HLA nasm, Я хотел бы написать простую программу, которая делится при условии Distance переменная на 15000 и отображение оценки его, но я столкнулся с этой проблемой. Я просто не понимаю идею разделения в HLA, Спасибо заранее за вашу помощь.

program zad2;
#include( "stdlib.hhf");

static
    f    :  int32   := 15000;
    s    :  int32   := 300000;
    Distance: int32;

begin zad2;

        stdout.put("Give car distance", nl);
        stdin.get(Distance);
        if (Distance<150000) then
            MOV(15000, eax);
            div(Distance, EDX:EAX );
                stdout.put("div evaluation:",eax ,nl);
                    jmp menu0;
            endif
end zad2;

3 ответа

Решение

Я нашел свое решение этого. Пожалуйста, посмотрите на это. Все вещи с hla div не работают правильно на Windows версия компилятора hla. Это должно выглядеть так. Я надеюсь, что это может быть как-то полезно для sb;)

mov(Distance, eax);
mov(15000, ebx);
div(ebx);
mov(eax, age);
mov(0, edx)
mov(15000, eax);
div(distance, edx:eax);

Вам нужно обнулить расширение до edx, потому что это регистр, который содержит ваш остаток.

Я также изучал использование Div с HLA (сборка высокого уровня). Я хотел поделиться тем, что я нашел, чтобы помочь другим. Эта программа не была классным заданием, для этого нам нужно было все сделать вручную и показать свою работу. Я просто написал эту короткую программу для дополнительной практики, поэтому я подумал, почему бы не поделиться ею, она отлично сработала для проверки моей работы, плюс в ней используется деление. Эта программа возьмет символ, преобразует его в шестнадцатеричный в десятичный и после преобразования в двоичный, для выполнения двоичных преобразований используется idiv внутри цикла while и идет от 64 до 32, до 16, до 8, до 4, до 2, до 1 каждый раз. итерация цикла делит cl пополам.

          //Jonathan Lee Sacramento State University
    //CSC35
    //Professor Devin Cook
    //Feb 11 2023
    //Non-Credit Practice program with Asci/hex/decimal

    //Program: This is a HLA program that converts ASCII/HEX/DECIMAL/BINARY 
    based off one letter input

    program binarydiv;
    #include( "C:\hla\include\stdlib.hhf"); 

    static
        UserChar: char;
        i8:  int8 :=0; //value

    begin binarydiv;
        stdout.put("---> Please enter one character: ");
        stdin.get(UserChar); //store as char
        stdout.put("You Entered: ",UserChar);
        mov(UserChar,al); // store hex value of char into al reg
        stdout.put(nl,"(",UserChar,") In Hex is: ", al); //show hex value
        mov(al,i8); //move hex into int8 
        stdout.put(nl,"(",UserChar,") In Decimal is: ",i8); //show decimal value
        stdout.put(nl,"(",UserChar,") In Binary is: 0"); //start of binary not using 128
        mov(64,cl); //use cl with operators 2nd binary
        while(cl>0) do
            if(i8>=cl) then 
                stdout.put("1");
                sub(cl,i8);
            elseif(i8<cl) then
                stdout.put("0");
            endif; 
    //div block
            mov(cl,al);
            cbw();
            mov(2,bl);
            idiv(bl);
            mov(al,cl);
    //end div block
        endwhile;
        stdout.put(nl);
    end binarydiv;

Другие вопросы по тегам