Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
sseg segment stack ;объявление стека размером 64 байта
  db 64 dup(?)  
sseg ends  
dseg segment ;объявление сегмена данных
  arr dw 1,2,3,4,5,6,7 ;обрабатываемый массив
  narr dw narr-arr-2 ;смещение последнего элемента массива относительно начала массива; т.е. т.к. массив состоит из слов
                     ;(каждое слово 2 байта), фактически тут записано количество_элементов_массива*2-2
                     ;-2 нужно, т.к. индексация массива начинается с 0 (т.е. 1й элемент - arr[0])
  result_arr dw 255 dup(?) ;результирующий массив
dseg ends  
cseg segment ;программный сегмент
assume cs:cseg,ss:sseg,ds:dseg ;директива компилятору, чтобы он знал какие сегменты считать сегментами стека, данных и кода
main proc far ;основная процедура
  push ds ;  |
  xor ax,ax ;|
  push ax ;  |сохранение адреса возврата из программы (ret в конце программы вернёт управление по этому адресу) - на начало
          ; PSP. короче, эта магия необходима, и без неё никак
  mov ax,dseg ;|
  mov ds,ax ;  |инициализация сегмента данных
  ;-------------  
  mov si,narr ;запись в si адреса последнего элемента массива
  mov cl,4 ;нужно, чтобы потом выполнять логические сдвиги на 4 бита
process:  
  mov ax,arr[si] ;в ax записываем элемент, на который указывает si
  mov bx,ax ;копируем ax в bx  
  and bx,0f00fh ;в bx обнуляем все биты, кроме старших 4х и младших 4х
  and ax,0ff0h ;в ах обнуляем младшие 4 и старшие 4 бита
  shr bh,cl ;сдвигаем старшие биты в младший адрес, чтоб потом записать их в младшие биты
  shl bl,cl ;сдвигаем младшие биты в старший адрес, чтоб потом записать их в старшие биты
  or ah,bl ;запись старших битов на место младших
  or al,bh ;запись младших битов на место старших
  mov result_arr[si],ax ;запись обработанного элемента в результирующий массив
  sub si,2 ;переход к следующему элементу (т.е. к элементу, стоящему перед текущим)
  jns process ;если si>=0 то продолжить обработку
  ;-------------  
  ret ;возврат из программы
main endp  
cseg ends  
end main ;указание линковщику, какая процедура является главной

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 14:59 20-01-2007 | Исправлено: rain87, 11:57 24-01-2007
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru