新手在这里。我在Linux中使用GNU汇编程序(GAS)。我只是想在终端上打印“Hello world”以外的其他内容。但如果我打印一个数字,则不会打印任何内容。这是代码。
.section .data
msg: .ascii "Hello world"
msglen = . - msg
numericData: .long 1
numericDataLen = . - numericData
.section .text
.globl _start
_start:
movl $4, %eax
movl $1, %ebx
movl $numericData, %ecx
movl $numericDataLen, %edx
int $0x80
movl $1, %eax
int $0x80
.section .bss
你可以想象,当我用numericData加载ECX时,我希望它在控制台中打印出“1”。相反,我一无所获。为什么,以及如何将其打印出来?
使用NASM,我们在打印整数方面没有问题,如下所示:http://www.tutorialspoint.com/assembly_programming/assembly_numbers.htm
P.S。不,我不想在C中使用printf。我想坚持原始的,纯粹的汇编代码。 : - )
答案 0 :(得分:1)
请注意,您链接的nasm代码会在ascii之间来回转换,您不会在此处执行此操作。它也只处理一位数。因此,它只不过是一个印刷品。
如果您将numericData: .long 1
更改为numericData: .byte '1'
,则可以达到类似的效果。
否则你必须将二进制文件写入ascii转换函数。