pokk
Помогающий
Offline
|
|
« : 09-09-2011 16:42 » |
|
Подскажите, как можно поменять местами элементы в массиве ? Т.е что бы последний стал первый а первый последним
И второй вопрос как можно узнать длину массива ? Т.е у меня есть ввод с клавиатуры дальше некие преобразования и результат записывается в массив и дальше надо сделать обратно вывод на если выводить все что есть в массиве то он ероглифы всякие добавляет.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 09-09-2011 16:46 » |
|
1. Первый элемент в буфер Последний элемент на место первого Из буфера в последний
2. При вводе считаешь количество элементов, которые ты ввел.
зы а еще лучше иногда код показывать
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Basurman
|
|
« Ответ #2 : 09-09-2011 16:50 » |
|
Ну первый и последний элемент массива можно поменять местами используя дополнительную переменную того же типа, что и элементы массива. А счетчик в лом использовать? Записал элемент в массив, нарастил счетчик - вывел элемент из массива, уменьшил счетчик.
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #3 : 09-09-2011 16:54 » |
|
1. Первый элемент в буфер Последний элемент на место первого Из буфера в последний
мм ну тут надо с начало на второй вопрос ответ понять =)) 2. При вводе считаешь количество элементов, которые ты ввел. эх я так и знал что ответите мне =))) по этому и написал что у меня идут преобразования и там дальше меняется размер (преобразую двоичный код в десятичный) зы а еще лучше иногда код показывать да тут у меня много всего даже не знаю что показать =) Basurman, я так и делал но почему-то они у меня не сходятся. Надоело их уже ловить записывает в одно место а считать пытается с другого
|
|
|
Записан
|
|
|
|
Basurman
|
|
« Ответ #4 : 09-09-2011 17:11 » |
|
Надоело их уже ловить записывает в одно место а считать пытается с другого
Ошибка описания, д.б.: записываю в одно место, а считать пытаюсь из другого
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #5 : 09-09-2011 17:18 » |
|
Ошибка описания, д.б.: записываю в одно место, а считать пытаюсь из другого Возможно и так.Если я вас правильно понял Так тоже не получается т.к иногда этот массив может 3 места занимает а при других ведённых данных 4-5
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #6 : 09-09-2011 17:34 » |
|
Показывай ввод массива Показывай вывод массива иногда этот массив может 3 места занимает а при других ведённых данных 4-5
Откуда дровишки?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
pokk
Помогающий
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
|
|
« Ответ #8 : 09-09-2011 18:17 » |
|
Всё сделал всё как надо всем спасибо за помощь !=)
Для того чтоб что-то понять, нужно кому-то что-то рассказать
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
pokk
Помогающий
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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 10-09-2011 06:35 » |
|
pokk, не вижу, чтобы ты изменил все AL на AX. И вообще реализация не похожа на цепь (...(1*2+1)*2+1...). Например, первым действием должно быть умножение, а у тебя - сложение.
|
|
« Последнее редактирование: 10-09-2011 06:39 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
pokk
Помогающий
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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #12 : 11-09-2011 07:59 » |
|
pokk, я не понимаю, о чём ты говоришь: V1 у тебя байтовый (db), и у тебя нет сложения с нулём. Все телепаты в отпуске.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
pokk
Помогающий
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
Помогающий
Offline
|
|
« Ответ #14 : 12-09-2011 10:03 » |
|
Опять я всё с тем же вопросом как можно записать в ax число из массива размерностью db не меняя ax и не изменяя размер массива V1 Db 30 DUP(?) mov ax,v1
И ещё один вопрос делаю программу что бы она записывала результат обработки в файл вроде всё работает но результат пишется не понятно какой ввиде прямоугольников и пробелов как это избежить ? или как правильно массив создать что бы из него можно было вывести если задать его так DATA DB 'лдыва опр вдалор',0 то он всё нормально выводит буквы
|
|
|
Записан
|
|
|
|
Basurman
|
|
« Ответ #15 : 12-09-2011 10:42 » |
|
как можно записать в ax число из массива размерностью db не меняя ax и не изменяя размер массива Что бы это значило? По второму вопросу: наверное неправильная обработка и, в результате - несовпадение кодировок.
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #16 : 12-09-2011 10:48 » |
|
ну как код я привёл такой компилятор говорит что ошибка а если вместо AX написать AL или AH то всё работает нормально По второму вопросу: наверное неправильная обработка и, в результате - несовпадение кодировок. а можно чуть по подробнее ? я вывожу примерно из такого массива это нечего не меняет ?
|
|
|
Записан
|
|
|
|
Basurman
|
|
« Ответ #17 : 12-09-2011 11:19 » |
|
Т.е. из массива определенного как байтовый записать в словный регистр? А приведение типов вроде word ptr ничем не поможет? Дам глобальную подсказку: найти что-нибудь типа Питер Абель "Язык ассемблера для IBM PC и программирования", а лучше всего наверное Кип Р. Ирвин "Язык ассемблера для процессоров INTEL" издание 4 или выше (если уже появилось). После прочтения многое тайное станет понятным.
|
|
|
Записан
|
|
|
|
|