Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примеры отчетов / ASM. Лаб. 1.docx
Скачиваний:
86
Добавлен:
01.10.2019
Размер:
60.35 Кб
Скачать

; Файл asm _

; (2 * d - 96 / a) / (34 / b - a + 1)

.MODEL Large,C

.data

Extrn Si_A:WORD, Si_B:WORD, Si_D:WORD, SiNumerator:DWORD, SiDenominator:WORD, SiResult:DWORD

Extrn Ui_A:WORD, Ui_B:WORD, Ui_D:WORD, UiNumerator:DWORD, UiDenominator:WORD, UiResult:DWORD

Extrn Sc_A:BYTE, Sc_B:BYTE, Sc_D:BYTE, ScNumerator:WORD, ScDenominator:BYTE, ScResult:WORD

Extrn Uc_A:BYTE, Uc_B:BYTE, Uc_D:BYTE, UcNumerator:WORD, UcDenominator:BYTE, UcResult:WORD

.code

Public LabSi

LabSi proc far

; ------- Числитель -------

mov ax, Si_D ; <AX> = D

mov bx, 2 ; <BX> = 2

imul bx ; <DX:AX> = D * 2

mov cx, dx ; SAVE TO CX

mov bx, ax ; SAVE TO BX

mov ax, 96 ; <AX> = 96

cwd ; <DX:AX> = 96

idiv WORD PTR Si_A ; <AX> = 96 / A

cwd ; <DX:AX> — Result

sub bx, ax

sbb cx, 0

sub cx, dx ; <CX:BX> = D * 2 - 96 / A

mov WORD PTR SiNumerator, bx

mov WORD PTR SiNumerator + 2, cx

; ------- Знаменатель -------

mov ax, 34 ; <AX> = 34

cwd ; <DX:AX> = 34

idiv WORD PTR Si_B ; <AX> = 34 / B

sub ax, Si_A ; <AX> = 34 / B - A

inc ax ; <AX> = 34 / B - A + 1

mov SiDenominator, ax

; ------- Числитель/Знаменатель -------

mov ax, WORD PTR SiNumerator

mov dx, WORD PTR SiNumerator + 2

mov bx, SiDenominator

idiv bx ; <AX> = Numerator / Denominator

cwd ; <DX:AX> = Numerator / Denominator

mov WORD PTR SiResult, ax

mov WORD PTR SiResult + 2, dx

ret

LabSi endp

Public LabUi

LabUi proc far

; ------- Числитель -------

mov ax, Ui_D ; <AX> = D

mov bx, 2 ; <BX> = 2

mul bx ; <DX:AX> = D * 2

mov cx, dx ; SAVE TO CX

mov bx, ax ; SAVE TO BX

mov ax, 96 ; <AX> = 96

xor dx, dx ; <DX:AX> = 96

div WORD PTR Ui_A ; <AX> = 96 / A

xor dx, dx ; <DX:AX> = 96 / A

sub bx, ax

sbb cx, 0

sub cx, dx ; <CX:BX> = D * 2 - 96 / A

mov WORD PTR UiNumerator, bx

mov WORD PTR UiNumerator + 2, cx

; ------- Знаменатель -------

mov ax, 34 ; <AX> = 34

xor dx, dx ; <DX:AX> = 34

div WORD PTR Ui_B ; <AX> = 34 / B

sub ax, Ui_A ; <AX> = 34 / B - A

inc ax ; <AX> = 34 / B - A + 1

mov UiDenominator, ax

; ------- Числитель/Знаменатель -------

mov ax, WORD PTR UiNumerator

mov dx, WORD PTR UiNumerator + 2

mov bx, UiDenominator

idiv bx ; <AX> = Numerator / Denominator1

xor dx, dx ; <DX:AX> = Numerator / Denominator

mov WORD PTR UiResult, ax

mov WORD PTR UiResult + 2, dx

ret

LabUi endp

Public LabSc

LabSc proc far

; ------- Числитель -------

mov al, Sc_D ; <AL> = D

mov bl, 2 ; <BL> = 2

imul bl ; <AX> = D * 2

mov bx, ax ; SAVE TO BX

mov ax, 96 ; <AX> = 96

idiv Sc_A ; <AL> = 96 / A

cbw ; <AX> = 96 / A

sub bx, ax ; <BX> = D * 2 - 96 / A

mov ScNumerator, bx

; ------- Знаменатель -------

mov ax, 34 ; <AX> = 34

idiv Sc_B ; <AL> = 34 / B

sub al, Sc_A ; <AL> = 34 / B - A

sbb ah, 0 ; <AX> = 34 / B - A

inc ax ; <AX> = 34 / B - A + 1

mov ScDenominator, al

; ------- Числитель/Знаменатель -------

mov al, ScDenominator ; <AL> = Denominator

cbw ; <AX> = Denominator

mov bx, ax ; <BX> = Denominator

mov ax, ScNumerator ; <AX> = Numerator

cwd ; <DX:AX> = Numerator

idiv bx ; <AX> = Numerator / Denominator

mov ScResult, ax

ret

LabSc endp

Public LabUc

LabUc proc far

; ------- Числитель -------

mov al, Uc_D ; <AL> = D

mov bl, 2 ; <BL> = 2

mul bl ; <AX> = D * 2

mov bx, ax ; SAVE TO BX

mov ax, 96 ; <AX> = 96

xor dx, dx ; <DX:AX> = 96

mov cl, Uc_A ; <CL> = A

xor ch, ch ; <CX> = A

div cx ; <AX> = 96 / A

sub bx, ax ; <BX> = D * 2 - 96 / A

mov UcNumerator, bx

; ------- Знаменатель -------

mov ax, 34 ; <AX> = 34

div Uc_B ; <AL> = 34 / B

sub al, Uc_A ; <AL> = 34 / B - A

sbb ah, 0 ; <AX> = 34 / B - A

inc ax ; <AX> = 34 / B - A + 1

mov UcDenominator, al

; ------- Числитель/Знаменатель -------

mov bl, UcDenominator

xor bh, bh

mov ax, UcNumerator

xor dx, dx

idiv bx ; <AX> = Numerator / Denominator2

mov UcResult, ax

ret

LabUc endp

end

Соседние файлы в папке Примеры отчетов