Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сегмент кода 
:(
    Опции темы
Hidalgo
Дата 12.12.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброе время суток, помогите кто может вот с такое задачей. Заранее огромное спасибо.

Задан логический сегмент Data1:

Код

Data1 segment
I1 db 0
I2 db 0
I3 db 0
I4 db 0
A1 dw 5 dup (6 dup (6 dup (5 dup (?))))
Data1 ends


Задан логический сегмент Data2:

Код

Data2 segment
A2 dd 5 dup (6 dup (6 dup (5 dup (0abcd0123h))))
Data2 ends


1. Создать сегмент кода (например, с именем Code1), в котором бы программа реализовала следующая задача - пересылка двух "средних" байтов (0CD01H) каждого чотирьохбайтного элементов массива A2 в соответствующий (то есть, с теми же значениями индексов) элемент массива A1, используя значения индексов массивов по адресам I1, I2, I3, I4.

2. Создать еще один логический сегмент кодов (например, с именем Code2), в котором с использованием цепных команд подсчитывалось количество байт логического сегмента Data2, значение которых равно 0abh. Обеспечит безусловную передачу управления из сегмента Code1 в сегмент Code2 посредством косвенной межсегментного передачи управления.

PM MAIL   Вверх
500mhz
Дата 12.12.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


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

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



компелятор то какой? )))


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

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


Новичок



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

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



Цитата(500mhz @ 12.12.2010,  18:58)
компелятор то какой? )))

MASM или TASM, а также AFD или TDEBUG.
PM MAIL   Вверх
500mhz
Дата 12.12.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


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

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



в чем имеено проблема то? что не получаеться?


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

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


Новичок



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

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



Цитата(500mhz @ 12.12.2010,  21:30)
в чем имеено проблема то? что не получаеться?

ничего не получается, не могу понять что надо, и так само как его сделать, на лекциях ничего не объясняет. 
PM MAIL   Вверх
500mhz
Дата 13.12.2010, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


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

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





.code 'CODE1'
тут ченить пишем

.code 'CODE2'
тут тоже ченить пишем


.data 'DATA1'
ну тут дата

.data 'DATA2'
и тут дата


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

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


Новичок



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

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



вот может кому то понадобиться:
Код

.386            ;laba_3
 
 
Data1 segment PARA USE16
 
bytes_num dw 0
        A1      dw      5 dup (6 dup (6 dup (5 dup (?))))
Data1 ends
 
 
Data2 segment PARA USE16
I1              db      0
I2              db      0
I3              db      0
I4              db      0
 
        A2      dd      5 dup (6 dup (6 dup (5 dup (0abcd0123h))))
Data2 ends
 
 
 
Code1 segment use16
        ASSUME cs:Code1,ds:Data2,es:Data1               ;директива ASSUME указывает Ассемблеру,  что в значение
                                                                                        ;какого сегмента установлен данный сегментный  регистр
begin:
 
        mov ax,Data2                            ; data2  in ax
        mov ds,ax                                       ; in ds -> data2
        mov ax,Data1                            ; data1 in ax
        mov es,ax                                       ; in es -> data1
 
                ;xor esi,esi
                ;xor edi,edi
        
        mov esi,offset A2                       ; регистр esi содержит указатель на A2
        mov edi,offset A1                       ; регистр edi содержит указатель на A1
 
        mov I1,5                                        ; записываем значение (5, 6, 6, 5) в адреса (I1, I2, I3, I4)
        mov I2,6
        mov I3,6
        mov I4,5
 
        cld                                                     ;сброс в ноль флага направления df
        
        _beg:                                           ;начало цикла
                                inc esi                 ;опредиляем средину
                                movsw                   ;ересылают элемент из одной ячейки памяти в другую
                                inc esi
                        
                                dec I4
                                jnz _beg
                        mov I4,5
                        dec I3
                        jnz _beg
                mov I3,6
                dec I2
                jnz _beg
        mov I2,6
        dec I1
        jnz _beg
        
        jmp far ptr _c2
 
        nop                                                     ;пустая команда
        nop
        nop
Code1 ends
 
 
 
Code2 segment USE16
        _c2 label far
 
        ASSUME cs:Code2,es:Data2,ds:Data1               ;Директива ASSUME позволяет Ассемблеру проверить допус-
                                                                                        ;тимость каждого обращения к именованной ячейке  памяти  с  учетом
                                                                                        ;значения текущего сегментного регистра
        
        mov ax,Data2
        mov es,ax
        mov ax,Data1
        mov ds,ax
                
        mov edi,offset A2
        mov eax,0abh                            ; в eax значение "0abh"
        
        mov ecx, 5*6*6*5*4;                     ; размер A2
        xor ebx,ebx                                     ; обнуленеи ebx
        
        cld
                _beg2:
                        repne scasb                                     ; повторение и поиск значения в последовательности (цепочке) элементов в памяти
                                                                                ; то есть нашего значения "0abh"
                        jcxz _end2                                      ; переход внутри текущего сегмента команд, проверка на раенство нашей задачи
                        inc bx
                        jmp _beg2
                _end2:
                        nop
                        cmp es:[edi - 1], al            ; проверка на последний элемент
                        jne _end2_1
                        inc bx
                _end2_1:
        
        mov bytes_num,bx
        
        nop 
        nop
        nop
        
        mov ax,400h                             ; завершение работы программы
        int 21h
 
Code2 ends
end begin

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

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

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


 




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


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

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