Assembly 高级汇编(HLA)中的十进制到二进制

Assembly 高级汇编(HLA)中的十进制到二进制,assembly,binary,decimal,low-level,hla,Assembly,Binary,Decimal,Low Level,Hla,我有以下任务:编写一个HLA汇编程序,提示输入int8值进行检查,然后以二进制格式打印。例如,这里是各种输入值的程序输出 给我一个要打印的十进制值:15 15是0000_1111 给我一个要打印的十进制值:7 7是0000_0111 (提示:没有以二进制输出打印的标准输出,因此您需要自己执行此操作。为了完成此操作,您需要一次将一位移到进位标志中,并根据进位中的内容打印0或1。移动并重复此过程8次,您就完成了!最终,我们将学习如何循环,实现此操作。)任务就不那么可怕了。) (第二个提示:LAHF将

我有以下任务:编写一个HLA汇编程序,提示输入int8值进行检查,然后以二进制格式打印。例如,这里是各种输入值的程序输出

给我一个要打印的十进制值:15 15是0000_1111 给我一个要打印的十进制值:7 7是0000_0111

(提示:没有以二进制输出打印的标准输出,因此您需要自己执行此操作。为了完成此操作,您需要一次将一位移到进位标志中,并根据进位中的内容打印0或1。移动并重复此过程8次,您就完成了!最终,我们将学习如何循环,实现此操作。)任务就不那么可怕了。)

(第二个提示:LAHF将进位和所有其他标志从EFLAGS寄存器中推出并放入AH。作为一名汇编程序员,您有能力通过使用and或or来屏蔽除您感兴趣的位之外的所有位。)以下是我目前在课堂上学到的内容: 到目前为止,我的代码是这样的,我相信这是一个逻辑错误,因为不管我输入什么数字,我只得到一个16 0的字符串

 begin program BinaryOutput;
 #include( "stdlib.hhf" );
 static
   iDataValue : int8;  // the value to inspect
 begin BinaryOutput;

    stdout.put( "Gimme a decimal value to print: ", nl);
    stdin.get( iDataValue );
    mov(0, BH);
    mov( iDataValue, BH);

    stdout.put("Number in binary is: ", nl);


    shl(1, BH); //1st
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //2nd
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //3rd
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //4th
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //5th
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //6th
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //7th
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);

    shl(1, BH); //8th
    lahf();
    and( %0000_0001, AH );
    mov(AH, BH);
    stdout.putb(BH);





 end BinaryOutput;

一个明显的错误是您正在覆盖
BH
。类似这样的操作应该会更好:

shl(1, BH); //1st
lahf();
and( %0000_0001, AH );
stdout.putb(AH);
对其他对象重复此操作,或使用循环;)
不确定putb使用的是什么格式,因为您提到了获取16个零,我猜它可能是写入了2个十六进制数字。在这种情况下,请检查是否有不同的输出函数(可能是
puti8
?)。如果没有打印单个数字,则打印字符(您必须通过添加
'0'
'1'
转换为ascii)。

一个明显的错误是您正在覆盖
BH
。这样的方法应该更有效:

shl(1, BH); //1st
lahf();
and( %0000_0001, AH );
stdout.putb(AH);
对其他对象重复此操作,或使用循环;) 不确定putb使用的是什么格式,因为您提到了获取16个零,我猜它可能是写入了2个十六进制数字。在这种情况下,请检查是否有不同的输出函数(可能是
puti8
?)。如果没有打印单个数字,则打印字符(您必须通过添加
'0'
'1'
转换为ascii)

这输出个位数,我必须做同样的任务,这使它工作


这是个位数的输出,我必须做同样的作业,这使它工作。

非常感谢,这正是我需要的。非常感谢,这正是我需要的。这与5.5岁的答案几乎相同。如果你想指出另一个答案的细节,请使用注释。这与5.5年前的答案几乎相同。如果您想指出其他答案的细节,请使用注释。