x86程序集转换基本数字

时间:2012-02-26 03:43:56

标签: assembly x86

先前问题的后续行动。我试图在x86中编写两个程序。一个过程读入特定基数中的整数(ReadInteger),然后读出一个(WriteInteger)在不同的基数中。我正在努力的地方与解决方案的关系比实际代码更多。

首先,ReadInteger可以从任何基数(例如1234,基数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

1 个答案:

答案 0 :(得分:0)

寄存器中的数字没有特定的“基数”,它们只是二进制数。基础是人类用来使数字更具可读性的东西。这意味着“基础”的概念仅适用于输入和输出,而不是机器内部的任何内容。 (有一些奇怪的例外,例如你最终可能会遇到的BCD,但今天却没有。)

因此,使用特定基类读取并使用特定基类写入的函数是完全独立的,并且它们之间需要传递的唯一信息是二进制数本身。