Прежде чем беспокоиться о том, можете ли вы отображать значение как двоичное или шестнадцатеричное;проверьте, чтобы убедиться, что ваш код правильно преобразует введенные пользователем данные в целое число (например, с помощью отладчика).
Для двоичного кода рассмотрите что-то вроде этого:
mov bx,ax ;bx = the value to display as binary
mov cx,16 ;cx = number of bits to display
mov di,offset binaire ;es:di = address to store string
.nextBit:
xor ax,ax ;al = 0
add bx,bx ;bx = value * 2; carry flag = overflow
adc al,0 ;al = '0' or '1'
stosb ;Add new character to string
loop .nextBit
mov byte [di],0 ;Terminate the string (ASCIIZ?)
mov dx, offset binaire
call WRITE_STRING
Для шестнадцатеричного числа это то же самоеОсновная идея, за исключением того, что вам нужно извлечь старшие 4 бита:
mov bx,ax ;bx = the value to display as binary
mov cx,4 ;cx = number of nibbles to display
mov di,offset binaire ;es:di = address to store string
.nextNibble:
mov ax,bx ;ax = value
shr ax,12 ;ax = highest 4 bits of value
shl bx,4 ;bx = value << 4
add al,'0'
cmp al,'9'
jbe .gotChar
add al,'A' - '9'
.gotChar:
stosb ;Add new character to string
loop .nextBit
mov byte [di],0 ;Terminate the string (ASCIIZ?)
mov dx, offset binaire
call WRITE_STRING
Примечание 1. Я не проверял ни один из приведенных выше кодов и обычно использую NASM (не MASM), поэтому он может несобрать "как есть".
Примечание 2: Пример кода выше преднамеренно прост.Для повышения производительности вы могли бы гораздо лучше использовать справочные таблицы.
Примечание 3: Это не сложные алгоритмы, и вам не нужно сначала возиться с языками высокого уровня (если вы не понимаететеория / математика позади двоичного / шестнадцатеричного преобразования возможно).Кроме того, алгоритм, который кажется элегантным на одном языке, может быть ужасным беспорядком на другом языке (например, вы не можете обнаружить переполнение простым / чистым способом в C, поэтому метод, используемый для двоичного преобразования выше, не будет очевидным или элегантнымв C и другой элегантный метод в C может плохо сосать при сборке).