我是一名使用高级语言的开发人员,在业余时间学习汇编语言。请参阅下面的NASM程序:
section .data
section .bss
section .text
global main
main:
mov eax,21
mov ebx,9
add eax,ebx
mov ecx,eax
mov eax,4
mov ebx,1
mov edx,4
int 0x80
push ebp
mov ebp,esp
mov esp,ebp
pop ebp
ret
这是我使用的命令:
ian @ ubuntu:〜/ Desktop / NASM / Program4 $ nasm -f elf -o asm.o SystemCalls.asm
ian @ ubuntu:〜/ Desktop / NASM / Program4 $ gcc -o程序asm.o
ian @ ubuntu:〜/ Desktop / NASM / Program4 $ ./程序
我没有任何错误,但是没有任何内容打印到终端上。我使用以下链接来确保寄存器包含正确的值:http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
最佳答案
您必须将整数值转换为字符串才能使用sys_write
(系统调用4)将其打印出来。可以这样进行转换(未经测试):
; Converts the integer value in EAX to a string in
; decimal representation.
; Returns a pointer to the resulting string in EAX.
int_to_string:
mov byte [buffer+9],0 ; add a string terminator at the end of the buffer
lea esi,[buffer+9]
mov ebx,10 ; divisor
int_to_string_loop:
xor edx,edx ; clear edx prior to dividing edx:eax by ebx
div ebx ; EAX /= 10
add dl,'0' ; take the remainder of the division and convert it from 0..9 -> '0'..'9'
dec esi ; store it in the buffer
mov [esi],dl
test eax,eax
jnz int_to_string_loop ; repeat until EAX==0
mov eax,esi
ret
buffer: resb 10
关于linux - NASM添加程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18834760/