Страница 1 из 1

HELP!!!! Помогите решить маленькую задачку! Я новичок...

Добавлено: 08 июн 2005, 13:38
H13aL
Помогоите исправить програмку плиз в универ срочно сдавать нужно
Програмка очень маленькая почти нечего не делает:

Программа: мигание, инверсия и прокрутка на ассемблере.
Задание:
Разработать программу на языке ассемблер, выполняющую ввод имени на клавиатуре и вывод их на экране. Запрос должен выводиться в инвертированном отображении, имена вводиться в нормальном отображении и выводиться с 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