Как обойти отрицательный ноль - 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