Консультация # 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. Написать фрагмент программы на ас...
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания.
Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого
одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с примером программы data_mov.asm Таблица 4:
; Описание данных и пересылки
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
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания.
Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнения мантиссы (OF). Изучить команды сложения и вычитания, допустимые типы операндов, устанавливаемые флаги. Написать
фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом из табл. 5. Подобрать числовые значения таким образом, чтобы команды устанавливали различные флаги условий (OF,CF,ZF,SF); в каждом варианте – по крайней мере 3 различных флага. В комментариях к командам указать получаемые значения флагов. В заданиях «массив байт» означает массив целых типа байт, а «массив слов» – массив целых типа слово.
Таблица 5: G – массив из 4 слов. Выполнить сложение двух средних и двух крайних. Найти разность полученных промежуточных сумм. Результат поместить в BX.
;Краткая справка по необходимым флагам
;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
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания. Это задание будет состоять из подпунктов. Потому цена будет выше.
Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Найти
последний положительный элемент массива из 10 целых со знаком типа слово.
А так же. Оформить в виде процедур фрагмент программы из задания №5: 1. С передачей параметров через регистры. 2. Через стек.
;Найти последний положительный элемент массива из 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
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания.
Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого
одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с примером программы data_mov.asm Таблица 4:
; Описание данных и пересылки
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
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 4 задания.
Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнения мантиссы (OF). Изучить команды сложения и вычитания, допустимые типы операндов, устанавливаемые флаги. Написать
фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом из табл. 5. Подобрать числовые значения таким образом, чтобы команды устанавливали различные флаги условий (OF,CF,ZF,SF); в каждом варианте – по крайней мере 3 различных флага. В комментариях к командам указать получаемые значения флагов. В заданиях «массив байт» означает массив целых типа байт, а «массив слов» – массив целых типа слово.
Таблица 5: Пусть M – массив из 4 слов. Вычислите сумму элементов массива и результат поместите в DX.
;Краткая справка по необходимым флагам
;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