Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Размер массива  (Прочитано 21261 раз)
0 Пользователей и 11 Гостей смотрят эту тему.
pokk
Помогающий

ru
Offline Offline

« : 09-09-2011 16:42 » 

Подскажите, как можно  поменять  местами элементы в массиве ? Т.е что бы  последний стал первый  а первый последним

И второй вопрос  как можно узнать  длину массива  ?  Т.е у меня есть ввод с клавиатуры  дальше некие преобразования и результат
записывается в массив    и дальше надо сделать обратно вывод  на  если выводить все что есть в массиве то он  ероглифы всякие
добавляет.



Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-09-2011 16:46 » 

1.
Первый элемент в буфер
Последний элемент на место первого
Из буфера в последний

2. При вводе считаешь количество элементов, которые ты ввел.

зы а еще лучше иногда код показывать

 
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 09-09-2011 16:50 » 

Ну первый и последний элемент массива можно поменять местами используя дополнительную переменную того же типа, что и элементы массива.
А счетчик в лом использовать? Записал элемент в массив, нарастил счетчик - вывел элемент из массива, уменьшил счетчик.
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #3 : 09-09-2011 16:54 » 

Цитата
Цитата
1.
Первый элемент в буфер
Последний элемент на место первого
Из буфера в последний
мм  ну тут надо с начало на второй вопрос ответ понять =))


Цитата
2. При вводе считаешь количество элементов, которые ты ввел.
эх   я так и знал что   ответите мне =)))  по этому и написал  что у меня идут преобразования и там дальше меняется  размер (преобразую двоичный код в десятичный)

Цитата
зы а еще лучше иногда код показывать
да тут у меня много всего даже не знаю что показать =)

Basurman,  я так и делал  но почему-то они у меня не сходятся. Надоело их уже ловить   записывает в одно место а считать пытается с другого
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 09-09-2011 17:11 » 

Надоело их уже ловить   записывает в одно место а считать пытается с другого
Ошибка описания, д.б.: записываю в одно место, а считать пытаюсь из другого
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #5 : 09-09-2011 17:18 » 

Цитата
Ошибка описания, д.б.: записываю в одно место, а считать пытаюсь из другого
Возможно и так.Если я вас правильно понял
Так тоже не получается т.к  иногда  этот массив может  3 места занимает а  при других ведённых данных  4-5
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 09-09-2011 17:34 » 

Показывай ввод массива
Показывай вывод массива

Цитата
иногда  этот массив может  3 места занимает а  при других ведённых данных  4-5
Откуда дровишки?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
pokk
Помогающий

ru
Offline Offline

« Ответ #7 : 09-09-2011 17:43 » 

правда я тут не много накрутил уже =)) сейчас что-то очень не понятное выдаёт   очень много ероглифов
ещё звуковой сигнал даже иногда бывает и нули  =))
Цитата
2. При вводе считаешь количество элементов, которые ты ввел.
вот сейчас хочу такое по пробовать только не при воде а  уже когда в выходной массив всё  записывается  

ввод
Код:
in1:	push	ax
push bx
push si
mov si,0
loopint:
mov ah,1h
int 21h
mov bl,00001111b
and al,bl
mov V1[si],al
inc si
inc number


cmp al,13
jne loopint
dec number

pop si
pop bx
pop ax
ret

вывод
Код:
out1:	push	ax
push dx
push si
mov si,0

mov cx,numberout
mov ah,2h
out2: mov dl,outdb[si]
add dl,30h
inc si
int 21h
loop out2
pop si
pop dx
pop ax

ret

Цитата
Откуда дровишки?
 ?

Цитата
2. При вводе считаешь количество элементов, которые ты ввел.
вот сейчас хочу такое по пробовать только не при воде а  уже когда в выходной массив всё  записывается 
всё вот так вот заработало осталось местами поменять


Добавлено через 25 минут и 3 секунды:
Всё сделал всё как надо всем спасибо за помощь !=)
« Последнее редактирование: 09-09-2011 18:13 от pokk » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 09-09-2011 18:17 » 

