Вопрос

Я пишу программу в сборке, и она не работает, поэтому я хотел бы вывести переменные в функциях x86, чтобы гарантировать, что значения - это то, чем я ожидаю. Есть ли простой способ сделать это, или это очень сложно?

Если это делает его проще, функции сборки используются из C -функций и собираются с GCC.

Это было полезно?

Решение

Похоже, что ваш вопрос соответствует: «Как я могу распечатать значения переменных в ассемблере x86». Сам x86 не знает, как это сделать, потому что это полностью зависит от того, какое устройство вы используете (и специфичность интерфейса, предоставленного ОС, к этому устройству вывода).

Один из способов сделать это - использовать Syscalls операционной системы, как вы упомянули в другом ответе. Если вы находитесь на x86 Linux, то вы можете использовать sys_write Sys вызов, чтобы написать строку на стандартный выход, например, (синтаксис гнуамблера GNU):

STR:
    .string "message from assembler\n"

.globl asmfunc
    .type asmfunc, @function

asmfunc:
    movl $4, %eax   # sys_write
    movl $1, %ebx   # stdout
    leal STR, %ecx  #
    movl $23, %edx  # length
    int $0x80       # syscall

    ret

Однако, если вы хотите печатать числовые значения, то наиболее гибким методом будет использование printf() Функция из стандартной библиотеки C (вы упоминаете, что вы называете свои ассемблеры с C, так что, вероятно, в любом случае ссылаетесь на стандартную библиотеку). Это пример:

int_format:
    .string "%d\n"

.globl asmfunc2
    .type asmfunc2, @function

asmfunc2:
    movl $123456, %eax

    # print content of %eax as decimal integer
    pusha           # save all registers
    pushl %eax
    pushl $int_format
    call printf
    add $8, %esp    # remove arguments from stack
    popa            # restore saved registers

    ret

Две вещи, чтобы отметить:

  • Вам нужно сохранить и восстановить регистры, потому что они становятся смягченными по вызову; а также
  • Когда вы вызываете функцию, аргументы выдвигаются в порядке правого налеги.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top