Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
0 / 0 / 2
Регистрация: 29.06.2011
Сообщений: 130
1

Использование JMP вместо CALL.

12.11.2011, 22:26. Показов 4411. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даны три массива, Требуется вычислить среднее арифметическое их максимальных элементов. Каждый массив задается двумя параметрами: адресом первого элемента и длиной.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
RD #85 //Загрузка 
WR R1 //параметров
RD #14 //первого
WR R2 //массива
CALL M //Вызов подпрограммы 
WR R6 //Сохранение результатов
RD #100 //Загрузка
WR R1 //параметров
RD #4  //второго
WR R2 //массива
CALL M //Вызов подпрограммы
WR R7 //Сохранеие результата
RD #110 //загрузка 
WR R1 //параметров
RD #9 //третьего 
WR R2 //массива
CALL M //Вызов подпрограммы
ADD R7 // Вычисление
ADD R6 // среднего 
DIV #3 // арифметического
OUT //выход
 
Подпрограмма MAX 
 
HLT //Стоп
M: RD @R1 //Загрузка
WR R3 // первого элемента R3
L2: RD @R1+  //Чтение элемента и модификация адреса
WR R4 //Сравнение
SUB R3 //и замена
JS L1 //если R3 < R4
MOV R3, R4 
L1: JRNZ R2, L2 //Цикл  
RD R3 //Чтение результата в Acc 
RET //Возврат
Если исходить из различия команд то при замене всех CALL M на JMP M. Мы будем возвращаться в самое начало программы при вызове подпрограммы? или я ошибаюсь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2011, 22:26
Ответы с готовыми решениями:

можно ли сделать косвенный переход (jmp или call) типа far по содержимому двух переменных
не знаю можно ли сделать косвенный переход (jmp или call) типа far по содержимому двух переменных...

Call \ jmp x64 адреса
Добрый вечер господа. Я не выбрал какой-то раздел, потому что это общий случай. Есть такая...

call и jmp
Есть функция: put: pusha mov ah,9 mov cx,1 ...

Что быстрее: call или jmp?
А что будет быстре, это:FOO: mov eax, 0 mov ebx, 0 mov ecx, 0 jmp edx ;...

1
43 / 42 / 5
Регистрация: 22.06.2011
Сообщений: 71
12.11.2011, 22:43 2
Честно говоря с ассемблером для этого контроллера не знаком (если он вообще для контроллера), но, как правило, команды ret и call работают следующим образом. При вызове подпрограммы с помощью команды call адрес возврата сохраняется в стеке, а при возврате управления из подпрограммы с помощью команды ret извлекается содержимое вершины стека и помещается в регистр счетчик-команд. Т.е. если передашь управление на подпрограмму командой jmp, то в стеке не сохранится адрес возврата и можешь вообще говоря попасть куда угодно, если возвращать будешь управление с помощью команды ret (в зависимости от того что у тебя будет хранится на вершине стека)
1
12.11.2011, 22:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2011, 22:43
Помогаю со студенческими работами здесь

Составить программу с использованием команд CALL, RET, LOOP, JMP и пары условий Jxx
Здравствуйте. В общем, дали задание: составить программу с использованием команд CALL, RET, LOOP,...

Операции перехода (JMP,CALL)
1. Загрузить аккумулятор числом CDH. Из содержимого аккумулятора вычесть число C0H. Если флаг Z=1,...

Overload + jmp/call
Есть несколько overload-функций. Нужно выполнить прыжок инструкцией jmp (ну или call) в одну из...

Использование jmp
Тут провожу эксперименты, есть такой код: #include &lt;windows.h&gt; DWORD succ; #pragma...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru