Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.02.2024
Сообщений: 26

Проблемы с адресацией

15.02.2024, 17:59. Показов 840. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны два двухбайтных массива. Нужно вычесть из последнего элемента второго массива первый элемент первого массива, из предпоследнего элемента второго - второй элемент первого и т. д. Полученные результаты занести в третий массив. В моём коде выдаёт ошибку в строке "mov ax,[bp+10-si]", пишет, что некорректный адрес. Помогите разобраться.


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
format PE console
 
entry main
 
include 'win32a.inc'
 
section '.data' data readable writable
 
        arr1 dw 5,12,8,1,4,15
        arr2 dw 9,6,18,3,50,2
        arr3 dw 6 dup (?)
 
section '.code' code readable executable
 
        main:
                 mov bx,arr1    ;заносим в bx смещение начала первого массива
                 mov bp,arr2    ;заносим в bp смещение начала второго массива
                 mov di,arr3    ;заносим  в di смещение начала третьего массива;
                 mov si,0       ;смещение относительно начала массивов
                 mov cx,6       ;счётчик цикла
        cycle:
                mov ax,[bp+10-si]   ;заносим в ax соответствующее смещению значение
                                    ;элемнта второго массива
                sub ax,[bx+si]      ;вычитание из занесённого в ax элемента второго
                                    ;массива соответствующего элемента первого
                mov [di+si],ax      ;добавление разности в третий массив
                add si,2            ;увеличение относительного смещения
                dec cx
                jnz cycle
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2024, 17:59
Ответы с готовыми решениями:

New с адресацией
Объясните пожалуйста, почему массив buffer не инициализируется нигде, а память все равно выделяется. Т.е. какое-то значение buffer -у...

Растолкуйте new с адресацией!
Я так понимаю что это для избегания повторного выделения памяти? но до конца так и не понял. Спасибо откликнувшимся. Вот я...

Хеширование с открытой адресацией
Нужна помощь! Нужно разработать шаблонный класс - хеш таблицу с любой хеш функцией. Также нужно реализовать рехеширование, метод...

4
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
15.02.2024, 19:20
Формат адресации памяти - сложение регистров и число со знаком.
0
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
15.02.2024, 19:26
Лучший ответ Сообщение было отмечено AndreiHanzo как решение

Решение

Нет опкода для Вашей команды. Правильный вариант предполагает,
что регистры адреса массивов меняются в цикле на 2 (2 байтовый массив).
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
; Даны два двухбайтных массива.
; Нужно вычесть из последнего элемента второго массива первый элемент первого массива,
; из предпоследнего элемента второго - второй элемент первого и т. д.
 
format PE console
 
entry main
 
include 'win32a.inc'
 
section '.data' data readable writable
 
        arr1 dw 5,12,8,1,4,15
        arr2 dw 9,6,18,3,50,2
        arr3 dw 6 dup (?)
 
section '.code' code readable executable
; 32 битный код - значит 32 битные адреса (esi,ebx,edi)
        main:
                 mov esi,arr1    ;заносим в esi смещение начала первого массива
                 mov ebx,arr2    ;заносим в ebx смещение начала второго массива
                 mov edi,arr3    ;заносим  в edi смещение начала третьего массива;
                 mov ecx,6       ;счётчик цикла
                 add ebx,ecx      ;находим адрес конца второго массива
                 add ebx,ecx
        cycle:   sub ebx,2      ;продвигаем указатель второго массива в сторону уменьшения
                 mov ax,[ebx]   ;заносим в ax элемент второго массива с конца
                 sub ax,[esi]   ;вычитание из занесённого в ax элемента второго
                               ;массива соответствующего элемента первого
                mov [edi],ax    ;добавление разности в третий массив
                add esi,2       ;продвигаем адрес первого массива
                add edi,2       ;продвигаем адрес массива результата
                loop cycle     ; говорят, что Ваш вариант цикла работает быстрее, ну и ладно
0
0 / 0 / 0
Регистрация: 15.02.2024
Сообщений: 26
15.02.2024, 21:25  [ТС]
А если для определения смещения элемента второго массива использовать [ebx+10-esi], оно же должно работать? 10 - это количество байтов на которое нужно сместить начальный адрес, чтобы получить адрес последнего элемента, так как размер каждого элемента составляет два байта, ну а esi - сдвиг на один элемент на каждом шаге цикла.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
16.02.2024, 07:44
Цитата Сообщение от AndreiHanzo Посмотреть сообщение
А если для определения смещения элемента второго массива использовать [ebx+10-esi], оно же должно работать?
Нет, т.к.
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Формат адресации памяти - сложение регистров и число со знаком.
[esi+edi±123456]

Подтверждение можно найти в документации производителя процессора. Эта документация из России сейчас недоступна, но легко находится по названию
Volume 2: Instruction Set Reference

Или в любом учебнике ассемблера, например
Юров. Assembler. Специальный справочник. 2-е изд.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2024, 07:44
Помогаю со студенческими работами здесь

Помоготе с индексной адресацией
Как реализовать, к примеру, вот этот код: a:=0; не работает код такого формата mov al, mov ,al

Таблицы с прямой адресацией
Всем привет!!! Начинаю, изучить хеширование, столкнулся с первой темой "Таблицы с прямой адресацией", это, как я понял, реализуется...

Хеширование с открытой адресацией
Пожалуйста, предоставьте код для программы Хеширование с открытой адресацией. Заранее благодарю.

Хэш - таблицы с открытой адресацией
Молю о помощи, а то конец мне: Перевод слов задается в следующем виде: а. Язык с которого осуществляется перевод б. Язык...

Программируемая логика с натуральной адресацией
Где можно посмотреть примеры схем программируемой логики с натуральной адресацией?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru