1
好的,我所要做的就是在Linux的x86-64程序集中打印一個數字(最大爲18446744073709551616)。任何人都可以告訴我爲什麼這個程序不能工作?發生的只是它運行和退出。感謝您提供的所有幫助!在x86-64程序集中打印一個數字
GLOBAL _start
SECTION .text
;PRINTCHAR
; MOV [LETTER],RAX
;
; MOV RAX,1
; MOV RDI,1
; MOV RSI,LETTER
; MOV RDX,1
; SYSCALL
; RET
PRINTDEC:
MOV R9,18 ;SO IT CAN POINT TO THE END OF THE BUFFER
MOV R10,0
START:
MOV R8,NUMBER
MOV RDX,0 ;CLEAR OUT RDX TO AVOID ERRORS
MOV RBX,10 ;WHAT TO DIVIDE BY
DIV RBX ;DIVIDE OUR NUMBER BY TEN
CMP RAX,0 ;IF OUR QUOTENT IS ZERO THEN WE ARE DONE, PRINT THE BUFFER
JE END
JMP ADDBUF
ADDBUF:
ADD R8,R9 ;MOV TO THE CURRENT LOCATION IN OUR BUFFER
ADD RDX,0x30
; ADD R8,R10
MOV [R8],RDX ;MOV THE LAST NUMBER IN OUR BUFFER TO RDX
DEC R9
INC R10
JMP START
END:
ADD R8,R9 ;add the very last digit
MOV [R8],RDX
INC R10
MOV RAX,1
MOV RDI,1
MOV RSI,R8
MOV RDX,R10
SYSCALL
RET
_start:
MOV RAX,55
CALL PRINTDEC
MOV RAX,60
MOV RDI,0
SYSCALL
SECTION .bss
LETTER: RESB 1
NUMBER: RESB 19
不....我想打印RAX,這是PRINTDEC在_start調用之前定義的數目。 –
@KyleMartin - 您的權利,我已經爲您改寫並評論了PRINTDEC方法。 –
夥計!謝謝!這是我已經能夠做的一個巨大的改進...但是,你的代碼仍然沒有打印出第一個數字..我要看看它,看看我能做什麼,但我認爲我應該讓你知道。謝謝! –