Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перестановка элементов массива, помогите найти ошибку 
:(
    Опции темы
Ellmi
Дата 24.9.2011, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Доброго времени суток!
Помогите пожалуйста найти ошибку, на ассемблере уже сто лет не писала, не могу сообразить что не так smile ..
Пользователь вводит строку, нужно символы этой строки переставить в соответствии с заданным в программе массивом, т е в проге задан массив 
Num dw  3, 2, 1, 4, 5, 6
пользователь вводит : qwerty
Должно получиться: ewqrty
А получается: eAw(стрелка)qF - правильно через один символ, откуда остальное не пойму никак smile 
Код

.model small
.stack 100h
.data
Mes db 13, 10,'Vvedite stroky simvolov:', '$'
Str dw 20 dup (?)
Num dw  3, 2, 1, 4, 5, 6
Result dw 20  dup (?)
i dw 0
len dw 6

.code
mov ax,@data
mov ds,ax
mov dx, offset Mes   
mov ah, 09h
int 21h                   ;вывод на экран запроса на ввод строки 

mov ah,3fh
mov bx,0
mov cx,50
mov dx, offset String
int 21h                   ;вывод на экран и сохранение введенной строки  

sub ax, 2               ;вычитание из длины 2(т.к. нажимаем Enter)
xor bx, bx              ;очистка BX
xor cx, cx;
mov len2,ax             
xor ax, ax;

Loop:
mov cx,Num[bx]  ;заносим в сх цифру из массива Number
dec cx                      ;уменьшаем её на 1, т к индексы с 0
mov i,bx                   ;запомнили индекс
mov bx,cx            
mov dx,String[bx]    ;в dx записываем элемент строки с индексом, равным цыфре из Number
mov bx,i                   ;восстанавливаем индекс
mov Result[bx],dx    ;в результирующую строку заносим этот символ
inc bx
cmp bx,len                ;проверяем не достигли ли конца массива Number
jne Loop                   ;если нет то переход на метку


mov ah,40h
mov bx,1
mov cx,len 
mov dx,offset Result
int 21h              ;вывод на экран результата


mov ah,01h           ;ожидание нажатия клавиши
int 21h

mov ah,4ch           ;завершение программы 
int 21h                       
END 


PM MAIL   Вверх
ФедосеевПавел
Дата 25.9.2011, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



Массив Num из слов, а String из байт. И навигация по Num должна быть соответственно другой.
Код

push bx
add bx, bx
mov cx,Num[bx]  ;заносим в сх цифру из массива Number
pop bx

PM   Вверх
Ellmi
Дата 25.9.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



ФедосеевПавел, Спасибо=)! Сделать получилось,  а почему 
Цитата(ФедосеевПавел @  25.9.2011,  07:58 Найти цитируемый пост)
Массив Num из слов, а String из байт.

понять не получилось... ведь все три массива из слов
Код

String dw 20 dup (?)         
Num dw  3, 2, 1, 4, 5, 6   
Result dw 20  dup (?)       


PM MAIL   Вверх
ФедосеевПавел
Дата 25.9.2011, 19:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



В DOS строка представляет собой байтовый массив, вне зависимости как была описана метка массива
Код

String dw 20 dup (?)
 или, что тоже самое
String db 40 dup (?)

Т.е. один символ - один байт. Например, именно так описана строка Mes.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.