Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Калькулятор на ассемблере


Автор: Serj7 13.12.2007, 18:48
Пожалуйста помогите с калькулятором на асме, который исполняет четыре действия + - * /
Желательно что бы работал  в DOS, но если будет рабочий под винду кидайте тоже.  Нужен Turbo: компилю через TASM.
Мне нужен на курсач, а сам я в асме не очень. Мне нужен исходник или если есть закиньте ссылу или 
свой исходник.

В этом исходнике у меня ошибка в 89 строке "illegal number" (я его в нете отрыл)


Код

;ПРИМЕР EXE-ПРОГРАММЫ
;Определение сегмента стека /можно оставлять без изменения/
;Имя сегмента стека - stacksg
ssg segment para stack 'stack'  ;Стандартный заголовок определения стека
dw 32 dup(?)                        ;Задание глубины стека
ssg ends                                ;Конец сегмента стека

;Определение сегмента данных
;Имя сегмента данных - datasg
datasg segment para 'data'          ;Стандартный заголовок определения данных
;Здесь определяются данные
strg db 'Программа запущена',13,10,'$'
wert db 1
zyxel db ?
cp db 1
qwe db 1
ends                                ;Конец сегмента данных

;Сегмент кода - тело программы
codesg segment para 'code'          ;Заголовок сегмента кода
begin proc far                      ;Начало программы - основной процедуры
;-------------------------------------------------------------------------
assume cs:codesg,ds:datasg,ss:ssg ; \
push ds                               ;   \
sub ax,ax                             ; Стандартный заголовок любой
push ax                               ;        EXE - программы
mov ax,datasg                         ;   /
mov ds,ax                             ; /
;-------------------------------------------------------------------------
;Непосредственно ваша программа

 call screen_clear ;Вызов процедуры очистки экрана

 MOV  DH,00    ;Строка 00
 MOV  DL,12    ;Столбец 12
 call curs_pos     ;Вызов процедуры установки курсора
 lea dx,strg       ;\
 mov ah,09         ; |Вывод строки "Программа запущена"
 int 21h           ;/


vsa1: mov wert,01       ;Запись 1 в инкременируемое значение

vsa: in ax,60h         ;\
 cmp al,01h        ; |Опрос клавиатуры. Если Esc, то выйти из программы
 je cikl           ;/

 mov ax,255        ;запись в ах коэффициента
 mov bh,wert       ;запись в bx инкременируемого значения
 div bh            ;деление ах на bx
 mov zyxel, al     ;сохранение переменной, выводимой на порт в память
 mov qwe, al       ;сохранение переменной, выводимой на порт в память
 mov al, 18h       ;\ вычитаем из переменной 18h для вывода на экран
 sub al, qwe       ;/


 MOV  AH,02    ;Запрос на установку курсора
 MOV  BH,00    ;Экран 0
 mov  dh,al   ;Строка al
 MOV  DL,cp    ;Столбец ср
 int 10h       ;Передаём управление в БИОС

 MOV  AH,09        ;Функция вывода на экран
 MOV  AL,'*'       ;Выводимый символ ( звездочка)
 MOV  BH,00        ;Страница 0
 MOV  BL,4ah       ;Установки цвета
 MOV  CX,1         ;Число повторений выводимого символа
 int 10h           ;Передача управления в БИОС

 mov al, zyxel     ;Возвращаем переменную, выводимую на порт из памяти
 mov dx, 0378h     ;Определяем адрес порта
 out dx,al         ;Выводим переменную на порт

 inc wert          ;Инкремент коэффициента
 cmp wert,40h      ;Проверка на конец линии
 je vsa1           ;Если линия закончена перейти на начало программы
 inc cp            ;Инкремент позиции курсора по столбцам
 cmp cp,40h        ;Проверка на конец экрана
 je obn            ;Если достиг конца экрана, то перейти на obn
 jmp vsa           ;Перейти в начало программы
obn:    call screen_clear ;Процедура очистки экрана
 mov cp,01         ;Запись единицы в значения столбцов
 jmp vsa1          ;Переход в начало программы


;--------------------процедура очистки экрана----------------------------
screen_clear proc
        MOV AX,0600h      ;Запрос на очистку экрана
 MOV  BH,10Н   ;Цвет экрана/фон символа (00000000)
 MOV  CX,0000   ;Верхняя левая позиция
 MOV  DX,184FH     ;Нижняя правая позиция
 int 10h
ret
endp
;-------------------------------------------------------------------------
;---------------------процедура установки курсора-------------------------
curs_pos proc
;DX-номер строки и столбца
 MOV  AH,02   ;Запрос на установку курсора
 MOV  BH,00   ;Экран 0
 int 10h      ;Передаём управление в БИОС
ret
endp
;-------------------------------------------------------------------------
CIKL:
;-------------------------------------------------------------------------
ret             ;
begin endp      ;Стандартный конец программы
codesg ends     ;
end begin       ;


Заранее всем хто отзоветса: огромное спасибо!


Автор: PPS05 18.12.2007, 18:06
В строке 89 'H' - русское "эн"

MOV  BH,10Н

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)