Всё сделал всё как надо всем спасибо за помощь !=)
Для того чтоб что-то понять, нужно кому-то что-то рассказать
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
pokk
Помогающий

ru
Offline Offline

« Ответ #9 : 09-09-2011 18:35 » 

Цитата
Для того чтоб что-то понять, нужно кому-то что-то рассказать
Это точно !!
оказалось не всё так просто =))
я забыл что  мне надо сделать для двух байтного числа

Вот подпрограмма которая переводит из двоичного числа в десятичное.
она записывает всё в массив  outdw  который задан как   outdw    dw   10 DUP(?)
и что бы его вывести надо  записать в  младшую часть  регистра  Dx(DL)
Код:
....
out2: mov dl,outdb[si]
....
но тут начинает  компилятор начинает ругаться на то что  не понятный тип

как преобразовать outdw    dw   10 DUP(?)     в  outdw    db   10 DUP(?)
путём удаление старшей тетрады ?




Код:
ten:
push ax
push si
push cx

mov ax,temp ;записываем число в регистр из массива
mov Si,0 ;индекс(начальный адрес)
mov bx,1010b ;делитель (10)
ten1: ;метка перехода
div bx ;делим число  dx=остаток, aч=частное 
mov outdw[SI],Dx ;остаток записываем в массив V2
inc SI ;отнимаем 1 от индекса

mov Dx,0000h ;очищаем остаток
mov outdw[SI],0FBh ;2Bh ; означает знак плюс(C) после перезаписи становится в старшей тетраде
inc numberout
cmp ax,0 ;сравниваем частное с 0  если не равно 0 то переходим на метку next
jne ten1
inc numberout
pop cx
pop si
pop ax
ret



Добавлено через 9 часов, 54 минуты и 54 секунды:
как-то сделал =))


Добавлено через 9 минут и 59 секунд:
Что-то не как не могу разобраться 
вот этот код полностью работает. Алгоритм  такой   ((((1*2+1)*2+1)*2+1)*2+1)+...
но  работает он только до  FF  т.к использую  al
а когда  я изменил   все  al  на ax и V1      dw   ...

то у меня получается в регистре ax  после второго сложение    не 0003  а  0102 
вот я не как не могу понять каким образом туда единица прыгнула так далеко ?

Код:
model	small
.data
V1 db 01b,01b,01b,01b,01b,01b,01b,01b
V2 dw 1 DUP(?)
.code
mov ax,@data
mov ds,ax
mov si,0
mov ax,0
mov cx,7
ASCII1: add al,V1[si]
shl al,1   
inc si
loop ASCII1
add al,V1[si]
mov v2,ax
mov ax,4c00h
int 21h
end

« Последнее редактирование: 10-09-2011 04:40 от pokk » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 10-09-2011 06:35 » 

pokk, не вижу, чтобы ты изменил все AL на AX. И вообще реализация не похожа на цепь (...(1*2+1)*2+1...). Например, первым действием должно быть умножение, а у тебя - сложение.
« Последнее редактирование: 10-09-2011 06:39 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
pokk
Помогающий

ru
Offline Offline

« Ответ #11 : 11-09-2011 07:00 » 

Цитата
pokk, не вижу, чтобы ты изменил все AL на AX.
Это у меня рабочий вариант с   AL
Цитата
И вообще реализация не похожа на цепь (...(1*2+1)*2+1...). Например, первым действием должно быть умножение, а у тебя - сложение.
Сложение с 0  т.е получается  запись в ax (аналогично mov)  и тогда первое будет умножение  а после использую первое сложение
В общем меня одолевает сомнение с  V1      dw   ....   может из за этого это получается ?

Код:
ASCII1:	add		al,V1[si]
shl al,1  
inc si
loop ASCII1
add al,V1[si]



« Последнее редактирование: 11-09-2011 07:12 от pokk » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 11-09-2011 07:59 » new

