Инструкция MOV по Intel 32 бит - PullRequest
0 голосов
/ 12 марта 2019

Я новичок в языках ассемблера, и я пытаюсь выучить 32-битный язык программирования Intel для Linux с помощью NASM и следую учебному пособию по в tutorialspoint .У меня есть несколько вопросов по этому примеру:

section .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
    mov edx, len    ;message length
    mov ecx, msg    ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80        ;call kernel
    mov eax, 1      ;system call number (sys_exit)
    int 0x80        ;call kernel

section .data

msg db  'Hello, world!',0xa ;our dear string
len equ $ - msg         ;length of our dear string

Я знаю, что name db 'Zara Ali' это сокращение от name db 'Z','a','r','a'...., но

  1. Как переменная 'name' хранится врегистр ecx, если он не вписывается в него?(Я имею в виду, когда мы хотим написать Zara Ali на выходе)
  2. Повторяется ли системный вызов (0x80) для каждого символа?

1 Ответ

1 голос
/ 13 марта 2019

Чтобы ответить на ваш второй вопрос. Нет, системный вызов выполняется только один раз с помощью инструкции int 0x80. Затем управление передается в sys_write и записывает все эти символы в стандартный вывод. В этом коде нет инструкций или циклов jmp, из которых видно, что код выполняется последовательно без переходов (исключая сам системный вызов, который вызывается только один раз).

...