Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
Rus7am
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
1

Ассемблер в паскале: как загрузить массив во встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).

03.05.2012, 23:25. Просмотров 4071. Ответов 13
Метки нет (Все метки)

хочу написать программу в паскале с использованием встроенного ассемблера, но прежде чем начать споткнулся на таких вопросах:Не знаю как загрузить в ассемблер массив и в какие именно регистры его загружать?как выбирать отдельный элемент массива и проводить над ним операции(сложения, вычитания).
Допустим имеется одномерный массив из 10 чисел
a: array [1..10] of integer = (1,2,4,5,7,1,1,1,1,5); как его загрузить в встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).
Что за функция word ptr и что означают регистры в квадратных скобках?
Приведите любой пример где можно понять логику моих вопросов.
Кто откликнулся спасибо за помощь заранее!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 23:25
Ответы с готовыми решениями:

Ассемблер. Сложение шестнадцатиричных чисел\вычитание двоичных
Program RaznostMassivov; const N=7; var a1:array of longint; a2:array of longint; ...

Встроенный ассемблер Си, одномерный массив
Определить, сколько нулей лежит между минимальным и максимальным значениями массива Н. Если нули...

Встроенный ассемблер. Определить сумму отрицательных чисел
Создать массив А. Определить сумму отрицательных чисел. Из положительных создать массив В и...

Вычитание чисел с плавающей запятой в формате double ассемблер
Доброго времени суток. Прошу помочь, нужно написать программу:"Вычитание чисел с плавающей точкой в...

Встроенный ассемблер, как работать со строками?
знчит пытаюсь освойть асемблер в дельфи моей пролемой стала попатка работать со строками. Если я...

13
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 00:31 2
Цитата Сообщение от Rus7am
одномерный массив из 10 чисел
Примерчик.
Там процедура, ф-ция возвращет результат - AL: byte/char, AX:integer, DX:AX - long или указатель. "word ptr2 - тривиальное приведение типа, "регистры в квадратных скобках" - индексы. Паскаль какой? TP/FPC/VP?
0
Rus7am
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
04.05.2012, 10:35  [ТС] 3
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Примерчик.
Там процедура, ф-ция возвращет результат - AL: byte/char, AX:integer, DX:AX - long или указатель. "word ptr2 - тривиальное приведение типа, "регистры в квадратных скобках" - индексы. Паскаль какой? TP/FPC/VP?
Turbo Pascal 7.0
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 11:33 4
ВотЪ:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uses dos;
const
      a: array [1..10] of integer = (1,2,4,5,7,1,1,1,1,5);
 
var 
    jx: integer;
function add_arr(p:pointer; i,j:integer):integer; assembler;
asm
    lds si, p
{   int 3   ; вызов TD для отладки } 
    mov bx, i
    shl bx,1    { в словах, ибо  of integer}
    mov ax, word ptr [si+bx]
    mov bx, j
    shl bx,1    { в словах }
    add ax, word ptr [si+bx]
end;
begin
{нумерация элементов в асме - всегда с нуля, или добавляйте начальный номер}
jx := add_arr(@a,2,4);
writeln('jx:=',jx);
readln;
end.
0
04.05.2012, 11:33
Искандар
Заблокирован
04.05.2012, 11:42 5
а у меня ругается: встроенный асм не найден((
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 11:48 6
Искандар, Я не знаю, откуда ты берешь левые дистры, уже второй раз грабли. http://old-dos.ru/files/49/1.html
0
Искандар
Заблокирован
04.05.2012, 11:54 7
хз, где ссыль есть, от туда и беру
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
04.05.2012, 13:16 8
По моему Integer - двойное слово. Тогда надо вместо директивы word ptr брать dword ptr. А то ты берешь вначале нижнее слово, а потом верхнее слово, а тебе, как я понимаю нужно полное число.
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 13:20 9
programmisto, А что такое тогда long?
Цитата Сообщение от programmisto
А то ты берешь вначале нижнее слово, а потом верхнее слово, а тебе, как я понимаю нужно полное число.
А вот это можно заносить в мемориз.
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
04.05.2012, 13:25 10
Цитата Сообщение от Charles Kludge Посмотреть сообщение
А что такое тогда long
Понятия не имею. Только если массив из двойных слов неверно читать все число при помощи Word ptr.
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 13:47 11
Цитата Сообщение от programmisto Посмотреть сообщение
Только если массив из двойных слов неверно читать все число при помощи Word ptr.
А тебе не кажется что я бы написал
Assembler
1
mov eax, dword ptr [si+bx]
если бы это было действительно надо?

Не по теме:

P.S. Как-нибуль слеплю из хистори твоих мессаг "Записки быдлокодера Обломова" и выложу в здешний "Хумор" - пусть страна знает своих героев.:dance3:

0
Rus7am
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
04.05.2012, 16:21  [ТС] 12
Цитата Сообщение от Charles Kludge Посмотреть сообщение
ВотЪ:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uses dos;
const
      a: array [1..10] of integer = (1,2,4,5,7,1,1,1,1,5);
 
var 
    jx: integer;
function add_arr(p:pointer; i,j:integer):integer; assembler;
asm
    lds si, p
{   int 3   ; вызов TD для отладки } 
    mov bx, i
    shl bx,1    { в словах, ибо  of integer}
    mov ax, word ptr [si+bx]
    mov bx, j
    shl bx,1    { в словах }
    add ax, word ptr [si+bx]
end;
begin
{нумерация элементов в асме - всегда с нуля, или добавляйте начальный номер}
jx := add_arr(@a,2,4);
writeln('jx:=',jx);
readln;
end.
Что здесь выполняют команды: LDS, shl и что означает выражение @a???
В какие регистры записывать массив? Можно в AX, BX, CX, DX ?
0
Charles Kludge
Клюг
7647 / 3162 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 16:37 13
Цитата Сообщение от Rus7am
что означает выражение @a???
То, что в ф-цию передается адрес массива(ссылка на массив), а не создаётся локальная копия этого массива в стэке.
Цитата Сообщение от Rus7am
LDS
после нее DS:SI указывет на адрес начала массива.
Цитата Сообщение от Rus7am
shl
Это умножение на 2, т.е. длину элемента integer в байтах.
Цитата Сообщение от Rus7am
Можно в AX, BX, CX, DX ?
Угу.
0
Rus7am
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
06.05.2012, 08:44  [ТС] 14
Спасибо за ответы разобрался немного...
0
06.05.2012, 08:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2012, 08:44

Встроенный ассемблер. Как организовать цикл?
Необходимо составить простенькую программу, решение которой уже есть на Си. Подскажите плиз, как на...

Как подключить встроенный ассемблер (__asm)?
https://msdn.microsoft.com/ru-ru/library/vstudio/ddz712yw(v=vs.110).aspx Наткнулся на эту...

Сложение, вычитание и умножение над матрицами целых чисел
Разработать проект, который обеспечивает выполнение операций сложения, вычитания и умножения над...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru