Очистка экрана в диалоговом режиме (координаты начала и конца вводить с клавиатуры) - Assembler
Формулировка задачи:
В коледже задали курсовую:Розработка и слажывания на Ассемблер программы очистки экрана в диалоговом режыме(координаты начала и конца вводить с клавиатуры). Програму зделал, но что то она не хочет правильно чистить. Прошу помощи, надо уже здать, а я никак не могу с ней розобраться!! Текст программы:
.model small .data row1 db ? col1 db ? row2 db ? col2 db ? ms1 db 'Meny',"$" ms2 db 'Livuy verhniy kyt,row1 ',"$" ms3 db 'Livuy verhniy kyt,col1 ',"$" ms4 db 'Pravuy nughnuy kyt,row2 ',"$" ms5 db 'Pravuy nughnuy kyt,col2 ',"$" ms6 db 'Exit - Enter',"$" stack 64 namepar label byte maxlen db 20 actlen db ? namefld db 20 dup(' ') .code begin: mov ax,@data mov ds,ax ;-------------------------------- mov ax,0600h mov bh,07 mov cx,0000 mov dx,184Fh int 10h ;-------------------------------- mov ax,0600h mov bh,67 mov cx,050Fh mov dx,1340h int 10h ;----------------Meny---------------- mov ah,02 mov bh,00 mov dh,06 mov dl,25h int 10h mov ah,09 lea dx,ms1 int 21h ;------------------MS2-------------- mov ah,02 mov bh,00 mov dh,08 mov dl,15h int 10h mov ah,09 lea dx,ms2 int 21h ;-------------------MS3------------- mov ah,02 mov bh,00 mov dh,0Ah mov dl,15h int 10h mov ah,09 lea dx,ms3 int 21h ;-------------------MS4------------- mov ah,02 mov bh,00 mov dh,12 mov dl,15h int 10h mov ah,09 lea dx,ms4 int 21h ;-------------------MS5------------- mov ah,02 mov bh,00 mov dh,14 mov dl,15h int 10h mov ah,09 lea dx,ms5 int 21h ;-----------------MS6--------------- mov ah,02 mov bh,00 mov dh,12h mov dl,15h int 10h mov ah,09 lea dx,ms6 int 21h ;-----------------Vvod-------------------- ;-----------------Row1-------------------- mov ah,02 mov bh,00 mov dh,08 mov dl,54 int 10h ;----------------------------------------- mov ah,0Ah lea dx,namepar int 21h mov row1,ah ;-----------------Col1-------------------- mov ah,02 mov bh,00 mov dh,0Ah mov dl,54 int 10h ;----------------------------------------- mov ah,0Ah lea dx,namepar int 21h mov col1,ah ;-----------------Row2-------------------- mov ah,02 mov bh,00 mov dh,12 mov dl,54 int 10h ;----------------------------------------- mov ah,0Ah lea dx,namepar int 21h mov row2,ah ;-----------------Col2-------------------- mov ah,02 mov bh,00 mov dh,14 mov dl,54 int 10h ;----------------------------------------- mov ah,0Ah lea dx,namepar int 21h mov col2,ah ;-----------------Zacrasca---------------- mov ax,0600h mov bh,17 mov ch,row1 mov cl,col1 mov dh,row2 mov dl,col2 int 10h mov ah,0Ah int 21h ;---------------exit------------------ mov ax,4c00h int 21h end begin
Решение задачи: «Очистка экрана в диалоговом режиме (координаты начала и конца вводить с клавиатуры)»
textual
Листинг программы
;-----------------Vvod-------------------- ;-----------------Row1-------------------- mov ah,02 mov bh,00 mov dh,08 mov dl,54 int 10h ;----------------------------------------- ;mov ah,0Ah ;lea dx,namepar ;int 21h call InputInt mov row1,al ;-----------------Col1-------------------- mov ah,02 mov bh,00 mov dh,0Ah mov dl,54 int 10h ;----------------------------------------- ;mov ah,0Ah ;lea dx,namepar ;int 21h call InputInt mov col1,al ;-----------------Row2-------------------- mov ah,02 mov bh,00 mov dh,12 mov dl,54 int 10h ;----------------------------------------- ;mov ah,0Ah ;lea dx,namepar ;int 21h call InputInt mov row2,al ;-----------------Col2-------------------- mov ah,02 mov bh,00 mov dh,14 mov dl,54 int 10h ;----------------------------------------- ;mov ah,0Ah ;lea dx,namepar ;int 21h call InputInt mov col2,al ;-----------------Zacrasca---------------- mov ax,0600h mov bh,17 mov ch,row1 mov cl,col1 mov dh,row2 mov dl,col2 int 10h mov ah,0Ah int 21h ;---------------exit------------------ mov ax,4c00h int 21h InputInt proc push bx push cx push dx push si mov ah,0ah mov dx,offset max ; аддрес буфера int 21h ; принимаем строку mov dl,0ah mov ah,02 int 21h ; выводим перевода строки ; обрабатываем содержимое буфера mov si,offset buff+1 ; берем аддрес начала строки xor ax,ax mov bx,10 ; основание сc ii2: mov cl,[si] ; берем символ из буфера cmp cl,0dh ; проверяем не последний ли он jz endin ; если символ не последний, то проверяем его на правильность cmp cl,'0' ; если введен неверный символ <0 jl er cmp cl,'9' ; если введен неверный символ >9 ja er sub cl,'0' ; делаем из символа число mul bx ; умножаем на 10 add ax,cx ; прибавляем к остальным inc si ; указатель на следующий символ jmp ii2 ; повторяем er: ; если была ошибка, то выводим сообщение об этом и выходим mov dx, offset error mov ah,09 int 21h int 20h ; все символы из буфера обработаны число находится в ax endin: pop si pop dx pop cx pop bx ret error db "incorrect number$" max db 6 buff db 7 Dup(?) InputInt endp end begin
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д