我正在尝试获取一个字节的信息,对它们进行真正的编号和比较。我的比较产生了错误的输入。这是代码。
program dateDemo;
#include ("stdlib.hhf")
static
dayR: byte;
monthR: byte;
yearR: word;
day: uns8;
month: uns8;
year: uns16;
packedDate: dword;
begin dateDemo;
stdout.put( "Enter the current month, day, and year: " );
stdin.get( monthR, dayR, yearR );
mov( 0, eax );
mov(0, bx);
mov( eax, packedDate ); // Just in case there is an error.
mov(monthR, ah);
mov(ah, month);
mov(dayR, al);
mov(al, day);
mov(yearR, bx);
mov(bx, year);
// Pack the data into the following bits:
//
// 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
// m m m m d d d d d y y y y y y y
if( month > 12 ) then
stdout.put( "Month value is too large", nl );
elseif( month = 0 ) then
stdout.put( "Month value must be in the range 1..12", nl );
elseif( day > 31 ) then
stdout.put( "Day value is too large", nl );
elseif( day = 0 ) then
stdout.put( "Day value must be in the range 1..31", nl );
elseif( year > 99 ) then
stdout.put( "Year value must be in the range 0..99", nl );
else
stdout.put("It worked");
/*mov( month, al );
shl( 5, ax );
or( day, al );
shl( 7, ax );
or( year, al );
mov( ax, packedDate );*/
endif;
我遗漏了一些无关紧要的代码。如果我输入“10 20 1997”,它会输出“月份太大”,我尝试使用 uns8 而不是 hte 字节信息进行比较,但无济于事。任何人都可以给我提示。
我的年份也将达到 2000 年,因此它将使用一个完整的 16 位字。