Объединить два 4-битных числа в 8-битное число? - PullRequest
0 голосов
/ 14 июня 2019

Итак, проблема в следующем:
Есть 2 символа.
Мне нужно построить 8-битное число, которое построено так:
левые 4 бита от первого числа, правые 4 бита от второго числа

Я попытался просто сдвинуть число в 4 бита вправо, чтобы получить 4 левых бита. Чтобы получить правильные 4 бита, я попытался повернуть 4 левых бита числа в 0. Затем я добавил 4 левых бита в топор, сместил его влево 4 раза, а затем добавил 4 левых бита.

    mov dl,[si]       ; the value of the character, it is inside of a char array
    shr dl,4
    add al,dl
    and dl,00001111b
    shl ax,4          ; ax value was 0
    inc si
    mov dl,[si]
    and dl,00001111b
    add al,dl
    shl ax,4       

Я думал, что это должно работать, но, видимо, это не так.

Как я могу это сделать?

1 Ответ

1 голос
/ 15 июня 2019

Мне нужно построить 8-битное число, которое построено так: левые 4 бита от первого числа, правые 4 бита от второго числа

Я не знаюне знаю, хотите ли вы что-то вроде этого:

    mov ax,[si]     ;al = first character, ah = second character
    shl al,4        ;al bits 4 to 7 = lowest 4 bits of first character
    shr ax,4        ;al bits 0 to 3 = lowest 4 bits of first character, al bits 4 to 7 = lowest 4 bits of second character

.. или что-то вроде этого:

    mov ax,[si]     ;al = first character, ah = second character
    and ax,0xF00F   ;al bits 0 to 3 = lowest 4 bits of first character, ah bits 4 to 7 = highest 4 bits of second character
    or al,ah        ;al bits 0 to 3 = lowest 4 bits of first character, al bits 4 to 7 = highest 4 bits of second character

.. или что-то вроде этого:

    mov ax,[si]     ;al = first character, ah = second character
    and ax,0x0FF0   ;al bits 4 to 7 = highest 4 bits of first character, ah bits 0 to 3 = lowest 4 bits of second character
    or al,ah        ;al bits 0 to 3 = lowest 4 bits of second character, al bits 4 to 7 = highest 4 bits of first character

... или что-то еще.

...