2012-02-09 2 views
1

Этот код ниже занимает в два значное число (скажем, 12) в ASCII и должен вернуть этот номер как номер 12 (НЕ ASCII)Ассамблея AT & T синтаксис, возвращает ASCII целое

mov  $IBUFF, %eax # IBUFF stores the ASCII number 12 
movl $NUMBER, %ecx # NUMBER will i put the number 12 (NO ASCII) 

movb (%eax), %bl  # Moves the first byte (1) to %bl 
subb $48, %bl  # Decrease %bl so it is not longer a ASCII sign. 
movb %bl, (%ecx)  # Moves this byte into the first place in NUMBER 

inc %eax    # Increase IBUFF so it points to the next integer 
inc %ecx    # Increase NUMBER so it points to the next empty space 

movb (%eax), %bl  # Same as above 
subb $48, %bl  # Same as above 
movb %bl, (%ecx)  # Same as above 


mov NUMBER, %eax  # Move the number 12 from NUMBER to %eax (return register) 

Когда я запустите этот код, возвращаемое значение равно 513, а не 12. Что я делаю неправильно?

ответ

1

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

+0

У вас есть пример кода для этого? – Bewn

+0

@Bewn - Нет, но умножая число на 10, а затем добавив еще один номер к нему, не должно быть так сложно ... –

+0

Okey, я попробую его сегодня вечером. Благодаря ! – Bewn

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