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

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

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

Обсуждение

давно
Посетитель
7438
7205
11.06.2012, 13:51
общий
это ответ
Здравствуйте, Flawless!
[code h=200];Краткая справка по необходимым флагам
;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[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
12.06.2012, 02:36
общий
это ответ
Здравствуйте, Flawless!
описание сложения и вычитания а также описание флагов в файле
скачать файл teorique.rtf [400.9 кб]
удачи


Приложение:
; examle
M DW 0ffffh, 1fffh, 0009h, 0dff9h
.
.
mov ax,M; OF=0, SF=0, ZF=0, CF=0, ax=0ffffh
add ax, M+1; OF=0, SF=0, ZF=0, CF=1, ax=1ffeh
add ax, M+2; OF=1, SF=1, ZF=0, CF=0, ax=2007
add ax, M+3; OF=0, SF=0, ZF=1, CF=0, ax=0
mov DX, ax;
.
.
Форма ответа