为什么是;(“maxVal=input”语句中的“expected”而不是“expected” programmaxmin; #包括(“stdlib.hhf”) 静止的 计数:int32:=0; 输入:int32; maxVal:int32; minVal:int32; 和:int32:=0; 布尔值:=true; 开始MaxMin; 而(布尔瓦尔)呢 输入一个数字,0停止:); 标准输入获取(输入); 如果(输入=0),则 打破 elseif(count==0)则 maxVal=输入; minVal=输入; elseif(输入>最大值)然后 maxVal=输入; elseif(输入环境) HLA(高级汇编程序-HLABE后端,LD连接器) 版本2.16构建4409(原型) Ubuntu 20.04.1

为什么是;(“maxVal=input”语句中的“expected”而不是“expected” programmaxmin; #包括(“stdlib.hhf”) 静止的 计数:int32:=0; 输入:int32; maxVal:int32; minVal:int32; 和:int32:=0; 布尔值:=true; 开始MaxMin; 而(布尔瓦尔)呢 输入一个数字,0停止:); 标准输入获取(输入); 如果(输入=0),则 打破 elseif(count==0)则 maxVal=输入; minVal=输入; elseif(输入>最大值)然后 maxVal=输入; elseif(输入环境) HLA(高级汇编程序-HLABE后端,LD连接器) 版本2.16构建4409(原型) Ubuntu 20.04.1,hla,Hla,解决方案 问题是maxVal=input;是HLA中的无效语句。要更正此问题,请使用mov指令如下:mov(input,maxVal); 但是,在此更正之后,您将看到以下错误: 将“src.hla”组装为“src.o” 文件“src.hla”第27行出现错误[errid:102032/hlapass.bsn]: 内存到内存的比较是非法的。 近:> hlapase:oututils.c:2480:freeOperator:Assertion`o->l.leftOperator!=((void*

解决方案

  • 问题是
    maxVal=input;
    是HLA中的无效语句。要更正此问题,请使用
    mov
    指令如下:
    mov(input,maxVal);
  • 但是,在此更正之后,您将看到以下错误:
将“src.hla”组装为“src.o”
文件“src.hla”第27行出现错误[errid:102032/hlapass.bsn]:
内存到内存的比较是非法的。
近:>
hlapase:oututils.c:2480:freeOperator:Assertion`o->l.leftOperator!=((void*)0)失败。
中止(堆芯转储)
  • 这是因为HLA不支持内存对象之间的比较。一种解决方案是将用户输入的编号存储在
    EAX
    中,并将
    input
    变量的所有匹配项更改为
    EAX
示例

programmaxmin;
#包括(“stdlib.hhf”)
存储
maxVal:int32;
minVal:int32;
静止的
计数:int32:=0;
和:int32:=0;
布尔值:=true;
开始MaxMin;
而(布尔瓦尔)呢
输入一个数字,0停止:);
stdin.geti32();
如果(EAX=0),则
打破
elseif(计数=0)则
mov(EAX,maxVal);
mov(EAX,minVal);
elseif(EAX>maxVal)然后
mov(EAX,maxVal);
elseif(EAX
我不懂这种语言,但可能还有其他语法错误使编译器(os it assembler?)感到困惑。例如,您的赋值语句是否应该像在程序的静态常量部分一样使用
:=
program MaxMin;

#include("stdlib.hhf")

static

    count: int32:=0;
    input: int32;
    maxVal: int32;
    minVal: int32;
    sum: int32:=0;
    boolVar : boolean:= true;

begin MaxMin;


while(boolVar) do

    stdout.put("Enter a number, 0 to stop:");
    stdin.get(input);
    
    if(input==0)then
        break;
    elseif(count == 0)then
        maxVal=input;
        minVal=input;
    elseif(input>maxVal)then
        maxVal=input;
    elseif(input<minVal)then
        minVal=input;
    endif;
    
    add(input,sum);
    add(1,count);
    
    
endwhile;

stdout.newln();

stdout.put("Total: ",sum,nl,"Count: ",count,nl,"Maximum: ",maxVal,nl,"Minimum: ",minVal,nl);


end MaxMin;
program MaxMin;
#include("stdlib.hhf")

storage
    maxVal: int32; 
    minVal: int32;

static
    count:   int32:=   0;
    sum:     int32:=   0;
    boolVar: boolean:= true;

begin MaxMin;
    while(boolVar) do
        stdout.put("Enter a number, 0 to stop: ");
        stdin.geti32();

        if (EAX = 0 ) then
            break;
        elseif ( count = 0 ) then
            mov(EAX, maxVal);
            mov(EAX, minVal);
        elseif (EAX > maxVal) then
            mov(EAX, maxVal);
        elseif (EAX < minVal) then
            mov(EAX, minVal);
        endif;
    
        add(EAX, sum);
        add(1, count);   
    endwhile;

    stdout.newln();
    stdout.put("Total: ",sum,nl,"Count: ",count,nl,"Maximum: ",maxVal,nl,"Minimum: ",minVal,nl);
end MaxMin;