對先前問題的後續處理。我正在嘗試在x86中編寫兩個過程。一個過程讀取特定基礎中的整數(ReadInteger),然後將其寫入(WriteInteger)到另一個基礎中。我正在掙扎的地方比解決方案更接近實際的代碼。x86彙編轉換基數
首先,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
爲什麼不先弄清楚如何用高級語言來做到這一點? x86彙編程序不是一種很好的語言,可以用它對數學算法進行原型設計 – 2012-02-26 03:46:15