如何使用Nasm预处理器将整数转换为字符串?例如,请考虑以下代码:
%define myInt 65
%define myString 'Sixty-five is ', myInt
符号myString
将评估为Sixty-five is A
。期望的结果是Sixty-five is 65
。我怎样才能做到这一点?这似乎是一个微不足道的问题,但纳斯姆的文件却没有产生任何结果。谢谢!
答案 0 :(得分:2)
此代码
%define myInt 65
%define quot "
%define stringify(x) quot %+ x %+ quot
%strcat myString 'Sixty-five is ', stringify(myInt)
bits 32
db myString
生成以下列表文件:
1 %define myInt 65
2 %define quot "
3 %define stringify(x) quot %+ x %+ quot
4 %strcat myString 'Sixty-five is ', stringify(myInt)
5
6 bits 32
7 00000000 53697874792D666976- db myString
8 00000009 65206973203635
和以下二进制文件:
0000000000: 53 69 78 74 79 2D 66 69 │ 76 65 20 69 73 20 36 35 Sixty-five is 65
我使用了2012年3月12日编译的NASM版本2.10。
答案 1 :(得分:0)
目前无法使用NASM对此进行测试,但这至少在YASM中起作用(我添加了一个Linux x86-64打印代码,以便于测试):
[bits 64] %define myInt 65 %define myTens myInt/10 + 48 %define myOnes myInt-(myInt/10)*10 + 48 %define myString 'Sixty-five is ', myTens, myOnes section .text global _start _start: mov edi,1 ; STDOUT mov rsi,my_string mov edx,my_string_length ; length of string in bytes. mov eax,1 ; write syscall xor edi,edi mov eax,60 ; exit syscall section .data my_string db myString db 0x0a my_string_length equ $-my_string