Как правильно разделить числа в сборке 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;