0
我意識到有很多關於如何輸出十進制ASCII形式的整數的問題。我已經採取了一些代碼並根據自己的需要對其進行了修改,但不是僅僅打印數字,而是繼續打印亂碼字符,並且窗口告訴我程序停止工作。我認爲問題在於它會保持棧的彈出值,即使它應該跳出循環。下面是完整的代碼:x86彙編打印寄存器ascii
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
base dd 10
ans dd ?
.code
start:
MOV ECX,3 ;I'm writing a compiler using
PUSH ECX ;Jack Crenshaw's "Let's Build A Compiler!"
MOV ECX,9 ;This is just some sample output that I put in
ADD ECX,[ESP];The answer that prints out should be 42
PUSH ECX
MOV ECX,2
XOR EDX,EDX
POP EAX
IDIV ECX
MOV ECX,EAX
PUSH ECX
MOV ECX,7
IMUL ECX,[ESP]
mov eax,ecx
xor ecx,ecx
separateDigit:
xor edx,edx
idiv base
push edx
inc ecx
cmp eax,0
jne separateDigit
printDigit:
mov ans,0
pop ans
dec ecx
add ans,'0'
invoke StdOut,addr ans
cmp ecx,0
jne printDigit
invoke ExitProcess, 0
end start
人誰沒有被盯着它幾個小時可以插話,告訴我什麼,我做錯了什麼?
你知道是否'調用StdOut'觸動你關心的任何寄存器,比如'ecx'?也許是'push ecx'之前,'invoke'之後的'pop ecx'會修復它嗎? – lurker
@mbratch是的工作,謝謝。我只是在閱讀關於如何(大部分)寄存器對任何通話都是公平的遊戲,但它只是沒有點擊。 – rpatel3001