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

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

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
ARKAN. Спутниковые противоугонные системы новейшего поколения! Охранная сигнализация экстра класса!
  

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

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

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

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

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

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

Номер выпуска:1525
Дата выхода:22.06.2012, 15:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:91 / 35
Вопросов / ответов:4 / 4

Консультация # 186387: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что иниц...


Консультация # 186388: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Н...
Консультация # 186389: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 1. Записать в двоичном и шестнадцатеричном виде представление в памяти ПК следующих чисел (следует учитывать, что числа размером в слово хранятся в «перевернутом» виде), приведенных ниже Чи...
Консультация # 186390: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. П...

Консультация # 186387:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с примером программы data_mov.asm
Таблица 4:


Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнен ия мантиссы (OF). Изучить команды сложения и вычитания, допустимые типы операндов, устанавливаемые флаги.
Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом из табл. 5. Подобрать числовые значения таким образом, чтобы команды устанавливали различные флаги условий (OF,CF,ZF,SF); в каждом варианте – по крайней мере 3 различных флага. В комментариях к командам указать получаемые значения флагов.
В заданиях «массив байт» означает массив целых типа байт, а «массив слов» – массив целых типа слово.

Таблица 5:
G – массив из 4 слов. Вычислите сумму элементов массива и результат поместите в DX

Дата отправки: 19.06.2012, 00:46
Вопрос задал: Flawless (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Flawless!
3)

Код :
; Описание данных и пересылки S SEGMENT STACK   DW      64 DUP(?) S ENDS DAT SEGMENT                ; сегмент данных                            ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A   DW   3 dup (?)         ; 3 слова неициированных данных B   DD   67452389h         ; в памяти будет в обратном порядке: FF FE FB FA C   DB   3 DUP('asm')      ; 9 байт = 3 раза 'asm' D   DW   1,2,3,4           ; 4 слова DAT ENDS C       SEGMENT          ASSUME  SS:S,CS:C,DS:DAT Start   PROC    FAR  ; Выполнение соглашений DOS и настройка регистра DS           PUSH   DS                  SUB   AX,AX               PUSH   AX                  MOV   AX,D      ; D - непосредственный операнд, в сегментный регистр     MOV   DS,AX      ; напрямую не пересылается!!! ;a)    MOV  DH, B+3    ;старший байт двойного слова лежит последним ;б)    MOV  CL, C+2    ;третий байт лежит по смещению +2 ;в)    MOV  AX, 0FA98h ;напрямую писать нельзя    MOV  ES, AX ;г)    MOV  WORD PTR С, DX ;слово в начало последовательности байт    MOV  В, AX          ;в первое слово ; Возврат в DOS               RET                       Start   ENDP     C   ENDS                        END   Start

4)
Код :
;Пусть G – массив из 4 слов. Вычислите сумму элементов массива и результат поместите в DX S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT         ; сегмент данных             ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ M   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

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.06.2012, 01:08

5
нет комментария
-----
Дата оценки: 19.06.2012, 01:46

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 186388:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование.
Найти (поместить в регистр BX) меньший из элементов массива из 10 беззнаковых целых типа слово.
А так же. Оформить в виде процедур фрагмент программы из задания №5:
1. С передачей параметров через регистры.
2. Через стек.

Дата отправки: 19.06.2012, 00:51
Вопрос задал: Flawless (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Flawless!
5)

Код :
;Найти (поместить в регистр BX) меньший из элементов массива  ;из 10 беззнаковых целых типа слово S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT           ; сегмент данных                       ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A   DW   1234,2345,3456,4567,5678,6789,8901,9012,10,15234 COUNT   EQU   ($-A)/2 ; (текущий адрес($) - A) - длина массива в байтах                       ; поделив на 2 получим число слов в массиве D    ENDS         .186 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      ; напрямую не пересылается!!!  ;передаем параметры через регистры    LEA   SI, A      ;адрес массива в SI    MOV   CX, COUNT  ;его длина     MOV   BX, 0FFFFH ;минимальное число, пока равно самому большому числу MIN_LOOP:    MOV   AX, [SI]   ;очередное слово массива    ADD   SI, 2      ;адрес следующего слова    CMP   AX, BX    JAE   NEXT       ;если выше (больше) или равно, то обходим    MOV   BX, AX     ;сохраняем, как минимального NEXT:    LOOP  MIN_LOOP   ;циклим по CX, пока не 0    RET              ;результат в BX Start   ENDP        RET  C   ENDS                        END   Start

