Консультация # 186249: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 6 заданий. Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для...
Консультация # 186250: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 6 заданий. Это задание будет состоять из подпунктов. Потому цена будет выше. Задание 5. Написать фрагмент программы на а...
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 6 заданий.
Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнения мантиссы (OF). Изучить команды сложения и вычитания, допустимые типы операндов, устанавливаемые флаги. Написать
фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом из табл. 5. Подобрать числовые значения таким образом, чтобы команды устанавливали различные флаги условий (OF,CF,ZF,SF); в каждом варианте – по крайней мере 3 различных флага. В комментариях к командам указать получаемые значения флагов. В заданиях «массив байт» означает массив целых типа байт, а «массив слов» – массив целых типа слово.
Таблица 5: А – массив из 4 байт. Выполнить сложение двух первых и двух последних. Найти разность полученных промежуточных сумм. Результат поместить в BL.
Здравствуйте, Flawless! Меняются все 4 флага. Изучайте, будут вопросы - спрашивайте
Код :
;Краткая справка по необходимым флагам
;OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей
; арифметической операции над числами со знаком выходит за допустимые для них пределы.
; Например, если при сложении двух положительных чисел получается число со старшим битом,
; равным единице (то есть отрицательное) и наоборот.
;CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции
; не уместился в приемнике и произошел перенос из старшего бита или если
; требуется заем (при вычитании), иначе устанавливается в 0.
; Например, после сложения слова 0FFFFh и 1, если регистр, в который надо
; поместить результат, — слово, в него будет записано 0000h и флаг CF = 1.
;ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль.
;SF — флаг знака. Этот флаг всегда равен старшему биту результата.
S SEGMENT STACK
DW 64 DUP(?)
S ENDS
D SEGMENT ; сегмент данных
; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ
A DB 07fh,7fh,0ffh,0ffh
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 AL,A+2 ; AL = 0ffh
ADD AL,A+3 ; AL = 0ffh+0ffh = 0feh с переносом
; O=0, S=1, Z=0, C=1
MOV BL,A ; BL = 7fh
ADD BL,A+1 ; BL = 7fh + 7fh = 0feh
; O=1, S=1, Z=0, C=0
SUB BL,AL ; BL = 0feh - 0feh = 0
; O=, S=0, Z=1, C=0
; Возврат в DOS
RET
Start ENDP
C ENDS
END Start
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 30.05.2012, 14:14
5
нет комментария ----- Дата оценки: 30.05.2012, 14:47
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 6 заданий. Это задание будет состоять из подпунктов. Потому цена будет выше.
Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Проверить,
упорядочен ли по возрастанию массив из 10 целых без знака типа слово.
А так же. Оформить в виде процедур фрагмент программы из задания №5: 1. С передачей параметров через регистры. 2. Через стек.
Здравствуйте, Flawless! Смотрите, изучайте. Будет непонятно, спрашивайте...
Код :
S SEGMENT STACK
DW 64 DUP(?)
S ENDS
D SEGMENT ; сегмент данных
; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ
A DW 1234,2345,3456,4567,5678,6789,8901,9012,10234,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 IsOrder1 ;проверяем, результат в флаге С
;передаем параметры через стек
PUSH COUNT ;передаем количество
PUSH OFFSET A ;смещение массива
CALL IsOrder2 ;проверяем, результат в флаге С
RET
Start ENDP
;адрес массива в SI
;его длина
;результат в флаге С=1 - неупорядочен, С=0 - упорядочен по возрастанию
IsOrder1 PROC
XOR DX, DX ;предыдущее значение
LOOP1:
MOV AX, [SI] ;очередное слово массива
ADD SI, 2 ;адрес следующего слова
CMP AX, DX ;сравниваем с предыдущим
JB NO_ORDER2 ;если меньше, то неупорядочен!
MOV DX, AX ;сохраняем, как новый предыдущий
LOOP LOOP1 ;циклим по CX, пока не 0
CLC ;возвращаем признак упорядоченности
RET
NO_ORDER1:
STC ;неупорядочен!
RET
IsOrder1 ENDP
;параметры в стеке
;сначала передается дина массива
;затем адрес массива
;результат в флаге С=1 - неупорядочен, С=0 - упорядочен по возрастанию
IsOrder2 PROC
PUSH BP ;сохраним старое значение BP
MOV BP, SP ;будем адресовать стековый кадр
MOV SI, [BP+4] ;получим в стеке адрес массива
MOV CX, [BP+6] ;количество
XOR DX, DX ;дальше аналогично
LOOP2:
MOV AX, [SI]
CMP AX, DX
JB NO_ORDER2
MOV DX, AX
LOOP LOOP2
CLC
JMP IsOrder2_ret
NO_ORDER2:
STC
IsOrder2_ret:
POP BP ;восстановим старый BP
RET 4 ;при возврате удалим из стека 4 байта (2 слова)!
IsOrder2 ENDP
C ENDS
END Start
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 30.05.2012, 14:42
5
нет комментария ----- Дата оценки: 30.05.2012, 18:22
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!