|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
||||||
TASM Ввод и вывод двумерного массива16.11.2016, 22:10. Показов 7227. Ответов 14
Здравствуйте, не могу понять где ошибка в моей программе. В начале я ввожу числа и вроде всё нормально, но когда программа начинает их выводить, то делает она это очень странным образом. На подобии змейки:
Пример: 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 5 5 6 0 1 2 3 4 1 2 3 4 4 2 3 4 4 5 3 4 4 5 5 4 4 5 5 6 Вот, собственно, сам код программы:
0
|
||||||
| 16.11.2016, 22:10 | |
|
Ответы с готовыми решениями:
14
Ввод и вывод двумерного массива Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. Ввод и вывод двумерного массива |
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
| 16.11.2016, 22:13 | |
|
Lici, нутк Emu8086 и вперёд
0
|
|
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 16.11.2016, 22:45 [ТС] | |
|
((( В emu8086 вообще бред какой-то( После ввода второй строки не перебрасывает на третью, а начинает выводить какие-то символы из ASCII( А так я вообще GUI Turbo Assembler пользовался, но там как раз та ошибка, которую я выше описал.
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 17.11.2016, 19:30 | |
Сообщение было отмечено Lici как решение
Решение
Lici, потому что надо не inc bx делать, а add bx,5.
[bx][si] - это сложение bx и si, а не [bx*5+si]. Добавлено через 1 минуту В двух местах там надо замену эту сделать (при вводе и при выводе). p.s. Я бы вообще просто адрес увеличивал на 1 и всё (si, например) и не заморачивался со сложением bx и si, всё равно же числа подряд записываются. p.p.s. И ещё, чтобы символ преобразовать в цифру и наоборот, не 47 надо вычитать/прибавлять, а 48. Лучше даже написать так: sub al,'0'.
1
|
|
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 20.11.2016, 16:09 [ТС] | |
|
Jin X, если таким образом мы просто передвигаемся по матрице, то как же тогда делать масштабирование? Конечно у меня будет совершено другой ввод и вывод чисел, скажем через длинные процедуры, но как тогда быть с масштабированием индексов?
0
|
|
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 21.11.2016, 02:17 [ТС] | |
|
Имеется ввиду что массив будет состоять НЕ из однобайтовых чисел, и по Юрову(Assembler. Учебник для вузов) операция которая позволяет это реализовать, это масштабирование индексов (то есть вместо mas[esi] допустим я буду использовать mas[esi*2]), вы уж простите если я не знаю как это называется в современном синтаксисе ассемблера. Так вот проблема в том, что я не знаю как это возможно реализовать - если писать в индексах bx*2 или что-то подобное, то у меня сразу выводит ошибку.
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||||||
| 21.11.2016, 17:31 | |||||||||||
Сообщение было отмечено Lici как решение
Решение
Это так и называется (масштабирование индексов), просто мало ли про какие индексы идёт речь
![]() Оно доступно только на 386 процессорах (и выше) и только с 32-битными (или 64) регистрами: EAX, EBX и пр. Т.е. BX*2 нельзя, EBX*2 можно. По вопросу - какая разница: байт, слово, двойное слово, с масштабированием или без. Если EBX, например, содержит индекс массива, то EBX*2 будет работать со словами (2 байтами), EBX*4 с двойными словами. Или просто увеличение будет не на 1, а на 2, 4... Вот массив: 1 2 3 4 5 6 7 8 9 В памяти он расположен вот так:
mov al,[si+di*3], где si - номер столбца, di - номер строки (см. p.s. ниже)... и заморачиваться с увеличением номер столбца, затем строки А можно так: mov al,[bx], где bx - просто порядковый номер элемента (сначала в первой строке, потом во второй, затем в третьей, т.е. [0]=1-я строка 1-я позиция, [1]=1-я строка 2-я позиция, [4]=2-я строка 1-я позиция...) и просто тупо увеличивать bx каждый раз на 1 p.s. di*3 - это не коэффициент, который можно использовать в ассемблере, а формула для иллюстрации, по факту же будет что-то типа:
2
|
|||||||||||
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 22.11.2016, 00:27 [ТС] | |
|
Теперь понял. Спасибо большое за такое доходчивое и понятное объяснение)))))
0
|
|
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 25.11.2016, 20:08 [ТС] | |
|
А вы не в курсе - можно ли организовать ввод-вывод ДВУХбайтового числа в двумерном массиве, без масштабирования и регистров, размером с двойное слово?
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||
| 25.11.2016, 22:17 | |||
|
Не понимаю, о чём вопрос, потому что...
![]() А в целом: https://www.cyberforum.ru/asse... 54461.html
1
|
|||
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|||||||||||
| 26.11.2016, 09:34 [ТС] | |||||||||||
|
Понял, получается если я использую двумерный массив из двухбайтовых чисел, то мне не нужны регистры, размерностью с двойное слово? Просто никак не могу понять в чём у меня ошибка(
Мне требуется ввести размерность двумерного массива, потом число, а потом сам двумерный массив, и все элементы, которые больше введённого числа - обнулить. Вот код, в котором все элементы двумерного массива - числа от 0 до 9, и тут у меня всё получается и работает:
0
|
|||||||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 26.11.2016, 17:55 | ||
|
p.s. Если используете неинициализированные данные, то размещайте их либо в секции .data? либо в конце секции .data (по крайней мере, в большом количестве, но лучше это делать всегда). Иначе получаемый код будет больше, чем нужно (как в первом примере лишних почти 64 Кб... из 64 Кб ).
1
|
||
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 26.11.2016, 20:57 [ТС] | |
|
А как же тогда быть с масштабирование индексов, если я ввожу и вывожу числа в регистре, размерностью в слово, а как вы пишите масштабирование работают только тогда, когда регистр размерностью с двойное слово? Как же мне в двумерный массив элементы помещать?(
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 26.11.2016, 22:41 | |
|
Так, речь про адресацию? Я думал, надо занести значение в регистр
![]() Если очень нужно масштабирование, можно использовать 32-битные регистры. Но это обычно в 32-битном режиме делается (в прогах под Windows, например). Для DOS-программ так, конечно, тоже можно, но обычно не делают. А чем вам не нравится использовать не коэффициенты ( mov ax,[ebx*2] + inc ebx), а просто менять индексные регистры на нужное кол-во (mov ax,[bx] + add bx,2)?Даже с 32-битными регистрами всё равно не получится сделать, например, так: mov ax,[ebx*2+edx*8], масштабируется только 1 регистр.
1
|
|
| 26.11.2016, 22:41 | |
|
Помогаю со студенческими работами здесь
15
Ввод вывод двумерного массива Ввод-вывод двумерного массива Ввод-вывод двумерного динамического массива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|