6,7)
Код :
;Найти (поместить в регистр BX) меньший из элементов массива  ;из 10 беззнаковых целых типа слово S  SEGMENT STACK    DW      64 DUP(?) S  ENDS D  SEGMENT           ; сегмент данных                       ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A  DW   1234,2345,3456,4567,5678,6789,8901,9012,10,15234 COUNT   EQU   ($-A)/2 ; (текущий адрес($) - A) - длина массива в байтах                       ; поделив на 2 получим число слов в массиве D  ENDS    .186 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      ; напрямую не пересылается!!!  ;передаем параметры через регистры    LEA   SI, A      ;адрес массива в SI    MOV   CX, COUNT  ;его длина    CALL  MIN1       ;поиск минимального  ;передаем параметры через стек    PUSH  COUNT      ;передаем количество    PUSH  OFFSET A   ;смещение массива    CALL  MIN2       ;     RET Start   ENDP      ;адрес массива в SI ;его длина в CX MIN1     PROC    MOV   BX, 0FFFFH ;минимальное число, пока равно самому большому числу MIN_LOOP1:    MOV   AX, [SI]   ;очередное слово массива    ADD   SI, 2      ;адрес следующего слова    CMP   AX, BX    JAE   NEXT1      ;если выше (больше) или равно, то обходим    MOV   BX, AX     ;сохраняем, как минимального NEXT1:    LOOP  MIN_LOOP1  ;циклим по CX, пока не 0    RET              ;результат в BX MIN1     ENDP  ;параметры в стеке ;сначала передается дина массива ;затем адрес массива ;результат в регистре BX MIN2     PROC    PUSH  BP         ;сохраним старое значение BP    MOV   BP, SP     ;будем адресовать стековый кадр    MOV   SI, [BP+4] ;получим в стеке адрес массива     MOV   CX, [BP+6] ;количество    MOV   BX, 0FFFFH ;минимальное число, пока равно самому большому числу MIN_LOOP2:    MOV   AX, [SI]   ;очередное слово массива    ADD   SI, 2      ;адрес следующего слова    CMP   AX, BX    JAE   NEXT2      ;если выше (больше) или равно, то обходим    MOV   BX, AX     ;сохраняем, как минимального NEXT2:    LOOP  MIN_LOOP2  ;циклим по CX, пока не 0    POP   BP         ;восстановим старый BP    RET   4          ;при возврате удалим из стека 4 байта (2 слова)! MIN2     ENDP  C  ENDS                        END   Start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.06.2012, 01:30

5
нет комментария
-----
Дата оценки: 19.06.2012, 01:43

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 186389:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Задание 1. Записать в двоичном и шестнадцатеричном виде представление в памяти ПК следующих чисел (следует учитывать, что числа размером в слово хранятся в «перевернутом» виде), приведенных ниже

Числа для представления в памяти ПК:

Числа-байты: 17, -7, 221
Числа-слова 17, -7, 321

Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с примером программы data_mov.asm
Та блица 4:

Дата отправки: 19.06.2012, 01:07
Вопрос задал: Flawless (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Flawless!
1)
Числа-байты: 17, -7, 221
Числа-слова 17, -7, 321

Числа-слова:
17 = 00010001b = 11h
-7 = 11111001b = 0f9h
221 = 11011101b = 0ddh
Обратите внимание, что число 221 можно рассматривать только, как беззнаковое число

Числа-слова:
17 = 00010001 00000000b = 1100h
-7 = 11111001 11111111b = 0f9ffh
321 = 01000001 00000001b = 4101h
Байты в двоичной записи, для наглядности, отделил пробелом

3)

Код :
; Описание данных и пересылки S SEGMENT STACK   DW      64 DUP(?) S ENDS DAT SEGMENT                ; сегмент данных                            ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ F   DB   5 dup (?)         ; 5 неициированных байт H   DD   0ABCDEF01h        ; в памяти будет в обратном порядке: 01 EF CD AB K   DW   4 DUP(1234)       ; 4 слова L   DB   'QWRTP'           ; 5 согласных DAT ENDS C       SEGMENT          ASSUME  SS:S,CS:C,DS:DAT Start   PROC    FAR  ; Выполнение соглашений DOS и настройка регистра DS           PUSH   DS                  SUB   AX,AX               PUSH   AX                  MOV   AX,D      ; D - непосредственный операнд, в сегментный регистр     MOV   DS,AX     ; напрямую не пересылается!!! ;a)    MOV  DI, H+2    ;старшее слово лежит последним    MOV  SI, H      ;младшее - первым ;б)    MOV  AX, K+2    ;второе слово лежит по смещению +2 ;в)    MOV  AX, 234 ;г)    MOV  BYTE PTR H+3, CH ;байт CH на место старшего байта двойного слова    MOV  BYTE PTR K+7, CH ;а место старшего байта последнего слова ; Возврат в DOS               RET                       Start   ENDP     C   ENDS                        END   Start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.06.2012, 01:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 186390:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование.
Проверить, упорядочен ли по возрастанию массив из 12 целых со знаком типа байт.
А так же. Оформить в виде процедур фрагмент программы из задания №5:
1. С передачей параметров через регистры.
2. Через стек.

Дата отправки: 19.06.2012, 01:14
Вопрос задал: Flawless (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Flawless!
5)

Код :
;Проверить, упорядочен ли по возрастанию массив  ;из 12 целых со знаком типа байт S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT           ; сегмент данных                       ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A   DB   -12,-10,-8,-7,-2,0,8,9,81,100,110,127 COUNT   EQU   $-A ; (текущий адрес($) - A) - длина массива в байтах D    ENDS          .186 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      ; напрямую не пересылается!!!  ;передаем параметры через регистры    LEA   SI, A      ;адрес массива в SI    MOV   CX, COUNT  ;его длина     MOV   AH, -128   ;предыдущий элемент, пока - самое маленькое число CMP_INC_LOOP:    MOV   AL, [SI]   ;очередное слово массива    INC   SI         ;адрес следующего слова    CMP   AL, AH     ;сравним с предыдущим    JLE   NO_INC     ;если меньше или равно, то массив не упорядочен по возрастанию    MOV   AH, AL     ;сохраняем предыдущего    LOOP  CMP_INC_LOOP   ;циклим по CX, пока не 0    MOV   AL, 1      ;упорядочен    RET              ;результат в AL (=1 - упорядочен, =0 - неупорядочен) NO_INC:    MOV   AL, 0      ;неупорядочен    RET Start   ENDP      C   ENDS                        END   Start

6,7)
Код :
;Проверить, упорядочен ли по возрастанию массив  ;из 12 целых со знаком типа байт S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT           ; сегмент данных                       ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A   DB   -12,-10,-8,-7,-2,0,8,9,81,100,110,127 COUNT   EQU   $-A ; (текущий адрес($) - A) - длина массива в байтах D    ENDS          .186 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      ; напрямую не пересылается!!!  ;передаем параметры через регистры    LEA   SI, A      ;адрес массива в SI    MOV   CX, COUNT  ;его длина    CALL  CMP_INC1   ;проверка на возрастание  ;передаем параметры через стек    PUSH  COUNT      ;передаем количество    PUSH  OFFSET A   ;смещение массива    CALL  CMP_INC2   ;проверка на возрастание     RET Start   ENDP      ;адрес массива в SI ;его длина в CX ;результат в AL (=1 - упорядочен, =0 - неупорядочен) CMP_INC1 PROC    MOV   AH, -128   ;предыдущий элемент, пока - самое маленькое число CMP_INC_LOOP1:    MOV   AL, [SI]   ;очередное слово массива    INC   SI         ;адрес следующего слова    CMP   AL, AH     ;сравним с предыдущим    JLE   NO_INC1    ;если меньше или равно, то массив не упорядочен по возрастанию    MOV   AH, AL     ;сохраняем предыдущего    LOOP  CMP_INC_LOOP1   ;циклим по CX, пока не 0    MOV   AL, 1      ;упорядочен    RET              ;результат в AL (=1 - упорядочен, =0 - неупорядочен) NO_INC1:    MOV   AL, 0      ;неупорядочен    RET CMP_INC1 ENDP  ;параметры в стеке ;сначала передается дина массива ;затем адрес массива ;результат в регистре AL CMP_INC2 PROC    PUSH  BP         ;сохраним старое значение BP    MOV   BP, SP     ;будем адресовать стековый кадр    MOV   SI, [BP+4] ;получим в стеке адрес массива     MOV   CX, [BP+6] ;количество     MOV   AH, -128   ;предыдущий элемент, пока - самое маленькое число CMP_INC_LOOP2:    MOV   AL, [SI]   ;очередное слово массива    INC   SI         ;адрес следующего слова    CMP   AL, AH     ;сравним с предыдущим    JLE   NO_INC2    ;если меньше или равно, то массив не упорядочен по возрастанию    MOV   AH, AL     ;сохраняем предыдущего    LOOP  CMP_INC_LOOP2   ;циклим по CX, пока не 0    MOV   AL, 1      ;упорядочен    JMP   CMP_INC_RET;на общий выход (чтобы поправить стек) NO_INC2:    MOV   AL, 0      ;неупорядочен CMP_INC_RET:        ;результат в AL (=1 - упорядочен, =0 - неупорядочен)     POP   BP         ;восстановим старый BP    RET   4          ;при возврате удалим из стека 4 байта (2 слова)! CMP_INC2 ENDP  C  ENDS                        END   Start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.06.2012, 02:35
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

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


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

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

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

22 июня 2012 отмечают:
День памяти и скорби — день начала Великой Отечественной войны (1941 год)
День Скипера Змея (Змеиный день)
Вайю
Кириллов день
Начало сезона Южный ветер

Именины: Александр, Алексей, Иван, Кирилл, Марианна, Мария, Марфа, Фекла
 
 

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

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

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