2014-12-14 3 views
-2

Я пытаюсь преобразовать dec в hex. Максимальное число - 65535, и когда я хочу конвертировать 5-значное число, все просто отлично, но когда я пишу, например, 3 цифры, а затем нажмите клавишу ввода, это не сработает. Что не так? Я верю, что он должен что-то сделать с этим, но я не знаю, что именно.преобразование dec в hex

input:   mov ah,01h 
       int 21h 
       call chck 
       mov ah,00h 
       push numbers 
       mov numbers,ax     
       inc digit 
       CMP digit,5 
       JZ  petl 
       loop input 
petl:   mov ax,numbers 
       pop numbers 
       sub al,30h 
       cmp digit2,0 
       jz  cont    
       mov cx,digit2 
multip:   mul 000ah 
       loop multip    
cont:   add bx,ax 
       jb  error      
       mov dx,digit 
       inc digit2 
       cmp digit2,dx 
       jz  conv   
       jmp petl 
chck:   cmp al,13 
       jz  petl 
       cmp al,30h 
       jb  error 
       cmp al,39h 
       jg  error 
       ret 
+0

Научитесь использовать отладчик. Кроме того, прокомментируйте свой код, если хотите, чтобы другие люди вам помогли. – Jester

ответ

0

Вы делаете POP, который не соответствует PUSH! Вам не нужен этот POP.

czek:   pop numbers 

EDIT Вы должны обменять эти инструкции! В первый раз NUMBERS содержит мусор.

push numbers 
mov numbers,ax 

На этикетке PETL: вам также необходимо обмениваться такими инструкциями.

petl: mov ax,numbers 
     pop numbers 
+0

Правильно, спасибо. Я не знаю, почему я положил его туда ... Во всяком случае, я его исправил, и он по-прежнему не работает, как должно было – matip

+0

См. Мой пересмотренный ответ. –

0

Хорошо, я заработал. После первого POP он не принимал следующую цифру, а вместо этого шестнадцатеричный номер ED. Я сделал дополнительный поп, и теперь он работает отлично. Но что это за ЭД? Он был там, независимо от того, сколько я вводил.

Например, если я бы вход 451. I типа 4 толчок его в стек, типа 5 толчок, а затем введите 1. Теперь, когда я POP я получаю эту EB, второй POP 5 и третий 4.

0

Это не действительная инструкция X86. Возможно, вы имели в виду imul ax,10.

mul 000ah 

Вы очистили переменную DIGIT и зарегистрировали BX заранее?

Вы установили CX = 5 заранее? Кроме того, вы можете видеть избыточность с помощью этого кода?

CMP digit,5 
JZ  petl 
loop input 

Этот код не устраняет значения в диапазоне 128-255! Вы смешиваете без знака jb с подписью jg.

  cmp al,30h 
      jb  error 
      cmp al,39h 
      jg  error 

Ваша программа не имеет возможности пустого ввода. Это сбой!

Смежные вопросы