WMmail.ru - сервис почтовых рассылок

пятница, 15 июня 2012 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10905
• повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4344
• повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2279
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска: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 благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    14 июня 2012, 21:02
RFpro.ru: Ассемблер? Это просто! Учимся программировать    13 июня 2012, 20:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    10 июня 2012, 14:03

Все выпуски рассылки

16 июня 2012 отмечают:
Международный день африканского ребенка (День защиты детей Африки)
Перенесение мощей благоверного царевича Димитрия из&nbsp;Углича в&nbsp;Москву (1606)
День Блума в&nbsp;Ирландии
Международный фестиваль Крапивы

Именины: Афанасий, Дмитрий, Лукьян, Павел, Юлиан
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Будущий Президент России
Группа тех,кто готов поддержать на Президентских выборах Макарова Сергея.
Темы: 41   Участники: 437
  Передовые технологии в медицине
Передовые технологии в медицине!Все больше и больше людей интересуются - есть ли новые медицинские технологии, которые позволяют бороться с хроническими...
Темы: 631   Участники: 1374
  Литература от А до Я
Группа для всех интересующихся литературой. Всеми её вопросами и нюансами: от теории до практики. Для графоманов и профессионалов. Правила добавления книг для скачивания
Темы: 665   Участники: 1718
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий