Как обработать число, принятое как байт - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь взять байт информации, действительно число и сравнить их.Мои сравнения дают неверные данные.Вот код.

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-байтовой информацией, но безрезультатно.Кто-нибудь может дать мне советы.

Также мой год увеличится до 2000, поэтому он будет использовать целое 16-битное слово.

...