Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не пойму суть кода 
:(
    Опции темы
m9yt
Дата 23.5.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый вечер.
Парюсь с задачей, уже надоела...
Сама задача: Вычесть из массива в дополнительном сегменте массив, хранимый в сегменте данных, при условии неравенства элементов.  Массив-разность разместить  в сегменте данных.

Код

title lab4
page ,132
;сегмент стека
sta segment para stack 'stack'
db 255 dup('stack')  ; область стека
sta ends
;сегмент данных
dseg segment
str1 db 'Enter mas1:$' 
str2 db 'Enter mas2:$'
str3 db 'Result:'
mas1 db 10 dup ('$') //1 массив
mas3 db 10 dup ('$')// 3 массив
dseg ends

eseg segment
mas2 db 10 dup ('$') // 2 массив
eseg ends

subttl lab5
page
;сегмент кода
cseg segment
assume cs:cseg,ds:dseg,ss:sta,es:eseg
entry proc far   ;начало процедуры
push ds        ;сохраняем в стек начальное значение ds
sub ax,ax    ;обнуляем ax
push ax         
mov ax,dseg    ;инициализация адреса сегмента данных
mov ds,ax

mov ah, 09h            ;сообщение №1
mov dx, offset str1
int 21h

mov ah, 0Ah
mov dx, offset mas1    ; вводим первый массив
int 21h

mov dl,0ah
mov ah,2            ;перевод каретки
int 21h

mov ah, 09h
lea dx, mas1+2    ;вывод первого массива
int 21h  

mov dl,0ah
mov ah,2            ;перевод каретки
int 21h

mov ah, 09h
mov dx, offset str2    ;вывод второго сообщения
int 21h

mov ah, 0Ah
mov dx, offset mas2    ; вводим второй массив
int 21h

mov dl,0ah
mov ah,2            ;перевод каретки
int 21h

mov ah, 09h
lea dx, mas2+2    ;вывод второго массива
int 21h


mov cx,5   ;счетчик элементов в массиве
mov di,offset mas2+2   ;адрес первого элемента первого массива-источника(сегм. доп. данных)         
mov bx,offset mas1+2 ;адрес первого элемента второго массива-источника(сегм. данных)
mov si,offset mas3+2    ;адрес первого элемента массива-приемника

again:
    mov al,es:[di]       ;запись из дополнительного сегмента данных по адресу смещения указанному в di, в младший байт аккумулятора
    mov ah,[bx]          ;запись из сегмента данных по адресу смещения указанному в bx, в старший байт аккумулятора 

    cmp al,ah           ;сравнение элементов
    jne a                 ;если неравны, то на а

    inc bx               ;увеличение адреса текущих элементов в первом массиве
    inc di           ;увеличение адреса текущих элементов в втором массиве

    a: 
    sub al,ah            ;разность
    mov [si],al           ;запись элементов в массив-приемник          
    inc si               ;увеличение адреса смещения массива-приемника
    inc bx               ;увеличение адреса текущих элементов в первом массиве
    inc di           ;увеличение адреса текущих элементов в втором массиве
loop again         ;конец цикла

mov dl,0ah
mov ah,2            ;перевод каретки
int 21h

mov ah, 09h
mov dx, offset str3    ;вывод третьего сообщения
int 21h

mov dl,0ah
mov ah,2            ;перевод каретки
int 21h

mov ah, 09h
lea dx, mas3+2    ;вывод третьего массива
mov   ah,1
int   21h   

ret                ;возврат из процедуры
entry endp           ;конец процедуры
cseg ends             ;конец сегмента кода
end entry             ;конец программного модуля


Это сообщение отредактировал(а) m9yt - 23.5.2011, 19:21
PM MAIL   Вверх
iff
Дата 27.5.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



Очень много некорректных решений - начиная от формата данных, не понятно зачем после ввода массива его же и выводить (он при вводе отображается на экране).
Ну и главное: уясните с массивом чего вы работаете. Символов? Строк? Целых чисел?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
m9yt
Дата 27.5.2011, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(iff @ 27.5.2011,  14:23)
Очень много некорректных решений - начиная от формата данных, не понятно зачем после ввода массива его же и выводить (он при вводе отображается на экране).
Ну и главное: уясните с массивом чего вы работаете. Символов? Строк? Целых чисел?

С массивом целых чисел.
PM MAIL   Вверх
iff
Дата 27.5.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



Тогда вам нужно предварительно введенную строку преобразовать в массив.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
m9yt
Дата 27.5.2011, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(iff @ 27.5.2011,  20:47)
Тогда вам нужно предварительно введенную строку преобразовать в массив.

Знать бы еще как.
На коде никак нельзя показать? Словами не очень - то понимается...
PM MAIL   Вверх
500mhz
Дата 28.5.2011, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



когда ты с клавы вводиш циферку 4 то в массиве у тебя сохраниться не 4 а ascii код 0х34
http://www.asciitable.com
вообшем тебе нада atoi сделать ))) для обоих массивов, потом вычетание а потом itoa перед печатью на экран


--------------------

PM MAIL ICQ   Вверх
m9yt
Дата 28.5.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(500mhz @ 28.5.2011,  00:32)
когда ты с клавы вводиш циферку 4 то в массиве у тебя сохраниться не 4 а ascii код 0х34
http://www.asciitable.com
вообшем тебе нада atoi сделать ))) для обоих массивов, потом вычетание а потом itoa перед печатью на экран

И опять же все на словах! Ни одного конкретного примера...
PM MAIL   Вверх
500mhz
Дата 28.5.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



для курсовых дипломных и прочих задач есть отдельная тема )


--------------------

PM MAIL ICQ   Вверх
m9yt
Дата 28.5.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(500mhz @ 28.5.2011,  17:03)
для курсовых дипломных и прочих задач есть отдельная тема )

Хм. Я ж не прошу сделать все за меня. Форум для этого и создан, чтобы помочь кому - либо, и не обязательно за деньги.
PM MAIL   Вверх
500mhz
Дата 29.5.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



ну так яж написал после ввода с клавы получаеш ascii код, его нада перевести в число, включи мозги,
если код = 0х34 то как из него получит 0х04 ?


--------------------

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

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

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


 




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


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

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