База ответов ИНТУИТ

Основы программирования

<<- Назад к вопросам

Локальные переменные функции языка Си адресуютсяотносительно регистра FP (Frame Pointer — указателькадра). Что содержится в ячейке памяти, адрес которойзаписан в регистре FP, в процессе выполнения телафункции?

(Отметьте один правильный вариант ответа.)

Варианты ответа
Адрес возврата в вызывающую функцию.
Первая локальная переменная, описанная внутри функции.
Значение, которое содержалось в FP перед вызовом функции. (Верный ответ)
Похожие вопросы
Функция языка Си имеет прототип
    int f(int x, int y);
(т.е. имеет два целочисленных аргумента ивозвращает целочисленное значение).Локальные переменные и аргументы функцииадресуются относительно регистра FP, т.е. их адресаравны сумме содержимого FP и константы, задающей смещение.Чему равен адрес аргумента y функции?
В функции f языка Си описана одна целочисленнаяпеременная z:
    int f(int x, int y) {        int z;        . . .    }
Локальные переменные и аргументы функцииадресуются относительно регистра FP, т.е. их адресаравны сумме содержимого FP и константы, задающей смещение.Чему равен адрес переменной z?
Где хранятся локальные переменные функции в языке Си?
Являются ли локальные переменные функции общимидля разных нитей (threads), работающих параллельнов рамках одного процесса?
Пусть описан тип R2Vector, представляющий векторна плоскости с вещественными координатами:
    typedef struct {        double x;        double y;    } R2Vector;
также описаны три переменные u, v иw типа вектор и вещественная переменная s:
    R2Vector u, v, w;    double s;
при этом известно, что переменные u и vсодержат два конкретныхвектора единичной длины.Пусть в результате выполнения следующего фрагмента программызначение переменной s приблизительно равно 0.7071,т.е. корню из двух, деленному пополам:
    w.x = (-u.y); w.y = u.x;    s = v.x * w.x + v.y * w.y;    // s == 0.7071
На какой угол надо повернуть вектор u,чтобы получить вектор v?
Может ли задача использовать объем виртуальной памяти,который превышает объем физической памяти компьютера?
Что больше в современных архитектурах:объем физической памяти или объем виртуальной памяти?
Пусть регистр EBX содержит адрес массива целыхчисел, регистр ECX — количество элементов массива.Указать, что будет содержать регистр EAXв результате выполнения следующего фрагмента кодана Ассемблере "Masm" для процессора Intel 80x86:
   mov  EAX, 0     ; EAX := 0L1:                ; метка начала цикла   cmp  EAX, ECX   ;  сравнить EAX с ECX   jge  L2         ;  переход, если больше или равно   mov  EDX, [EBX] ;  EDX := число с адресом EBX   cmp  EDX, 0     ;  сравнить EDX с нулем   je   L2         ;  переход, если равно   add  EBX, 4     ;  EBX := EBX+4   inc  EAX        ;  увеличить EAX   jmp  L1         ;  переход на метку L1L2:                ; метка конца цикла
Пусть регистр EBX содержит адрес массива целыхчисел, регистр ECX — количество элементов массива.Указать, что будет содержать регистр EAXв результате выполнения следующего фрагмента кодана Ассемблере "Masm" для процессора Intel 80x86:
   mov  ESI, 0     ; ESI := 0   mov  EDI, -2147483648 ; EDI := минус бесконечностьL1:                ; метка начала цикла   cmp  ESI, ECX   ;  сравнить ESI с ECX   jge  L2         ;  переход, если больше или равно   mov  EDX, [EBX] ;  EDX := число с адресом EBX   cmp  EDX, EDI   ;  сравнить EDX с EDI   jle  L3         ;  переход, если меньше или равно   mov  EDI, EDX   mov  EAX, ESI   ;  EAX := ESIL3:                ;   add  EBX, 4     ;  EBX := EBX+4   inc  ESI        ;  увеличить ESI   jmp  L1         ;  переход на метку L1L2:                ; метка конца цикла
Пусть регистр EBX содержит адрес массива целыхчисел, регистр ECX — количество элементов массива.Указать, что будет содержать регистр EAXв результате выполнения следующего фрагмента кодана Ассемблере "Masm" для процессора Intel 80x86:
   mov  EAX, 2147483647 ; EAX := плюс бесконечностьL1:                ; метка начала цикла   cmp  ECX, 0     ;  сравнить ECX с нулем   jle  L2         ;  переход, если меньше или равно   mov  EDX, [EBX] ;  EDX := число с адресом EBX   cmp  EDX, EAX   ;  сравнить EDX с EAX   jge  L3         ;  переход, если больше или равно   mov  EAX, EDX   ;  EAX := EDXL3:                ;   add  EBX, 4     ;  EBX := EBX+4   dec  ECX        ;  уменьшить ECX   jmp  L1         ;  переход на метку L1L2:                ; метка конца цикла