Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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 кб]
удачи

Приложение: