Оптимизация кода ASM в десятичном формате - PullRequest
0 голосов
/ 28 сентября 2018

Мне было дано задание преобразовать десятичные входные числа и вывести их двоичный эквивалент через «массив», используя сборку.У меня код завершен и работает, проблема в том, что он принимает только цифры 0-99 для преобразования.

В идеале программа должна иметь возможность преобразовывать любое число, по крайней мере, до 255 десятичных, чтобы код мог бытьможет использоваться для будущих практик, где мне может понадобиться обрабатывать различные 16-битные значения в регистрах.

Я ценю все советы, приведенные ниже:

.model small
.stack
.data
                             ;Variables used:

   cad  db 9 dup (' '),'$'   ;Cad will contain the chain of bits
   var1 db ?                 ;Var1 will be used to conver number
   num  db ?                 ;variable for input number
   aux  db ?                 ;auxiliary  variable

   msg db 10,13, "Enter decimal number 0-99: $", 10, 13

.code
.startup

   mov ah,9
   lea dx,msg
   int 21h      ;Shows first message

   mov var1,0   ;Initializes var1 value to 0
   mov ah,01h   ;Int to obtain input
   int 21h      
   sub al,30h   ; Ascii code value to real decimal value conversion (subtracts 48d)
   mov num,al   ;Input number from AL is moved to variable num

   mov al,num   
   mov bl,10    ;10 is stored in bl
   mul bl       ;Number to convert is multiplied by 10
   mov aux,al   ;aux variable is assigned the result

   mov var1,0   ;We obtain the second user number input
   mov ah,01h
   int 21h      
   sub al,30h   


   add aux,al   ;We add aux to the previous number multiplied by 10
   mov bl,aux   ;Doesn't need to be multiplied
   mov num,bl   ;result is stored in BL

   mov ah,02h   ;Prints '=' sign symbol after decimal input 
   mov dl,'='
   int 21h

   mov SI,6     ;Cycles where we use long division (Divide by 2)
   L1:          ;L1  label

      xor Ah,Ah    ;Resets AH 
      mov Al,num
      mov Bl,2
      div Bl
      mov var1,Ah
      mov num,Al

      mov dl,var1
      add dl,30h

      mov cad[SI],dl;Concatenates results

      cmp num,1 ;Compares num with 1
      dec SI
      jne L1   ;L1 loops until it goes through the all numbers
       je exit   ;exits loop



      cmp num,0 ;Compares num with 0
       jne L1
        je exit

   exit:          ;exit label

      mov dl,num    ;prints the chain in binary
      add dl,30h

      mov cad[SI],dl

      mov ah,09h
      lea Dx,cad
      int 21h

      mov ah,4ch
      int 21h
      end  
...