Консультация № 136870
14.05.2008, 23:27
0.00 руб.
0 1 1
Здравствуйте эксперты! в универе по ассемблеру задали следующие задание: проанализировать содержимое PSP от 00h до 16h и вывести содержимое на экран с пояснениями.
Помогите пожалуйста с написанием. заранее спасибо.

Обсуждение

давно
Старший Модератор
31795
6196
20.05.2008, 14:31
общий
это ответ
Здравствуйте, Funtik!

Программа в приложении.
Вопросы задавайте в мини-форум.
Удачи!

Приложение:
MASM;IDEAL or MASMMODEL tiny.186CODESEGorg 100h;переходим в текстовый режимstart: mov ax,03 int 10h;выводим сообщение mov ah,9 mov dx,offset dbEnter int 21h;вводим строку mov ah,0ah mov dx,offset dbMaxName int 21h;готовимся открывать файл, записываем после имени файла 0 mov al,dbSizeName xor ah,ah mov dx,offset dbInfoFile push dx pop bx add bx,ax mov byte ptr[bx],0;открываем файл для читения mov ax,3d20h xor cx,cx int 21h;проверяем ошибку открытия файла jnc noErrorOpen mov dx,offset dbErrorOpen jmp short outMessage;запоминаем указатель на файл и читаем 22 байтаnoErrorOpen: mov dwFileHndl,ax mov bx,ax mov dx,offset dbInfoFile mov cx,16h mov ah,3fh int 21h;запоминаем флаг и закрываем файл pushf mov ah,3eh mov bx,dwFileHndl int 21;востанавливаем флаг и проверяем ошибку чтения данных popf jnc noErrorLoad mov dx,offset dbErrorLoad jmp short outMessage;настраиваемся на вывод информацииnoErrorLoad: mov si,offset dbInfoFile mov di,offset dbPriznak;читаем и записываем признак ехе-файла lodsw stosw;настраиваемся на таблицу указателей mov bx,offset dwTable mov cx,szTable shr cx,1;цикл записи информацииloop_A: xchg si,bx;читаем из таблицы адрес куда будем записывать lodsw mov di,ax xchg si,bx;читаем записываемое значение lodsw;настраиваемся на вывод в 16-ой системе push cx mov cx,4;записываем в цикле число в 16-ой системеloop_B: rol ax,4 push ax and al,0fh or al,30h cmp al,3Ah;если буква корректируем код jl noHext add al,07;записываем в памятьnoHext: stosb pop ax loop loop_B;повторяем для всех прочитанных данных pop cx loop loop_A mov dx,offset dbOutInfo;выводим сообщениеoutMessage: mov ah,09 int 21h;ожидаем любую клавишу и выходим xor ax,ax int 16h ret;dwFileHndl dw ?dbMaxName db 16dbSizeName db ?dbInfoFile db 16h dup(?);Таблица указателей на записываемую информацию в текстеdwTable dw offset dbMod512 dw offset dbDiv512 dw offset dbCount dw offset dbHead dw offset dbMin dw offset dbMax dw offset dbStack dw offset dbSPEnter dw offset dbCheck dw offset dbIPEnter dw offset dbCSDeltaszTable equ $-dwTable;dbOutInfo db 13,10,‘Признак ЕХЕ-файла:‘dbPriznak dw ? db 13,10,‘Длина файла(mod 512):‘dbMod512 db ?,?,?,? db 13,10,‘Размер в страницах(div 512)):‘dbDiv512 db ?,?,?,? db 13,10,‘Число элементов таблицы настройки:‘dbCount db ?,?,?,? db 13,10,‘Размер заголовка в параграфах(16):‘dbHead db ?,?,?,? db 13,10,‘Минимальное число параграфов:‘dbMin db ?,?,?,? db 13,10,‘Максимальное число параграфов:‘dbMax db ?,?,?,? db 13,10,‘Смещение сегмента стека:‘dbStack db ?,?,?,? db 13,10,‘Содержимое регистра SP:‘dbSPEnter db ?,?,?,? db 13,10,‘Контрольная сумма:‘dbCheck db ?,?,?,? db 13,10,‘Содержимое регистра IP:‘dbIPEnter db ?,?,?,? db 13,10,‘Смещение сегмента кода:‘dbCSDelta db ?,?,?,? db 13,10,‘Нажмите любую клавишу:$‘dbErrorOpen db 13,10,‘Error:ошибка открытия файла$‘dbErrorLoad db 13,10,‘Error:ошибка чтения файла$‘dbEnter db 13,10,‘Введите имя ЕХЕ-файла(имя.ехе):$‘ end start
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа