Консультация # 186380: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 1. Записать в двоичном и шестнадцатеричном виде представление в памяти ПК следующих чисел (следует учитывать, что числа размером в слово хранятся в «перевернутом» виде), приведенных нижеКонсультация # 186381: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнения мантиссы (OF). Изучить команды сложен...Консультация # 186382: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Помен...
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 1. Записать в двоичном и шестнадцатеричном виде представление в памяти ПК следующих чисел (следует учитывать, что числа размером в слово хранятся в «перевернутом» виде), приведенных ниже
Задание 3. Написать директивы
описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с пример
ом программы data_mov.asm Таблица 4:
Байты в двоичной записи, для наглядности, отделил пробелом
Задание 3:
Код :
; Описание данных и пересылки
S SEGMENT STACK
DW 64 DUP(?)
S ENDS
Data SEGMENT ; сегмент данных
; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ
F DB 4 dup (?) ; 4 байта неициированных данных
H DD 12345678h
K DW 5 dup (4477h) ; 4 инициализированных слов
L DB ' ,.;:?!' ; 7 знаков препинания
Data ENDS
Code SEGMENT
ASSUME SS:S,CS:Code,DS:Data
Start PROC FAR
; Выполнение соглашений DOS и настройка регистра DS
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,Data ; инициируем сегментный регистр
MOV DS,AX
;a)
MOV SI, WORD PTR H+2 ;старшее слово идет вторым
MOV DI, WORD PTR H ;младшее слово идет первым
;б)
MOV CH, BYTE PTR K+2 ;третий байт в массиве К по смещению 2
;в)
MOV AX, 54F8h
;г)
MOV WORD PTR H, BP ;конец H - младшее слово - лежит первым!
MOV K+8, SI ;конец K - последнее слово находится по смещению 8 от начала
; Возврат в DOS
RET
Start ENDP
Code ENDS
END Start
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 17.06.2012, 23:49
5
нет комментария ----- Дата оценки: 18.06.2012, 08:30
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 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 — флаг знака. Этот флаг всегда равен старшему биту результата.
;G – массив из 4 слов. Выполнить сложение двух средних и двух крайних.
;Найти разность полученных промежуточных сумм. Результат поместить в BX
S SEGMENT STACK
DW 64 DUP(?)
S ENDS
D SEGMENT ; сегмент данных
; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ
G DW 0ffffh,07fffh,7fffh,0ffffh
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 = 0ffffh
ADD AX,G+6 ; AX = 0ffffh+0ffffh = 0fffeh с переносом
; O=0, S=1, Z=0, C=1
MOV BX,G+2 ; BX = 7fffh
ADD BX,G+4 ; 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
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 18.06.2012, 01:24
5
нет комментария ----- Дата оценки: 18.06.2012, 08:31
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Поменять местами соседние (первый со вторым, третий с четвертым и т.д.) элементы массива 10 целых без знака типа байт. А так же. Оформить в виде процедур фрагмент
программы из задания №5: 1. С передачей параметров через регистры. 2. Через стек.
;Поменять местами соседние (первый со вторым, третий с четвертым и т.д.)
;элементы массива 10 целых без знака типа байт
SStack SEGMENT STACK
DW 64 DUP(?)
SStack ENDS
Data SEGMENT ; сегмент данных
ar db 2,4,0,40,50,0,255,40,40,10
Data ENDS
Code SEGMENT
ASSUME SS:SStack,CS:Code,DS:Data
Start PROC FAR
; Выполнение соглашений DOS и настройка регистра DS
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, Data
MOV DS, AX
LEA SI, ar ;адрес массива
MOV CX, 5 ;число пар элементов массива
CH_LOOP: ;цикл
MOV AX, [SI] ;читаем слово, по два элемента
xchg AL, AH
MOV [SI], AX
INC SI ;на следующее слово
INC SI
LOOP CH_LOOP ;циклим по CX
RET
Start ENDP
Code ENDS
END Start
6,7)
Код :
;Поменять местами соседние (первый со вторым, третий с четвертым и т.д.)
;элементы массива 10 целых без знака типа байт
SStack SEGMENT STACK
DW 64 DUP(?)
SStack ENDS
Data SEGMENT ; сегмент данных
ar db 2,4,0,40,50,0,255,40,40,10
Data ENDS
.186
Code SEGMENT
ASSUME SS:SStack,CS:Code,DS:Data
Start PROC FAR
; Выполнение соглашений DOS и настройка регистра DS
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, Data
MOV DS, AX
LEA SI, ar ;адрес массива
MOV CX, 5 ;число пар элементов массива
CALL CHANGE1
PUSH OFFSET ar
PUSH 5
CALL CHANGE2
RET
Start ENDP
CHANGE1 PROC
CH_LOOP1: ;цикл
MOV AX, [SI] ;читаем слово
xchg AL, AH
MOV [SI], AX
INC SI ;на следующее слово
INC SI
LOOP CH_LOOP1 ;циклим по CX
RET
CHANGE1 ENDP
CHANGE2 PROC
PUSH BP
MOV BP, SP
MOV CX, [BP+4];число пар элементов
MOV SI, [BP+6];адрес массива
CH_LOOP2: ;цикл
MOV AX, [SI] ;читаем слово
xchg AL, AH
MOV [SI], AX
INC SI ;на следующее слово
INC SI
LOOP CH_LOOP2 ;циклим по CX
POP BP
RET
CHANGE2 ENDP
Code ENDS
END Start
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 18.06.2012, 01:33
5
нет комментария ----- Дата оценки: 18.06.2012, 08:33
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!