Как обойти отрицательный ноль - Assembler

Узнай цену своей работы

Формулировка задачи:

подскажите, как обойти отрицательный ноль?

Решение задачи: «Как обойти отрицательный ноль»

textual
Листинг программы
;                     Листинг  "TextToScreen.asm"
;             Программа вычисления значения С.
 
IDEAL
P386
LOCALS
MODEL MEDIUM
 
; Подключить файлы.
include "list1_03.inc"
include "list1_04.inc"
 
SEGMENT sseg para stack 'STACK'
DB 400h DUP(?)
ENDS
 
DATASEG
; Выводимые на экран надписи.
Txt1     DB LIGHTMAGENTA,2,26, "ДЕПАРТАМЕНТ ПО АВИАЦИИ",0
; где 2-номер строки, 26-номер колонки.
Txt3     DB YELLOW,3,20, "МИНИСТЕРСТВА ТРАНСПОРТА И КОММУНИКАЦИЙ РБ",0
Txt4     DB YELLOW,4,20, "БЕЛОРУССКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ АВИАЦИИ",0
Txt5     DB YELLOW,6,26, "Курсовая работа по дисциплине:",0
Txt6     DB YELLOW,7,20, "Микропроцессорные системы, машины и сети",0
Txt7     DB YELLOW,9,17, "Тема: программирование микропроцессора  ix86",0
Txt8     DB YELLOW,10,5, "Задание: разработать программу вычисления значения арифметического",0 
Txt9     DB YELLOW,11,20, "выражения на языке ассемблера ",0
Txt10    DB YELLOW,13,30, "Вариант 16",0
Txt11    DB YELLOW,14,25, "C=(A+B)^2-A, при A+B<0",0
Txt12    DB YELLOW,15,25, "C=-5*A^2, при |B|=A",0
Txt13    DB YELLOW,16,25, "C=B+A*2, при B+A^2>0",0
Txt2     DB YELLOW,22,20, "Результат C:",0
Txt14    DB LIGHTGREY,18,20, "Введите значение А",0
Txt15    DB LIGHTGREY,19,20, "A=",0
Txt16    DB LIGHTGREY,20,20, "Введите значение В",0
Txt17    DB LIGHTGREY,21,20,"B=",0
Txt18    DB LIGHTGREY,23,20, "C=",0
; Начальная позиция для вывода текстовой строки на экран.
ScreenString DW ?
ScreenColumn DW ?
aint DD (?) ; ЇҐаҐ¬Ґ** п A.
bint DD (?) ; ЇҐаҐ¬Ґ** п B.
CINT DD (?) ; १г«мв в C.
ENDS
 
 
CODESEG
;*****************************
;* Основной модуль программы *
;*****************************
        mov     AX,DGROUP        ; * бва®Ёвм ॣЁбва DS * 
        mov     DS,AX            ; * з «® ᥣ¬Ґ*в  ¤ **ле.
        mov     [CS:MainDataSeg],AX
; Установить текстовый режим (80x25) видеоадаптера и очистить экран.
        mov     AX,3
        int     10h
`
; Вывести текстовые сообщения на экран.
        mov     SI,offset Txt1
        call    ShowColorString
        mov     SI,offset Txt2
        call    ShowColorString
    mov SI, offset Txt3
    call    ShowColorString
    mov SI,offset Txt4
    call    ShowColorString
    mov SI, offset Txt5
    call    ShowColorString
    mov SI, offset Txt6
    call    ShowColorString
    mov SI, offset Txt7
    call    ShowColorString
    mov SI, offset Txt8
    call    ShowColorString
    mov SI, offset Txt9
    call    ShowColorString
    mov SI, offset Txt10
    call    ShowColorString
    mov SI, offset Txt11
    call    ShowColorString
    mov SI, offset Txt12
    call    ShowColorString
    mov SI, offset Txt13
    call    ShowColorString
    mov SI, offset Txt14
    call    ShowColorString
    mov SI, offset Txt15
    call    ShowColorString
    mov SI, offset Txt16
    call    ShowColorString
    mov SI, offset Txt17
    call    ShowColorString
    mov SI, offset Txt18
    call    ShowColorString
        call    SetCursorPosition
        call    GetChar
; Задать цвет символов переменных.
        mov     [TextColorAndBackground],LIGHTGREY
; Ввести значения целочисленных переменных.
        ; Ввести значение А.
        mov     [ScreenString],19
        mov     [ScreenColumn],22
        call    GetInteger       
    mov     EAX, [Data_Int32]
        mov     [AINT],EAX       
        ; Ввести значение B.
        mov     [ScreenString],21
        mov     [ScreenColumn],22
        call    GetInteger       
    mov     EAX, [Data_Int32]
        mov     [BINT],EAX       
;Проверка условий
    mov eax,[AINT]
    add     eax,[BINT]
    CMP     eax,0
    JL  Istrue1
 
    mov     eax,[bint]
    cdq
    xor     eax,edx
    sub     eax,edx
    CMP     eax,[aint]
    JE  Istrue2
 
    mov     eax,[aINT]
    mov     ebx, [aint]
    imul    eax,ebx
    add     eax, [bint]
    CMP     eax,0
    JG  Istrue3
; Вычисление значения выражения C.
 
Istrue1:
    xor     eax,eax          ; обнулить регистр  EAX.
        mov     eax,[aint]
        add     eax, [bint]
        imul    eax
        sub     eax, [aint]
        mov     [Data_Int32],eax ;
        JMP     Quit
Istrue2:
        xor     eax,eax          ; обнулить регистр EAX.
    mov eax,-5
    imul    eax, [aint]
    imul    eax, [aint]
        mov     [Data_Int32],eax
        JMP     QUIT
Istrue3:
        xor     eax,eax; обнулить регистр eax.
        mov     eax,2
        imul    eax, [aint]
        add     eax, [bint]
        mov     [Data_Int32],eax
 
QUIT:
        mov     [ScreenString],23;
        mov     [ScreenColumn],22;
        call    ShowDecDWord
        call    ShowDataString
Exit:
; Вывести сообщение.
        MShowColorString Txt5
        mov     [ScreenString],25;
        mov     [ScreenColumn],0 ;
        call    SetCursorPosition
        call    GetChar
; Переустановить текстовый режим и очистить экран.
        mov     AX,3
        int     10h
; Вывод в DOS
        mov     AH,4Ch
        int     21h
ENDS
; Подключить процедуры вывода данных на экран
include "list1_02.inc"
; Подключить процедуры перевода чисел
include "list1_01.inc"
END

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы