Очистка экрана в диалоговом режиме (координаты начала и конца вводить с клавиатуры) - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы