сборочные номера для ascii - PullRequest
       10

сборочные номера для ascii

3 голосов
/ 02 февраля 2012

Я работаю с программой на ассемблере, использующей синтаксис at & t в Intel.

Я заблудился, как мне преобразовать целое число в регистре в число ascii?

Допустим, я хочу преобразовать число 10, и я внесу число 10 в регистр% eax. Если я просто добавлю число 48 к% eax, знак ascii будет:

Я хочу добавить 48 к 1, а затем 48 к 0 в числе 10. Как я могу это сделать?

Пример кода:

mov $10, %eax
#Cut the number in some way.
add $48, %eax

Ответы [ 2 ]

6 голосов
/ 02 февраля 2012

Чтобы преобразовать число в ASCII, вам нужно разделить число на 10 и использовать остаток в качестве результата. Затем добавьте ASCII '0' и сохраните полученную цифру. Затем повторите то же самое с частным, пока оно не достигнет нуля.

Однако это дает цифры в обратном порядке, начиная с наименее значащей цифры. Вы можете изменить порядок, например, используя стек. Вставьте каждую цифру в стек, затем вытолкните их и сохраните в строковом буфере.

Примерно так (не проверено):

.DATA
    strResult db 16 dup (0) ; string buffer to store results

.CODE
    mov eax, number     ; number to be converted
    mov ecx, 10         ; divisor
    xor bx, bx          ; count digits

divide:
    xor edx, edx        ; high part = 0
    div ecx             ; eax = edx:eax/ecx, edx = remainder
    push dx             ; DL is a digit in range [0..9]
    inc bx              ; count digits
    test eax, eax       ; EAX is 0?
    jnz divide          ; no, continue

    ; POP digits from stack in reverse order
    mov cx, bx          ; number of digits
    lea si, strResult   ; DS:SI points to string buffer
next_digit:
    pop ax
    add al, '0'         ; convert to ASCII
    mov [si], al        ; write it to the buffer
    inc si
    loop next_digit
5 голосов
/ 02 февраля 2012

Как правило, вы можете сделать это следующим образом:

repeat 
  d = x MOD 10
  x = x DIV 10
  stringd = d + 48;
  store character somewhere
until x == 0
print characters in reverse order

Но цифры будут от последней к первой.Преобразуйте это в сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...