Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TITLE PROGNAME (EXE)
- ;----------------------------------------
- STACKSG SEGMENT PARA STACK 'Stack'
- DW 32 DUP(?)
- STACKSG ENDS
- ;----------------------------------------
- KARET MACRO
- PUSH AX
- PUSH DX
- mov ah,09
- lea dx,endl
- int 21h
- POP DX
- POP AX
- ENDM
- DATASG SEGMENT PARA 'Data'
- Tab DB '№ Студента ','Ф.И.О ','Оценка за год ','Оценка за экзамен$'
- info DB 680 DUP ('$');17 на четыре столбца по 10 строк
- vvedcolexam DB 'Введите количество экзаменующихся: $'
- chisloexam DB 7 DUP ('$')
- Stringnumber DB 'Число студенитов = $'
- chisloexnumber dw (?)
- endl dw 0ah,0dh, '$'
- i db 0
- kolocen DB 10 DUP (0)
- ten dw 10
- UVAR DW (?) ; выходная переменная
- ASCVAL DB ' ','$' ; шаблон вывода
- EXIT DW (?) ; выход по любой клавише
- DATASG ENDS
- ;----------------------------------------
- CODESG SEGMENT PARA 'Code'
- BEGIN PROC FAR
- ASSUME CS:CODESG, DS:DATASG, SS:STACKSG
- PUSH DS
- XOR AX,AX ; запись в стек
- PUSH AX ; нулевого адреса
- MOV AX,DATASG ; засылка адреса
- MOV DS,AX ; DATASG в регистр DS
- LEA SI,ASCVAL
- ;ввод числа экзаменуемых
- mov ah,9
- lea dx,vvedcolexam
- int 21h
- LEA DX,chisloexam
- MOV BX,DX
- MOV AL,7
- MOV [BX],AL
- MOV AH,0AH
- INT 21H
- karet;
- XOR CX,CX
- ;перевод строки в число
- mov cl,[bx+1];количество введенных символов в сx
- dec cx
- add bx,2
- xor ax,ax
- StrtoNumber:add al,[bx]
- sub al,30h
- JCXZ odinznak;если первоначально cx =0, то это значит, что ввели от 1 до 10 и умножать на 10 не надо
- imul ten
- add al,[bx+1]
- sub al,30h
- inc bx
- loop StrtoNumber
- odinznak: mov chisloexnumber,ax
- mov cx,chisloexnumber
- push cx ;сохранили в стек
- xor bx,bx
- xor si,si
- ;------
- ;------ввод информации
- vvodinf:
- mov cx,4;ввод четырех столбцов
- vvodinf2:
- push bx ;так как ниже bx меняется, запоминаем его временно в стеке
- LEA DX,info[bx][si] ;DS:DX указывают на адрес строки
- MOV BX,DX ;пусть BX тоже указывает на строку
- MOV AL,17 ;установка длины строки (+1 для CR)
- MOV [BX],AL ;посылаем в первый байт дескриптора
- MOV AH,0AH ; номер функции
- INT 21H
- pop bx
- add si,17
- KARET
- loop vvodinf2
- add bx,si;переход на следующую строку
- xor si,si
- dec chisloexnumber;ввели ли мы количество строк, которое задали
- mov dx,chisloexnumber
- cmp dx,0
- JNE vvodinf
- pop chisloexnumber;сохраненный cx сюда
- ;------
- ;------подсчет оценок
- mov cx,chisloexnumber
- MOV DL,1
- XOR BX,BX
- poschetoc:
- push bx
- mov ah,info[bx][34]
- mov al,info[bx][51]
- xor bx,bx
- cmp ah,al
- JE indentic
- MOV BL,AL;в bx храним индекс места для оценки
- sub bl,30h
- ADD kolocen[BX-1],DL
- MOV BL,AH
- sub bl,30h
- ADD kolocen[BX-1],DL
- loop poschetoc
- indentic:MOV BL,AL
- sub bl,30h
- ADD kolocen[BX-1],DL;инкуем на 1
- pop bx;извлекли строку
- add bx,68;следующая строка для обработки
- loop poschetoc
- ;------вывод---------
- ;----------------------------------------
- ; очистка экрана
- ;----------------------------------------
- MOV AX,0600H
- MOV BH,07
- MOV CX,0000
- MOV DX,184FH
- INT 10H
- MOV AH,02
- MOV BH,00
- mov dx,0000h
- INT 10H
- ;вывели шапку
- mov ah,09h
- lea dx,Tab
- int 21h
- ;вывод по 4 столбца
- mov cx,4
- xor si,si
- MOV Dh,1;строка 1, так как 0 под шапку
- mov AX,chisloexnumber
- push chisloexnumber
- ;-----------------
- ;-----------------
- xor bx,bx
- xor si,si
- vivodinf:
- mov cx,4;ввод четырех столбцов
- vivodinf2:push bx
- MOV AH,02
- MOV BH,00
- Mov Dl,i;столбец
- INT 10H
- push dx
- mov ah,09h
- lea dx,info[bx][si+2]
- int 21h
- pop dx
- add si,17
- add i,17
- loop vivodinf2
- sub si,17;уменьшили количество 17, так как последней операцией add si 17 один раз лишний
- pop bx
- add bx,si;переход на следующую строку в памяти
- xor si,si;первый столбец
- mov i,0
- inc dh;переход на следующую строку на экране
- dec chisloexnumber;ввели ли мы количество строк, которое задали
- mov cx,chisloexnumber
- cmp cx,0
- JNE vivodinf
- pop chisloexnumber
- MOV AX,4C00H
- INT 21H
- RET ; завершение программы
- BEGIN ENDP
- ;****************************************
- CODESG ENDS
- END BEGIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement