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

четверг, 14 июня 2012 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Спутниковые системы навигации ГЛОНАСС. Гарантия передачи сигнала. ARKAN SuperVising.
  

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

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

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

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

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

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

Номер выпуска:1521
Дата выхода:14.06.2012, 21:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:89 / 37
Вопросов / ответов:6 / 7

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


Консультация # 186343: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания. Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для ...
Консультация # 186344: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания. Это задание будет состоять из подпунктов. Потому цена будет выше. Задание 5. Написать фрагмент программы на ас...
Консультация # 186347: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания. Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в...
Консультация # 186348: Здра вствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания. Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для ...
Консультация # 186349: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания. Это задание будет состоять из подпунктов. Потому цена будет выше. Задание 5. Написать фрагмент программы на ас...

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

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

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

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


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

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

Код :
; Описание данных и пересылки S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT         ; сегмент данных             ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ F   DB   5 dup (?)       ; 3 байта неициированных данных H       DD   0FAFBFEFFh       ; в памяти будет в обратном порядке: FF FE FB FA K   DB   4 dup ('*')    ; 4 инициализированных байт L   DW   20 DUP('1234')      ; 20 инициализированных слов 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      ; напрямую не пересылается!!! ;a)    MOV  CH, K+3 ;б)    MOV   AX, L      ;Непонятно, что значит некоторые значения в AX и DX    MOV   DX, L+2 ; Пусть будет так... ;в)    MOV  BYTE PTR H+3, DH ;пишем DH в на место самого старшего байта             ;двойного слова H, а он хранится последним!    MOV  BYTE PTR H, DL      ;пишем DL в на место самого младшего байта             ;двойного слова H, а он хранится первым! ;г)    MOV  WORD PTR H+2, DX ;Н - двойное слово, поэтому надо написать WORD PTR    MOV  WORD PTR K+2, DX ;K - адрес байт, поэтому тоже надо написать WORD PTR  ; Возврат в DOS               RET                       Start   ENDP     C   ENDS                        END   Start

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

5
нет комментария
-----
Дата оценки: 11.06.2012, 12:33

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

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

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

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

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

Таблица 5:
G – массив из 4 слов. Выполнить сложение двух средних и двух крайних. Найти разность полученных промежуточных сумм. Результат поместить в BX.

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


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

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

Код :
;Краткая справка по необходимым флагам ;OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей  ;     арифметической операции над числами со знаком выходит за допустимые для них пределы.  ;     Например, если при сложении двух положительных чисел получается число со старшим битом,  ;     равным единице (то есть отрицательное) и наоборот. ;CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции  ;     не уместился в приемнике и произошел перенос из старшего бита или если  ;     требуется заем (при вычитании), иначе устанавливается в 0.  ;     Например, после сложения слова 0FFFFh и 1, если регистр, в который надо  ;     поместить результат, — слово, в него будет записано 0000h и флаг CF = 1.  ;ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль.  ;SF — флаг знака. Этот флаг всегда равен старшему биту результата.  S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT         ; сегмент данных             ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ G   DW   7fffh,0ffffh,0ffffh,7fffh 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+2      ; AX = 0ffffh    ADD   AX,G+4      ; AX = 0ffffh+0ffffh = 0fffeh с переносом             	; O=0, S=1, Z=0, C=1    MOV   BX,G      ; BX = 7fffh    ADD   BX,G+6      ; BX = 7fffh + 7fffh = 0fffeh             	; O=1, S=1, Z=0, C=0    SUB   BX,AX      ; BX = 0fffeh - 0fffeh = 0             	; O=0, S=0, Z=1, C=0 ; Возврат в DOS               RET                       Start   ENDP     C   ENDS                        END   Start

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

5
нет комментария
-----
Дата оценки: 11.06.2012, 12:33

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

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

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

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Windows, какую версию используют PC в университете не знаю. Всего 4 задания.
Это задание будет состоять из подпунктов. Потому цена будет выше.

Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование.
Найти последний положительный элемент массива из 10 целых со знаком типа слово.

А так же. Оформить в виде процедур фрагмент программы из задания №5:
1. С передачей параметров через регистры.
2. Через стек.

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


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

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

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

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

5
нет комментария
-----
Дата оценки: 11.06.2012, 12:33

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

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

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

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

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

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


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

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

Код :
; Описание данных и пересылки S SEGMENT STACK   DW      64 DUP(?) S ENDS D   SEGMENT                 ; сегмент данных                                      ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ F   DW   3 dup (?)         ; 3 слова неициированных данных H       DD   0FAFBFEFFh ; в памяти будет в обратном порядке: FF FE FB FA K   DB    '12345'            ; 4 инициализированных байт L   DW   8 DUP('55aah')  ; 8 инициализированных слов 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      ; напрямую не пересылается!!! ;a)    MOV  CH, K+4 ;б)    MOV   AX, L    MOV   DX, L+2 ; произвольные значения ;в)    MOV  WORD PTR H+3, DX ;DL запишется в старший байт (последний) переменной H, а DH - в первый байт идущей следом K!    MOV  WORD PTR K+3, DX ;пишем DL на место 3 байта, DH - 4 байта (счет с 0) ;г)    MOV  WORD PTR H+2, DX ;в старшее слово, Н - двойное слово, идет вторым    MOV  WORD PTR H, AX      ;в младшее ; Возврат в DOS               RET                       Start   ENDP     C   ENDS                        END   Start

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

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

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

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

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

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

Дата отправки: 11.06.2012, 12:41
Вопрос задал: Flawless (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


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

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

Код :
;Краткая справка по необходимым флагам ;OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей  ;     арифметической операции над числами со знаком выходит за допустимые для них пределы.  ;     Например, если при сложении двух положительных чисел получается число со старшим битом,  ;     равным единице (то есть отрицательное) и наоборот. ;CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции  ;     не уместился в приемнике и произошел перенос из старшего бита или если  ;     требуется заем (при вычитании), иначе устанавливается в 0.  ;     Например, после сложения слова 0FFFFh и 1, если регистр, в который надо  ;     поместить результат, — слово, в него будет записано 0000h и флаг CF = 1.  ;ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль.  ;SF — флаг знака. Этот флаг всегда равен старшему биту результата.   ;Пусть M – массив из 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,M       ; AX = 7fffh    ADD   AX,M+2     ; AX = 7fffh+0ffffh = 7ffeh с переносом                ; O=0, S=0, Z=0, C=1    ADD   AX,M+4	    ; AX = 7ffeh+0003h = 8001h                ; O=1, S=1, Z=0, C=0    ADD   AX,M+6     ; AX = 8001 + 7fffh = 0                ; O=0, S=0, Z=1, C=1    MOV   DX,AX ; Возврат в DOS               RET                       Start   ENDP     C   ENDS                        END   Start

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

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


Консультирует Andriana (4-й класс):

Здравствуйте, Flawless!
описание сложения и вычитания а также описание флагов в файле
скачать файл teorique.rtf [400.9 кб]
удачи

Приложение: