Последующие действия по предварительному вопросу. Я пытаюсь написать две процедуры в x86. Одна процедура считывает целое число (ReadInteger) в определенной базе, а затем записывает ее (WriteInteger) в другую базу. Где я боюсь, больше связано с решением, чем с реальным кодом.x86 Сборка Преобразование базовых номеров
Во-первых, ReadInteger может принимать число из любой базы (пример 1234, base 5). Тогда WriteInteger должен иметь возможность взять это целое число в eax и новое базовое значение в bl и преобразовать его в новую базу. Где я спрашиваю, мне нужно преобразовать все в процедуру ReadInteger или в другую процедуру в общую базу (скажем, десятичную), а затем преобразовать ее, поскольку я могу принимать только целое число и новые базовые значения в WriteInteger? Есть ли другой способ, который мне не хватает? Кажется, я не думаю о каком-либо другом способе этого делать, но задание читается так, как будто это должно быть проще.
Вот мой код.
;-----------------------------------------------------
ReadInteger PROC
;
; ReadInteger is passed one argument in bl representing the base of the number to be input.
; Receives: bl register (original base)
; Returns: EAX
;-----------------------------------------------------
nextChar:
mov edx, 0 ; prepare for divide
mov base, ebx
call ReadChar ; Get the next keypress
call WriteChar ; repeat keypress
call AsciiToDigit
div base
shl ebx,1 ; shift to make room for new bit
or ebx,base ; set the bit to eax
cmp al, 13 ; check for enter key
jne nextChar
mov eax, ebx ; place integer value in eax for return
ret
ReadInteger ENDP
;-----------------------------------------------------
WriteInteger PROC
;
; Will display a value in a specified base
; Receives: EAX register (integer), bl (new base)
; Returns: nothing
;-----------------------------------------------------
mov ecx, 0 ; count the digits
nextDigit:
mov edx, 0 ; prepare unsigned for divide
div ebx
push edx ; remainder will be in dl
inc ecx ; count it!
cmp eax, 0 ; done when eax becomes 0
jne nextDigit
; pop them off and convert to ASCII for output
outDigit:
pop eax ; digits come off left to right
add eax, '0' ; add 0 to get ASCII
call WriteChar
loop outDigit
call Crlf
ret
ret
WriteInteger ENDP
Почему бы вам не понять, как это сделать на языке высокого уровня? Ассемблер x86 не является хорошим языком для прототипа математического алгоритма –