Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1522 | Дата выхода: | 15.06.2012, 21:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 89 / 37 | Вопросов / ответов: | 1 / 1 | Консультация # 186365: Здравствуйте! Прошу помощи в следующем вопросе: Нужна помощь в решении задач по Операционным системам на ассемблере. Используется платформа (для х86-совместимых: Windows Предпочителен ассемблер MASM Задание 1 Bezymyannyi.bmp (387.8 кб) Задание 3 Консультация # 186365: Здравствуйте! Прошу помощи в следующем вопросе: Нужна помощь в решении задач по Операционным системам на ассемблере. Используется платформа (для х86-совместимых: Windows Предпочителен ассемблер MASM
Задание 1 Bezymyannyi.bmp (387.8 кб)
Задание 3 zadanie_3.JPG (166.5 кб)
Задание 4 zadanie_4.JPG (69.9 кб)
Задание 5 Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование.
(Вопрос к заданию 5)Найти последний положительный элемент массива из 10 целых со знаком типа слово.
Задания 6,7. Оформить в виде процедур фрагмент про-граммы из задания №5 (в двух вариантах: с передачей парамет-ров через регистры (задание 6) и через ст ек (задание 7)). При написании программного кода можно воспользоваться файлами с примерами программ, размещенными на преподавательском диске P в папке «Гундорова\ОС_заочники».
пример программhttp://rfpro.ru/upload/8511 Методичка
Дата отправки: 13.06.2012, 22:46 Вопрос задал: Денис (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Денис! Задание 1: Числа-байты: 34 = 00100010b = 22h -29 = 11100011b = 0e3h 200 = 11001000b = 0c8h Обратите внимание, что число 200 можно рассматривать только как беззнаковое, т.к. в байте знаковое число может быть только в пределах от -128 до 127
Числа-слова: 34 = 00100010 00000000b = 2200h -29 = 11100011 11111111b = 0e3ffh 400 = 10010000 00000001b = 9001h
Байты в двоичной записи, для наглядности, отделил пробелом
Задание 3:
Код : ; Описание данных и пересылки S SEGMENT STACK DW 64 DUP(?) S ENDS Data SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ F DB 4 dup (?) ; 4 байта неициированных данных H DD 99772211h K DW 5 dup (55cch) ; 4 инициализированных слов L DB 'AEUIOAE' ; 7 гласных букв Data ENDS Code SEGMENT ASSUME SS:S,CS:Code,DS:Data Start PROC FAR ; Выполнение соглашений DOS и настройка регистра DS PUSH DS SUB AX,AX PUSH AX MOV AX,Data ; инициируем сегментный регистр MOV DS,AX ;a) MOV SI, WORD PTR H+2 ;старшее слово идет вторым MOV DI, WORD PTR H ;младшее слово идет первым ;б) MOV CX, K+4 ;третье слово по смещению 4 от начала К ;в) MOV AX, 54F8h ;г) MOV WORD PTR H, SI ;конец H - младшее слово - лежит первым! MOV K+8, SI ;конец K - последнее слово находится по смещению 8 от начала ; Возврат в DOS RET Start ENDP Code ENDS END Start Задание 4:
Код : ;Краткая справка по необходимым флагам ;OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей ; арифметической операции над числами со знаком выходит за допустимые для них пределы. ; Например, если при сложении двух положительных чисел получается число со старшим битом, ; равным единице (то есть отрицательное) и наоборот. ;CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции ; не уместился в приемнике и произошел перенос из старшего бита или если ; требуется заем (при вычитании), иначе устанавливается в 0. ; Например, после сложения слова 0FFFFh и 1, если регистр, в который надо ; поместить результат, — слово, в него будет записано 0000h и флаг CF = 1. ;ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль. ;SF — флаг знака. Этот флаг всегда равен старшему биту результата. ;Пусть G – массив из 4 слов. Вычислите сумму элементов массива и результат поместите в DX S SEGMENT STACK DW 64 DUP(?) S ENDS D SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ G DW 7fffh,0ffffh,0003h,07fffh D ENDS C SEGMENT ASSUME SS:S,CS:C,DS:D Start PROC FAR ; Выполнение соглашений DOS и настройка регистра DS PUSH DS SUB AX,AX PUSH AX MOV AX,D ; D - непосредственный операнд, в сегментный регистр MOV DS,AX ; напрямую не пересылается!!! MOV AX,G ; AX = 7fffh ADD AX,G+2 ; AX = 7fffh+0ffffh = 7ffeh с переносом ; O=0, S=0, Z=0, C=1 ADD AX,G+4 ; AX = 7ffeh+0003h = 8001h ; O=1, S=1, Z=0, C=0 ADD AX,G+6 ; AX = 8001 + 7fffh = 0 ; O=0, S=0, Z=1, C=1 MOV DX,AX ; Возврат в DOS RET Start ENDP C ENDS END Start Задание 5:
Код : Stack SEGMENT STACK DW 64 DUP(?) Stack ENDS Data SEGMENT ; сегмент данных ar dw -2,4,0,-400,500,0,-3,-40,400,10 Data ENDS Code SEGMENT ASSUME SS:Stack,CS:Code,DS:Data Start PROC FAR ; Выполнение соглашений DOS и настройка регистра DS PUSH DS SUB AX, AX PUSH AX MOV AX, Data MOV DS, AX LEA SI, ar ;адрес массива MOV DX, -1 ;пусть последний положительный = -1, если так и останется, то положительных нет MOV CX, 10 ;число элементов массива MAX_LOOP: ;цикл MOV AX, [SI] ;читаем слово INC SI ;на следующее слово INC SI TEST AX, AX ;проверим на знак JLE NEXT ;<=0 игнорируем MOV DX, AX ;сохраняем новый последний NEXT: LOOP MAX_LOOP ;циклим по CX MOV AX, DX ;результат в AX RET Start ENDP Code ENDS END Start Задания 6 и 7:
Код : ;Оформлено в виде процедур: ;1. С передачей параметров через регистры. ;2. Через стек. SStack SEGMENT STACK DW 64 DUP(?) SStack ENDS Data SEGMENT ; сегмент данных ar dw -2,4,0,-400,500,0,-3,-40,400,10 Data ENDS .186 Code SEGMENT ASSUME SS:SStack,CS:Code,DS:Data Start PROC FAR ; Выполнение соглашений DOS и настройка регистра DS PUSH DS SUB AX, AX PUSH AX MOV AX, Data MOV DS, AX ;передаем параметры через регистры LEA SI, ar MOV CX, 10 CALL MAX1 PUSH OFFSET ar PUSH 10 CALL MAX2 RET Start ENDP ;адрес массива в SI ;число элементов в CX ;результат в AX MAX1 PROC MOV DX, -1 ;пусть последний положительный = -1, если так и останется, то положительных нет MOV CX, 10 ;число элементов массива MAX_LOOP1: ;цикл MOV AX, [SI] ;читаем слово INC SI ;на следующее слово INC SI TEST AX, AX ;проверим на знак JLE NEXT1 ;<=0 игнорируем MOV DX, AX ;сохраняем новый последний NEXT1: LOOP MAX_LOOP1 ;циклим по CX MOV AX, DX ;результат в AX RET MAX1 ENDP ;параметры в стеке, передаются в следующим порядке: ;адрес массива в SI ;число элементов в CX ;результат в AX MAX2 PROC PUSH BP ;сохраним старое значение BP MOV BP, SP ;будем адресовать стековый кадр MOV SI, [BP+6];адрес массива MOV CX, [BP+4];число элементов MOV DX, -1 ;пусть последний положительный = -1, если так и останется, то положительных нет MOV CX, 10 ;число элементов массива MAX_LOOP2: ;цикл MOV AX, [SI] ;читаем слово INC SI ;на следующее слово INC SI TEST AX, AX ;проверим на знак JLE NEXT2 ;<=0 игнорируем MOV DX, AX ;сохраняем новый последний NEXT2: LOOP MAX_LOOP2 ;циклим по CX MOV AX, DX ;результат в AX POP BP ;восстановим старый BP RET 4 ;при возврате удалим из стека 4 байта (2 слова)! RET MAX2 ENDP Code ENDS END Start  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 13.06.2012, 23:22 5 нет комментария ----- Дата оценки: 15.06.2012, 21:09 | Рейтинг ответа: 0 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий