LINUX.ORG.RU

assembler, типы данных, stdout

 


0

2

столкнулся с препятствием. и думаю что я многого хочу. когда я выделяю память под что либо и сохраняю там данные и если хочу вывести на экран, то система определяет эту область как байтовые значения и выводит их на экран. т.е. если у меня там 4 байтовое значение, он просто выведет на экран 4 куска данных и в лучшем случае они будут видимыми символами ANSI. есть ли какой нибудь инструмент типа printf в C чтобы можно было задавать тип выводимых данных?

думаю что я многого хочу

я думаю, что ты хочешь научиться вызывать printf.

t184256 ★★★★★
()

printf не из физического вакуума рождается, а определён в стандартной сишной библиотеке. Соответственно, никто не мешает вызвать его из ассемблерной программы.

Zenom ★★★
()

1) в assembler'е нет типов данных

2) в assembler'е можно вызывать сишные функции, в том числе и из libc

3) никто не мешает тебе перевести строку в число и обратно руками(но лучше 2)

anonymous
()
  .section  .rodata
.hello_str:
  .string "Hello, world!"

  .text
  .globl  main
main:
  pushl %ebp
  movl  %esp, %ebp
  andl  $-16, %esp
  subl  $16, %esp
  movl  $.hello_str, (%esp)
  call  puts

  movl  $1, %eax
  movl  $0, %ebx
  int   $0x80

Компилять так:

luke@YavinIV:~/asm/test$ as test.s -o test.o 
luke@YavinIV:~/asm/test$ gcc test.o -o test
luke@YavinIV:~/asm/test$ ./test 
luke ★★★★★
()

Или вот даже так, например:

  .section  .rodata
.printf_str:
  .string "The Answer = %d\n"
  .text
  .globl  main
main:
  pushl %ebp
  movl  %esp, %ebp
  movl  $42, %eax
  pushl %eax
  movl  $.printf_str, %eax
  pushl %eax
  call  printf
  movl  $1,%eax
  movl  $0,%ebx
  int   $0x80
luke ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.