Новичок
Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.1.2010
Репутация: нет Всего: нет
|
Товарищи форумчане про шу вашей помощи и консультации. Весь курсач сам сделал(ну канешно сделал его по-дилетантски), но всё же сам. Споткнулся на финальном моенте. Конкретнее: вылетает сообщение о делении на 0, хотя я не вижу деления на 0 (мож плохо смотрю) вот сам код, проблема на этапе получения и вывода "кода разности" на экран, то есть если символ имеет ASCII-код 100, то мне надо вывести на экран цифру 255 - 100 = 155!!!! т.е. 155 на экран. так вот тут я споткнулся и ничё дальше не идёт, а что самое обидное просто получение ASCII кода и вывод его на экран я прописал и он работает, а тут вот не получаеться никак((( (если кто попробует помочь, при запуске введите 5-6 символов подряд и последним обязательно 'h') код: | Код | stseg segment para stack dw 16 dup(?) stseg ends dseg segment para path_and_name DB 'C:\Tasm\Kursoff.txt',0 handle_of_file DW 0 number DB 18 read DW 0 message1 DB 'Press any key to exit!$' message2 DB 'Output text on print: $' message3 DB 'Input text: $' help_variable DB '000 $' Buffer DB 30 DUP(0) help_param DB (?) date db 'Today is: 00.00.0000$' month db (?) day db (?) year dW (?) y db (?) dseg ends cseg segment para lab1 proc far assume cs:cseg,ds:dseg,ss:stseg push ds mov ax,0 ; обнулить регистр АХ push ax ; поместить в стек смещение адреса возврата=0 mov ax,dseg ; инициировать адрес сегмента данных mov ds,ax ; загрузить адрес в регистр DS mov ax, 03 ; очистка экрана int 10h mov ah,09h ; Вывод сообщения message3 lea dx,message3 int 21h MOV AH,3CH ; Запрос на создание MOV CX,00 ; обычного файла LEA DX,path_and_name ; ASCIIZ строка INT 21H ; Вызов DOS MOV handle_of_file,AX ;Сохранение файлового ID в HANDLE start_of_ENTER: mov ah,01h ; ввод вимволов с клаdиатуры в файл int 21h mov help_param,al ; сразу передаём ACSII - код нажатой кклавиши в вспомогательную переменную cmp help_param, 'h' je end_of_ENTER LEA DX,help_param ; указываем адрес вспомогательной перменной, в которой храниться введёный символ MOV AH,40H ; номер функции записи в файл MOV BX,handle_of_file ; Файловый номер MOV CX,1 ; Длина записи INT 21H inc read ; dec number ; После каждого ввода символа значение пременной уменьшаеться на 1 jnz start_of_ENTER end_of_ENTER: mov ah,42h ; установка курсора в файле mov al,00h mov bx,handle_of_file xor dx,dx xor cx,cx int 21h mov ah,3fh ; функция чтения файла mov bx,handle_of_file mov cx,read ; сколько читать mov dx,OFFSET Buffer ; чиатем в буфер int 21h ; выполнить MOV AH,3EH ; Запрос на закрытие файла MOV BX,handle_of_file ; Файловый номер INT 21H ; Вызов DOS MOV AH,02H ; Перевод курсора на новоую строку mov dh,01 mov dl,00 int 10h mov ah,09h ; Вывод сообщения message2 lea dx,message2 int 21h mov si, read ; вывод на экран символов в обратном порядке dec si output_on_print: mov ah,02h mov dl,Buffer[si] int 21h dec si cmp si,0 JGE output_on_print MOV AH,02H ; Перевод курсора на новоую строку mov dh,02 mov dl,00 int 10h ;-----------------------------------------код---------------- xor si,si code_take: mov al, buffer[si] mov help_variable,'0' mov dl,10 mov di,2 convert_code: cbw div dl add ah,48 mov help_variable[di], ah dec di cmp al, 10 jae convert_code add al,48 mov help_variable[di],al mov ah,09h ; Вывод кодов lea dx,help_variable int 21h inc si cmp si, read jne code_take ;--------------------------------------------------------------------------- MOV AH,02H ; Перевод курсора на новоую строку mov dh,03 mov dl,00 int 10h ;-----------------------------------------код разность---------------- xor ax,ax xor cx,cx xor si,si code_take_edition: mov cl, 255 ; 255 в СL sub cl,buffer[si] ; 255 - ACSII код символа в buffer[si] mov al,cl ; заношу разность в AL mov help_variable,'0' mov dl,10 mov di,2 convert_code_edition: cbw div dl add ah,48 mov help_variable[di], ah dec di cmp al, 10 jae convert_code_edition add al,48 mov help_variable[di],al mov ah,09h ; Вывод кодов lea dx,help_variable int 21h inc si cmp si, read jne code_take_edition ;--------------------------------------------------------------------------- MOV AH,02H ; Перевод курсора на новоую строку mov dh,04 mov dl,00 int 10h ;-----ВЫВОД НА ЭКРАН ДАТЫ (DONT TOUCH THIS FRAGMENT!!! I'M WRITING IT HOLE WEEK!!!------------------ mov ah,2ah ; функция на запрос текущей даты у системы int 21h mov year, CX ; год (формат BCD) mov month, DH ; месяц (формат BCD) mov day, DL ; день (формат BCD) mov cl,10 ; обработка "дня", перевод в ASCII-код mov al, day mov si,11 convert1: cmp al,10 jb end_convert1 cbw div cl add ah,48 mov date[si],ah dec si jmp convert1 end_convert1: add al,48 mov date[si],al mov cl,10 ; обработка "месяца", перевод в ASCII-код mov al, month mov si,14 convert2: cmp al,10 jb end_convert2 cbw div cl add ah,48 mov date[si],ah dec si jmp convert2 end_convert2: add al,48 mov date[si],al mov ax,year ; обработка "года", перевод в ASCII-код mov bx,10 mov si,20 xor cx,cx convert3: dec si xor dx,dx div bx add dl,48 mov date[si],dl test ax,ax jnz convert3 mov ah,09h ; Вывод полной текущей даты на экран в формате "дд.мм.гг" lea dx,date int 21h ;-----------КОНЕЦ ОБРАБОТКИ ДАННЫХ О ДТЕКУЩЕЙ ДАТЕ------------------------------- MOV AH,02H ; Перевод курсора на новоую строку mov dh,05 mov dl,00 int 10h mov ah,09h ; Вывод сообщения lea dx,message1 int 21h mov ah,01h ; прерывание на ввод символа с клаиатуры int 21h ret lab1 endp cseg ends end lab1
|
чувствую, что надо исправить строки 3-4, но как не знаю, что - то не нравиться ему моё вычитание с помощью sub
|