Advertisement
Guest User

Untitled

a guest
Jun 15th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. TITLE   PROGNAME (EXE)
  2. ;----------------------------------------
  3. STACKSG SEGMENT PARA STACK 'Stack'
  4.     DW  32 DUP(?)  
  5. STACKSG ENDS
  6. ;----------------------------------------
  7.  
  8.  
  9. KARET   MACRO
  10.         PUSH AX
  11.         PUSH DX
  12.         mov ah,09
  13.         lea dx,endl
  14.         int 21h
  15.         POP DX
  16.         POP AX
  17. ENDM
  18.  
  19. DATASG  SEGMENT PARA 'Data'
  20.        
  21.  
  22.         Tab DB '№ Студента       ','Ф.И.О            ','Оценка за год    ','Оценка за экзамен$'
  23.         info DB 680 DUP ('$');17 на четыре столбца по 10 строк
  24.         vvedcolexam DB 'Введите количество экзаменующихся: $'
  25.         chisloexam DB 7 DUP ('$')
  26.         Stringnumber DB 'Число студенитов = $'
  27.         chisloexnumber dw (?)
  28.         endl dw 0ah,0dh, '$'
  29.         i db 0
  30.         kolocen DB 10 DUP (0)
  31.         ten dw 10
  32.         UVAR    DW (?)   ; выходная переменная
  33.         ASCVAL  DB '      ','$'         ; шаблон вывода
  34.         EXIT    DW (?)                  ; выход по любой клавише
  35. DATASG  ENDS
  36. ;----------------------------------------
  37. CODESG  SEGMENT PARA 'Code'
  38. BEGIN   PROC    FAR
  39.         ASSUME  CS:CODESG, DS:DATASG, SS:STACKSG
  40.         PUSH    DS
  41.         XOR     AX,AX                   ; запись в стек
  42.         PUSH    AX                      ;    нулевого адреса
  43.         MOV     AX,DATASG               ; засылка адреса
  44.         MOV     DS,AX                   ;    DATASG в регистр DS
  45.         LEA     SI,ASCVAL
  46.        
  47.        
  48.         ;ввод числа экзаменуемых
  49.  
  50.         mov ah,9
  51.         lea dx,vvedcolexam
  52.         int 21h
  53.        
  54.         LEA DX,chisloexam
  55.         MOV BX,DX      
  56.         MOV AL,7       
  57.         MOV [BX],AL    
  58.         MOV AH,0AH     
  59.         INT 21H
  60.         karet;
  61.        
  62.         XOR CX,CX
  63.         ;перевод строки в число     
  64.         mov cl,[bx+1];количество введенных символов в сx
  65.         dec cx
  66.        
  67.        
  68.         add bx,2
  69.         xor ax,ax
  70. StrtoNumber:add al,[bx]
  71.             sub al,30h
  72.             JCXZ odinznak;если первоначально cx =0, то это значит, что ввели от 1 до 10 и умножать на 10 не надо
  73.             imul ten
  74.             add al,[bx+1]
  75.             sub al,30h
  76.             inc bx
  77. loop StrtoNumber
  78.  
  79. odinznak:   mov chisloexnumber,ax
  80.             mov cx,chisloexnumber
  81.             push cx ;сохранили в стек
  82.          xor bx,bx
  83.          xor si,si
  84.  
  85. ;------
  86. ;------ввод информации     
  87. vvodinf:
  88.     mov cx,4;ввод четырех столбцов
  89.     vvodinf2:
  90.         push bx ;так как ниже bx меняется, запоминаем его временно в стеке
  91.         LEA DX,info[bx][si] ;DS:DX указывают на адрес строки
  92.         MOV BX,DX       ;пусть BX тоже указывает на строку
  93.         MOV AL,17       ;установка длины строки (+1 для CR)
  94.         MOV [BX],AL     ;посылаем в первый байт дескриптора
  95.         MOV AH,0AH      ;  номер функции
  96.         INT 21H
  97.         pop bx
  98.         add si,17
  99.         KARET
  100.     loop vvodinf2
  101.    
  102.     add bx,si;переход на следующую строку
  103.     xor si,si
  104.     dec chisloexnumber;ввели ли мы количество строк, которое задали
  105.     mov dx,chisloexnumber
  106. cmp dx,0
  107. JNE vvodinf
  108.  
  109. pop chisloexnumber;сохраненный cx сюда
  110.  
  111. ;------
  112. ;------подсчет оценок     
  113.         mov cx,chisloexnumber
  114.         MOV DL,1
  115.         XOR BX,BX
  116. poschetoc:
  117.             push bx
  118.             mov ah,info[bx][34]
  119.             mov al,info[bx][51]
  120.             xor bx,bx
  121.             cmp ah,al
  122.             JE indentic
  123.                 MOV BL,AL;в bx храним индекс места для оценки
  124.                 sub bl,30h
  125.                 ADD kolocen[BX-1],DL
  126.                 MOV BL,AH
  127.                 sub bl,30h
  128.                 ADD kolocen[BX-1],DL
  129.  
  130. loop poschetoc
  131.    indentic:MOV BL,AL
  132.             sub bl,30h
  133.             ADD kolocen[BX-1],DL;инкуем на 1
  134.             pop bx;извлекли строку
  135.             add bx,68;следующая строка для обработки
  136. loop poschetoc
  137.  
  138.        
  139. ;------вывод---------
  140. ;----------------------------------------
  141. ; очистка экрана
  142. ;----------------------------------------
  143.         MOV     AX,0600H
  144.         MOV     BH,07
  145.         MOV     CX,0000
  146.         MOV     DX,184FH
  147.         INT     10H
  148.        
  149.        
  150.         MOV     AH,02
  151.         MOV     BH,00
  152.         mov     dx,0000h
  153.         INT     10H
  154.         ;вывели шапку
  155.         mov ah,09h
  156.         lea dx,Tab
  157.         int 21h
  158.         ;вывод по 4 столбца
  159.         mov cx,4
  160.         xor si,si
  161.        
  162.         MOV Dh,1;строка 1, так как 0 под шапку
  163.         mov AX,chisloexnumber
  164.         push chisloexnumber
  165.         ;-----------------
  166.         ;-----------------
  167.         xor bx,bx
  168.         xor si,si
  169. vivodinf:
  170.     mov cx,4;ввод четырех столбцов
  171.     vivodinf2:push bx
  172.         MOV     AH,02
  173.         MOV     BH,00
  174.         Mov     Dl,i;столбец
  175.         INT     10H
  176.        
  177.         push dx
  178.         mov ah,09h
  179.         lea dx,info[bx][si+2]
  180.         int 21h
  181.         pop dx
  182.        
  183.         add si,17
  184.         add i,17
  185.     loop vivodinf2
  186.     sub si,17;уменьшили количество 17, так как последней операцией add si 17 один раз лишний
  187.     pop bx
  188.     add bx,si;переход на следующую строку в памяти
  189.     xor si,si;первый столбец
  190.     mov i,0
  191.     inc dh;переход на следующую строку на экране
  192.     dec chisloexnumber;ввели ли мы количество строк, которое задали
  193.     mov cx,chisloexnumber
  194. cmp cx,0
  195. JNE vivodinf
  196.  
  197. pop chisloexnumber
  198.  
  199.        
  200.         MOV AX,4C00H   
  201.         INT 21H
  202.        
  203.        
  204.         RET                             ; завершение программы
  205. BEGIN   ENDP
  206.  
  207. ;****************************************
  208. CODESG  ENDS
  209.         END     BEGIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement