HELP!!!! Помогите решить маленькую задачку! Я новичок...
Добавлено: 08 июн 2005, 13:38
Помогоите исправить програмку плиз в универ срочно сдавать нужно
Програмка очень маленькая почти нечего не делает:
Программа: мигание, инверсия и прокрутка на ассемблере.
Задание:
Разработать программу на языке ассемблер, выполняющую ввод имени на клавиатуре и вывод их на экране. Запрос должен выводиться в инвертированном отображении, имена вводиться в нормальном отображении и выводиться с 51-го столбца в той же строчке с миганием и инвертированием.
Я нашел почти свою прогу только в ней надо сделать пару исправлений: 1) выводиться должно с 51 столбца а тут с 40 как написано было в исходниках. 2) программа выдает в конце ошибку "D:\masm32\╩єЁёютр \kur.asm(120) : fatal error A1010: unmatched block nesting : STACKSG"
Я сам не шарю что сдесь делать. Зарание спасибо!!!!!!!!!!.
Вот сама программа:
Програмка очень маленькая почти нечего не делает:
Программа: мигание, инверсия и прокрутка на ассемблере.
Задание:
Разработать программу на языке ассемблер, выполняющую ввод имени на клавиатуре и вывод их на экране. Запрос должен выводиться в инвертированном отображении, имена вводиться в нормальном отображении и выводиться с 51-го столбца в той же строчке с миганием и инвертированием.
Я нашел почти свою прогу только в ней надо сделать пару исправлений: 1) выводиться должно с 51 столбца а тут с 40 как написано было в исходниках. 2) программа выдает в конце ошибку "D:\masm32\╩єЁёютр \kur.asm(120) : fatal error A1010: unmatched block nesting : STACKSG"
Я сам не шарю что сдесь делать. Зарание спасибо!!!!!!!!!!.
Вот сама программа:
Код: Выделить всё
page 60,132
TITLE NMSCROLL (EXE) Инвертирование, мигание, прокрутка
; -------------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
DW 32 DUP(?)
STACKSG SEGMENT PARA STACK 'Stack'
DW 32 DUP(?)
STACKSG ENDS
; -------------------------------------------------------
DATASG SEGMENT PARA 'Data'
NAMEPAR LABEL BYTE ;Имя списка параметров:
MAXNLEN DB 20 ; макс. длина имени
ACTNLEN DB ? ; число введенных символов
NAMEFLD DB 20 DUP(' ') ; имя
COL DB 00
COUNT DB ?
PROMPT DB 'Name? '
ROW DB 00
DATASG ENDS
; -------------------------------------------------------
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
PUSH DS
SUB AX,AX
PUSH DS
MOV AX,DATASG
MOV ES,AX
MOV AX,0600H
CALL Q10CLR ;Очистить экран
A20LOOP:
MOV COL,51 ;Установить столбец 0
CALL Q20CURS
CALL B10PRMP ;Выдать текст запроса
CALL D10INPT ;Ввести имя с клавиатуры
CMP ACTNLEN,00 ;Нет имени? (т.е. конец)
JNE A30
MOV AX,0600H
CALL Q10CLR ;Если да, то очистить экран,
RET ; и завершить программу
A30:
CALL E10NAME ;Вывести имя на экран
JMP A20LOOP
BEGIN ENDP
; Вывод текста запроса:
; --------------------
B10PRMP PROC NEAR
LEA SI,PROMPT ;Адрес текста
MOV COUNT,05
B20:
MOV BL,70H ;Видеоинверсия
CALL F10DISP ;Подпрограмма вывода
INC SI ;Следующий символ в имени
INC COL ;Следующий столбец
CALL Q20CURS
DEC COUNT ;Уменьшение счетчика
JNZ B20 ;Повторить n раз
RET
B10PRMP ENDP
; вод имени с клавиатуры:
; ----------------------
D10INPT PROC NEAR
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
RET
D10INPT ENDP
; Вывод имени с миганием и инверсией:
; ----------------------------------
E10NAME PROC NEAR
LEA SI,NAMEFLD ;Адрес имени
MOV COL,40 ;Установить столбец
E20:
CALL Q20CURS ;Установить курсор
MOV BL,0F0H ;Мигание и инверсия
CALL F10DISP ;Подпрограмма вывода
INC SI ;Следующий символ в имени
INC COL ;Следующий столбец на экране
DEC ACTNLEN ;Уменьшить счетчик длины
JNZ E20 ;Циклить n раз
CMP ROW,20 ;Последняя строка экрана?
JAE E30 ; нет
INC ROW
RET
E30: MOV AX,0601H ; да --
CALL Q10CLR ; очистить экран
RET
E10NAME ENDP
; Вывод символа на экран:
; ----------------------
F10DISP PROC NEAR ;BL (атрибут) уже установлен
MOV AX,09 ;Функция вывода на экран
MOV AL,[SI] ;Получить символ из имени
MOV BH,00 ;Номер страницы
MOV CX,01 ;Один символ
INT 10H ;Вызов BIOS
RET
F10DISP ENDP
; Очистка экрана:
; --------------
Q10CLR PROC NEAR ;AX установлен при вызове
MOV BH,07 ;Нормальный ч/б
MOV CX,0000
MOV DX,184FH
INT 10H ;Вызов BIOS
RET
Q10CLR ENDP
; Установить курсор (строка/столбец):
; ----------------------------------
Q20CURS PROC NEAR
MOV AX,02
MOV BH,00
MOV DH,ROW
MOV DL,COL
INT 10H
RET
Q20CURS ENDP
CODESG ENDS
END BEGIN