Используя EMU8086, есть ли прямой способ напечатать шестнадцатеричное значение переменной?

Я использую EMU8086 на ПК с Windows 7 HP x64, Intel i3-2330m.

Я потратил около двух недель на изучение и изучение этой программы на языке ассемблера, чтобы вывести шестнадцатеричное значение целого числа, введенного пользователем. Я ничего не нашел о прямой печати значения из области памяти. Я могу, если необходимо, написать код для преобразования строки в шестнадцатеричный формат. Тем не менее, я пытаюсь избежать лишних строк кода, чтобы сделать это. (Я думаю, что это называется оптимизацией.)

Мои исследования привели меня ккомментарий на этом сайте от Корбина который говорит:

Очень неприятно. Вам нужно будет определить значение десятичной строки ("100"), а затем создать новую строку с тем же значением в шестнадцатеричном формате ("0x64"). Это тот же алгоритм, который вы используете для преобразования в своей голове; это немного сложнее, так как вам приходится иметь дело с кодировкой ASCII.

Ничто из этого не направило меня к тому, как я хочу выполнить задачу.

Я написал и проверил код постепенно, получая желаемые результаты. Наблюдая за переменной и просматривая регистр CX, я могу подтвердить, что их значения - это значения, которые я хочу напечатать.

Я включаю мой код здесь. Это, вероятно, некрасиво и определенно закомментировано. Комментирование в мою пользу, чтобы помочь мне узнать / запомнить то, что я сделал, когда я прогрессирую.

 ; program name: convert_decimal_to_hex
 ; by W K
 ; August, 2015
 ; This program accepts an integer between 1 and 10000 and
 ; prints the hexadecimal value to the console
 ;
 ;
 #MAKE_COM# ;instruct compiler to make COM file
 include emu8086.inc    ;use include file for macros
 ORG 100h   ;directive for COM program, set offset to 100h
 ;
 MOV DX, offset msg1    ;moves value of msg1 to the data register
 ;                       
 MOV AH, 9  ;moves the value 9 to the high accumulator register
            ;to be used with the interrupt
 INT 21h    ;invokes interrupt to print string to DOS window
 ;
 MOV DX,13  ;these lines
  MOV AH,2  ;create a
  INT 21h   ;newline
  MOV DX,10 ;and
  MOV AH,2  ;move the cursor
  INT 21h   ;to the newline
 ;
 CALL SCAN_NUM  ;calls macro to scan numeric keyboard input
                ;error catching is included in macro
                ;number is stored in CX 
  MOV DX,13 ;these lines
  MOV AH,2  ;create a
  INT 21h   ;newline
  MOV DX,10 ;and
  MOV AH,2  ;move the cursor
  INT 21h   ;to the newline
 ;  
 MOV DX, offset msg2    ;moves value of msg2 to the data register
 MOV AX, CX ;copies scanned number to AX to be printed
            ;as part of message
 ;MOV AH, 9  ;moves the value 9 to the high accumulator register
             ;to be used with the interrupt
 ;INT 21h    ;invokes interrupt to print string to DOS window 


 CALL PRINT_NUM_UNS  ;prints hexadecimal value at end of msg2
 MOV CONVERTEDNUMBER, CX
 ;                       
 MOV AH, 9  ;moves the value 9 to the high accumulator register
            ;to be used with the interrupt
 INT 21h    ;invokes interrupt to print string to DOS window
 ;
 MOV AX, 0  ;wait for any key
 INT 16h    ;prevents window from closing immediately
 ;
 msg1 db "Type an integer between 1 and 10000, and press enter. $"    
    ;declare string variable 
 msg2 db " in hexadecimal is: $" 
 ;
 DEFINE_SCAN_NUM    ;defines macro from include file
                    ;gets multidigit signed number from keyboard
 DEFINE_PRINT_NUM_UNS   ;defines macro from include file
                        ;prints unsigned number in AX
 ;                                                   
 CONVERTEDNUMBER DW 0   ;declare variable
 ;
 RET    ;return to operating system
 END    ;directive to stop compiler

Существует ли процедура для прямой печати значения переменной или значения регистра CX без записи строк кода для преобразования значения строки, введенного пользователем? Будем весьма благодарны за любые ссылки на статьи, примеры кода или другие полезные советы.

Ответы на вопрос(1)

Ваш ответ на вопрос