Пожалуйста помогите с калькулятором на асме, который исполняет четыре действия + - * / Желательно что бы работал в 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 ;
|
Заранее всем хто отзоветса: огромное спасибо! Это сообщение отредактировал(а) Serj7 - 13.12.2007, 20:32
|