我已经在Netwide Assembler上编写了将整数转换为字符串的代码,但控制台的输出是错误的。如果它能帮助我在x64架构下的Windows 10上编写代码。
我试图编写一个过程 _int_to_string,但在控制台中得到了其他输出。
section .bss
STD_OUTPUT_HANDLE: equ -11
char_written: resb 1
buffer: resb 32
section .text
extern GetStdHandle
extern WriteConsoleA
extern ExitProcess
global _start
_print:
sub rsp, 40
mov rcx, STD_OUTPUT_HANDLE
call GetStdHandle ;returns value for handle to rax
mov rcx, rax
mov r9, char_written
mov rax, qword 0 ;fifth argument
mov qword [rsp+32], rax
call WriteConsoleA
add rsp, 40
ret
_start:
mov rcx, buffer
mov rdx, -24567789
call _int_to_string
mov rdx, rax
mov rcx, rax
call _len
mov r9, rax
call _print
mov rcx, qword 0
call ExitProcess
_int_to_string: ; this procedure uses rcx, rdx, r8 register. Keep this in mind
mov r8, 10
mov rax, rdx
cmp rdx, 0
jns T1
neg rdx
mov byte [rcx], '-'
dec rcx
mov rax, rdx
T1:
xor rdx,rdx
div r8
add rdx, 48 ; convert the digit to ASCII
mov BYTE [rcx], dl ; store the character in the buffer
dec rcx ; decrement ecx pointing the buffer
test rax,rax ; check if the quotient is 0
jnz T1
inc rcx
mov rax, rcx ; eax points the string in the buffer
ret
_len:
cmp byte [rcx], 0
jz lpend
inc rcx
jmp _len
lpend:
sub rcx, rdx
mov rax, rcx
ret
字符串
控制台的输出为“24567789-"。
正如您所理解的,我预期的输出如下:“-24567789”。“
我是汇编语言的初学者,所以我不知道我应该做什么。如果我的英语不好的话,我很抱歉。它不是我的母语,我学它。
我的所有工具:NASM x64、Golink、控制台、Visual Studio代码。
1条答案
按热度按时间3ks5zfa01#
您可以使用
pushf
来保留数字与零比较的结果(您可以使用test
指令来完成)。字符串