|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.01.2010, 12:50 | #11 |
Пользователь
Регистрация: 22.01.2010
Сообщений: 11
|
Надо короче мне свой код опубликовать и что бы специ посматрели что не так. Так наверное проще будет. Код примитивный, несложный, но длинный и незаконченный. Не судите слишком строго я пока начинающий.
data segment para public 'data' a db 10 dup (0) b db 10 dup (0) result db 21 dup (0) mas db 48 dup (0),0,1,2,3,4,5,6,7,8,9 data ends stk segment stack db 256 dup ('?') stk ends code segment para public 'code' assume cs:code, ds : data, ss:stk main proc ; инициализация данных beginning: mov ax, data mov ds, ax lea bx, mas mov ah, 08h Обратите внимание на эту строку и на слудующую. правельна ли конструкция вызова ф-ции дос? ; проверяем на знак int 21h cmp al, '-' jne m1 inc si mov a[si], al ; сохраняем знак числа jmp negativ_1 ;первое число положительное positiv_1: int 21h m1: ; проверяем на арифметическое действие cmp al, '+' je M2 cmp al, '-' je M2 cmp al, '*' je M2 cmp al, '/' je M2 ; провеярем чтобы число было из диапозона от 0 до 9 cmp al, 30h jb positiv_1 cmp al, 39h ja positiv_1 xlat mov a[si], al inc di ; запоминаем колличество разрядов числа inc si jmp positiv_1 ;первое число отрицательное negativ_1: int 21h ; проверяем на арифметическое действие cmp al, '+' je M1 cmp al, '-' je M1 cmp al, '*' je M1 cmp al, '/' je M1 ; провеярем чтобы число было из диапозона от 0 до 9 cmp al, 30h jb negativ_1 cmp al, 39h ja negativ_1 xlat mov a[si], al inc di ; запоминаем колличество разрядов числа inc si jmp negativ_1 ;ВЫПОЛНЯЕМ ДЕЙСТВИЯ ПО ВВОДУ ВТОРОГО ЧИСЛА M2: ; проверяем на знак int 21h cmp al, '-' jne m3 mov b[si], al ; сохраняем знак числа jmp negativ_2 ; второе число положительное positiv_2: int 21h m3: ; проверяем на арифметическое действие cmp al, '+' je addition cmp al, '-' je substraction cmp al, '*' je multiplication cmp al, '/' je division ; провеярем чтобы число было из диапозона от 0 до 9 cmp al, 30h jb positiv_2 cmp al, 39h ja positiv_2 xlat mov b[si], al inc di ; запоминаем колличество разрядов числа inc si jmp positiv_2 ; второе число отрицательное negativ_2: int 21h ; проверяем на арифметическое действие cmp al, '+' je addition cmp al, '-' je substraction cmp al, '*' je multiplication cmp al, '/' je division ; провеярем чтобы число было из диапозона от 0 до 9 cmp al, 30h jb negativ_2 cmp al, 39h ja negativ_2 xlat mov b[si], al inc di ; запоминаем колличество разрядов числа inc si jmp negativ_2 ; Сложение ; 1) a+b = |a|+|b| ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> ; |a|>|b| = -(|a|-|b|) ; 2) -a+b если ; |a|<|b| = |b|-|a| ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> ; |a|>|b| ; 3) -a+(-b) если = -(|a|+|b|) ; |a|<|b| ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> ; |a|>|b| = |a|-|b| ; 4) a+(-b) если ; |a|>|b| = -(|b|-|a|) ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> addition: xor si, si cmp a, '-' je substraction cmp b, '-' substraction: multiplication: division: main endp code ends end main Попробуйте транслировать, запустите exe и попробуйте что нибудь ввести Последний раз редактировалось Billy Spleen; 25.01.2010 в 13:00. |
25.01.2010, 13:23 | #12 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,162
|
Billy Spleen
ты замутил целый калькулятор с обработкой сложения, вычитания, умножения и деления плюс работа с положительными и отрицательными числами, так программы не пишут, разберись для начала как сложить два положительных числа --> пойдет, добавишь вычитание и т.д. А так у тебя даже из строки символов число не выделяется, да и для вывода результата на экран придется число в строку превращать... Писать за тебя программу бесплатно -- охоты нет! |
25.01.2010, 14:20 | #13 |
Пользователь
Регистрация: 22.01.2010
Сообщений: 11
|
Я не кого не прошу писать за меня программу. Я лишь обратился за одним советом. Я не студент и не работаю программистом. Учусь для себя потому что мне это интересно. Напишу я ее в любом случае.
А просто складывать и вычитать числа я и так умею без всяких проблем, поэтому и поставил для себя задачу обработать все возможные варианты арифметических операций. Если честно я пока незнаю как привельно пишуться программы, помому что учусь сам и подсказать некому. Спасибо всем кому не друдно ответить. |
25.01.2010, 21:30 | #14 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,432
|
Вы, я так понимаю, воспользовались моим вариантом. Но не совсем в нём разобрались.
Итак: Код:
Цитата:
Код:
Код:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
26.01.2010, 12:47 | #15 |
Пользователь
Регистрация: 22.01.2010
Сообщений: 11
|
Ну все понятно. А я думаю почуму они не отображаются при вводе? В инете везде пишут просто ah = 08h, int 21h не поясняя больше ничего. Спасибо большое
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
СИ, вывод массива символов | ray13 | Помощь студентам | 7 | 16.09.2020 07:49 |
Удаление лишних символов из Memo | NSV | Общие вопросы Delphi | 10 | 23.11.2012 08:38 |
Как без лишних функций записать файл в string? | TwiX | Общие вопросы Delphi | 10 | 24.08.2009 12:16 |
Удаление лишних пробелов. Ввод/вывод в файл. | Иван 883 | Помощь студентам | 13 | 31.03.2009 19:39 |
Вывод символов в строке | Karl_Karlovi4 | БД в Delphi | 12 | 03.06.2008 13:31 |