pokk, я не понимаю, о чём ты говоришь: V1 у тебя байтовый (db), и у тебя нет сложения с нулём. Все телепаты в отпуске.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
pokk
Помогающий

ru
Offline Offline

« Ответ #13 : 11-09-2011 08:06 » 

Цитата
и у тебя нет сложения с нулём
как нету ?
Код:
mov		si,0
mov ax,0
mov cx,7

ASCII1: add al,V1[si]
shl al,1   
inc si
loop ASCII1

add al,V1[si]
mov v2,ax

а это что ?   складывается  al=0  с  первым элементом  из масcива V1 результат записсывается в al  далее
умножаем на  2  после прибавляем   после увеличиваем индекс
и теперь происходит сложение  1*2+второй элемент массива
т.к  заканчиваем  на умножении  ещё одно сложение вынес из цикла 
что бы закончилось им






Добавлено через 1 час, 31 минуту и 1 секунду:
вопрос вот в чём
этот код работает полностью:
Код:
model	small
.data
V1 db 01b,01b,01b,01b,01b,01b,01b,01b
V2 db 1 DUP(?)
.code
mov ax,@data
mov ds,ax
mov si,0
mov ax,0
mov cx,7

ASCII1: add al,V1[si]
shl al,1   
inc si
loop ASCII1
add al,V1[si]
mov v2,al
mov ax,4c00h
int 21h
end

а это  работает но не правильно  после первого  прохода цикла 
и выполнение  команды  add      ax,V1[si]  второй раз    т.е должно сложится   02+01  результат получается
0102  а не 03   пот этого я не могу понять
Код:
model	small
.data
V1 dw 01b,01b,01b,01b,01b,01b,01b,01b
V2 dw 1 DUP(?)
.code
mov ax,@data
mov ds,ax
mov si,0
mov ax,0
mov cx,7

ASCII1: add ax,V1[si]
shl ax,1   
inc si
loop ASCII1
add ax,V1[si]
mov v2,ax
mov ax,4c00h
int 21h
end

Добавлено через 31 минуту и 2 секунды:
В общем всё  добавил  ещё  один  inc si
и всё заработало как над =)

« Последнее редактирование: 11-09-2011 10:08 от pokk » Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #14 : 12-09-2011 10:03 » 

Опять я всё с тем же вопросом 
как можно записать в ax   число из массива  размерностью  db  не меняя   ax  и не  изменяя размер массива
Код:
V1		Db    30 DUP(?)
           mov     ax,v1

И ещё один вопрос   делаю программу что бы  она записывала  результат  обработки в файл
вроде всё работает но результат пишется не понятно какой   ввиде   прямоугольников  и пробелов
как это избежить ? или как правильно массив создать что бы из него можно было вывести
если задать его так
Код:
DATA	DB		'лдыва опр вдалор',0
  то он всё нормально выводит буквы 
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 12-09-2011 10:42 » 

Цитата
как можно записать в ax   число из массива  размерностью  db  не меняя   ax   и не  изменяя размер массива


Что бы это значило?

По второму вопросу: наверное неправильная обработка и, в результате - несовпадение кодировок.
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #16 : 12-09-2011 10:48 » 

Код:
Что бы это значило?
ну как код я привёл такой  компилятор говорит что ошибка
а если  вместо AX  написать  AL  или AH  то  всё работает  нормально

Код:
По второму вопросу: наверное неправильная обработка и, в результате - несовпадение кодировок.
а можно чуть по подробнее ?
я вывожу примерно из такого массива
Код:
V1		Db    30 DUP(?)
это нечего не меняет ?
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 12-09-2011 11:19 » 

Т.е. из массива определенного как байтовый записать в словный регистр? А приведение типов вроде word ptr ничем не поможет?
Дам глобальную подсказку: найти что-нибудь типа Питер Абель "Язык ассемблера для IBM PC и программирования", а лучше всего наверное Кип Р. Ирвин "Язык ассемблера для процессоров INTEL" издание 4 или выше (если уже появилось). После прочтения многое тайное станет понятным.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines