例如,这是我的作业
编写一个 HLA 汇编程序,提示输入一个 int8 值进行检查,然后以二进制格式打印它。例如,这里将是各种输入值的程序输出
Gimme a decimal value to print: 15 15 is 0000_1111 Gimme a decimal value to print: 7 7 is 0000_0111
我能够获得答案的源代码,但我无法理解。
我把我的思考过程放在评论里
program binaryoutput;
#include( "stdlib.hhf" );
static
zGivenNumber : int8; // the value to inspect
begin binaryoutput;
//Ask for a decimal number
stdout.put( "Gimme a decimal value to print: ");
//Put that number in 'zGivenNumber' (Let's say 7)
stdin.get( zGivenNumber );
//Put 'zGivenNumber' inside 'BH' ('BH' now contains 7)
mov( zGivenNumber, BH);
stdout.put("Number in binary is: ", nl);
//Shift left 1 at 'BH' (This makes 'BH' 14)
shl(1, BH);
//Not a clue what this is doing
lahf();
//Checking to see if 0000_0001 and AH match 0's and 1's
//(I'm not sure about the % sign as well as where AH came from)
and( %0000_0001, AH );
//Print out 'AH' in Eight Bit form
stdout.puti8(AH);
shl(1, BH); //2
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
shl(1, BH); //Next
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
shl(1, BH); //Next
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
stdout.put("_");
shl(1, BH); //Next
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
shl(1, BH); //Next
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
shl(1, BH); //Next
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
shl(1, BH); //Next
lahf();
and( %0000_0001, AH );
stdout.puti8(AH);
end binaryoutput;
我们还不允许使用循环。
我想我不明白 shl 和 LAHF 部分
据我了解,LAHF 表示从标志加载 AH。因此,这会将标志放入 AH。有道理,这就是 AH 的来源。此外, shl 将 0 放入位 0,然后将位 7 中的内容转移到进位标志中。但我只是不确定这意味着什么。