Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
1

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

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

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

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

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

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

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

13
Клюг
7663 / 3178 / 382
Регистрация: 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
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
Клюг
7663 / 3178 / 382
Регистрация: 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:42 5
а у меня ругается: встроенный асм не найден((
0
Клюг
7663 / 3178 / 382
Регистрация: 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
116 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
04.05.2012, 13:16 8
По моему Integer - двойное слово. Тогда надо вместо директивы word ptr брать dword ptr. А то ты берешь вначале нижнее слово, а потом верхнее слово, а тебе, как я понимаю нужно полное число.
0
Клюг
7663 / 3178 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
04.05.2012, 13:20 9
programmisto, А что такое тогда long?
Цитата Сообщение от programmisto
А то ты берешь вначале нижнее слово, а потом верхнее слово, а тебе, как я понимаю нужно полное число.
А вот это можно заносить в мемориз.
0
116 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
04.05.2012, 13:25 10
Цитата Сообщение от Charles Kludge Посмотреть сообщение
А что такое тогда long
Понятия не имею. Только если массив из двойных слов неверно читать все число при помощи Word ptr.
0
Клюг
7663 / 3178 / 382
Регистрация: 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
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
Клюг
7663 / 3178 / 382
Регистрация: 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
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
06.05.2012, 08:44  [ТС] 14
Спасибо за ответы разобрался немного...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2012, 08:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Произвести сложение X+Y и вычитание X-Y чисел с плавающей запятой
Представить заданные числа(125 и 10) с плавающей запятой в нормализованной форме одинарной...

Встроенный ассемблер C++
Здравствуйте. Очень туго с встроенным ассемблером. Помогите, пожалуйста. Нужно реализовать...

Встроенный ассемблер
проблема такая: скачал с оф. сайта FPC 2.4 пишу прогу, обязательное использование ассемблерных...


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

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

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