2010-10-27 4 views
0

Я пишу конвертер чисел между системами нумерации (b h d), программа принимает 16 бит двоичного числа или 4 цифры шестнадцатеричного кода. или 5 десятичных знаков.Чтение 5-значного десятичного числа в сборке x86

процедура чтения я написал, кажется, есть проблема, когда десятичное значение превышает 65535 (FFFFh), поскольку им дело с 16-битовыми регистрами и наклоняет содержат большие значения

я был бы признателен, если бы вы мне помочь.

вот моя процедура чтения:

Proc R 
     mov ah,01;read first digit 
    int 21h 
    mov saveal,al 

    cmp al,0dh; if it is a new line break then dont read 
    jz toret 

    mov al,radex ; the radex value already entered by user 
    mov ah,0 
    mul dx 
    mov dx,ax; multiplies the radex by the number entered so far to shift it 1 dig.      

    mov al,saveal 
    cmp al,65 
    jge big2 
    sub al,30h; taking decimal value of the character 

    cont2: 
    call checkerror 
    mov ah,0 
    add dx,ax; adding the digit to the number read so far 

loop R 

toret: 
ret 
endp 

Благодаря Nataly

+3

Ну, что вы хотите сделать? Вы хотите использовать 32-разрядное хранилище или хотите определить и отклонить значения> 65535? –

+0

Я также хочу преобразовать числа> 65535, я попробовал расширенные регистры, но я не мог их хорошо управлять. – Nataly

ответ

2

вам нужно больше битов идти выше 65536 (0xFFFF), так что вам нужно больше регистр, 32 бит или другой 16 разрядный регистр , Установите этот другой 16-разрядный регистр на ноль и после добавления добавьте цифры до сих пор, добавьте добавление с переносом, чтобы добавить бит переноса в этот следующий регистр.

0xFFFF + 5, например, 0x10004 или 0x0004 с установленным битом переноса, взять этот другой регистр, добавить бит переноса к нему, чтобы поднять этот бит, теперь у вас есть 0x0001 в регистре высокого порядка и 0x0004 в регистр низкого порядка.

Абсолютно никакой разницы, чем если бы вы сделали дополнение с карандашом и бумагой. 99 + 5 = 04 с «нести один» на сотни мест. И когда сотни переполнений вы переносите на следующее место. двоичный код становится намного проще. Каждый бит-столбец похож на десятичный столбец, когда вы делаете это на бумаге, он просто невидим с бит 0 на бит 15, но перенос с бита 15 виден, чтобы вы могли объединить сумматоры вместе и сделать их сколь угодно широкими по своему усмотрению.