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