forked from NunoLima10/Assembly-emu8086-iniciante
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGerenciador de notas-Projeto Final Arc.asm
1492 lines (930 loc) · 34.8 KB
/
Gerenciador de notas-Projeto Final Arc.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;DIEGO DONOVAN SILVA SOUSA LEIT 1 ANO 2 SEMESTRE
;NUNO JORGE GOMES LIMA LEIT 1 ANO 2 SEMESTRE
; TERMINADO DIA 27/06/2021
ORG 100H
.STACK 100H
.DATA
;opcoes de menu
MSG_MENU DB 10D,13D," MENU ", "$"
MSG_INSERIR DB 10D,13D,"01.INSERIR NOTAS DOS ALUNOS", "$" ;inserir notas turmas
MSG_MELHOR_PIOR DB 10D,13D,"02.VER MELHOR/PIOR NOTA", "$" ;melhor e pior nota
MSG_ETD_MP DB 10D,13D,"03.VER ESTUDANTES NOTA MAIS ALTA/MAIS BAIXA","$" ;ver numero de estudante nota mais alta/baixa
MSG_NUM_APR DB 10D,13D,"04.QUANTIDADE APROVADOS", "$" ;quantidade aprovados
MSG_MEDIA_T DB 10D,13D,"05.MEDIA DA TURMA", "$" ;ver media da turma
MSG_NUM DB 10D,13D,"06.NUMERO DOS ESTUDANTES APROVADOS", "$" ;determinar numero de cada estudante aprovado
MSG_PESQ_ALU DB 10D,13D,"07.PESQUISAR ALUNO", "$" ;pesquisar aluno mediante o numero
MSG_DECRE DB 10D,13D,"08.ORDENAR NOTAS POR ORDEM DECRESCENTE", "$" ;ver notas por ordem decrescente
MSG_IMPRI DB 10D,13D,"09.ENVIAR LISTA IMPRESSORA", "$" ;enviar lista estudantes para impressora
MSG_SAIR DB 10D,13D,"10.SAIR", "$" ;sair
MSG_PESQ_ALU2 DB 10D,13D,"07.PESQUISAR ALUNO (01) A (10)", "$"
;mensagens
MSG_CONT DB 10D,13D,"CONTINUAR...<ENTER>" , "$" ;mostrar para continuar
MSG_MNOTA DB 10D,13D,"MELHOR NOTA: " , "$" ;pior nota
MSG_PNOTA DB 10D,13D,"PIOR NOTA: " , "$" ;mostrar para continuar
MSG_NOTAPRO DB 10D,13D,"NUMERO DE APROVADOS:" , "$"
MSG_NUMPRO DB 10D,13D,"NUMERO DOS APROVADOS:" , "$"
MSG_ESCOLHA_OP DB 10D,13D,"ESCOLHA OPERACAO A REALIZAR: ", "$" ;escolher opcao
MSG_COM_TURMA DB 10D,13D,"NENHUMA TURMA REGISTRADA", "$"
MSG_MEDIA DB 10D,13D,"A MEDIA DA TURMA: ", "$" ;media da turma
MSG_LOCALIZAR DB 10D,13D,"ENTRE NUMERO ALUNO:" , "$"
MSG_ALUN_PROCU DB 10D,13D,"NOTA ALUNO PROCURADO:" , "$" ;aluno procurado
MSG_REPETIR DB 10D,13D,"PROCURAR NOVO ALUNO [S]:" , "$"
MSG_NUMERO_BN DB 10D,13D,"ESTUDANTES COM NOTA MAIS ALTA: " , "$" ;numero de estudantes com nota mais alta
MSG_NUMERO_WN DB 10D,13D,"ESTUDANTES COM NOTA MAIS BAIXA: " , "$"
MSG_APROVADO DB " APROVADO" , "$"
MSG_REPROVADO DB " REPROVADO" , "$"
MSG_PROCESSANDO DB 10D,13D," PROCESSANDO" , "$"
MSG_RNOTA DB 10D,13D,"INSERIR NOTA: ", "$"
MSG_INV DB 10D,13D,"INVALIDO", "$"
;"formatar"
SEP DB 10D,13D,"==============================================", "$"
LINBRA DB 10D,13D,"", "$"
LIMPAR DB 10D,13D," ", "$"
;variaveis
NOTAS DB 10 DUP(?) ;vetor de notas
ORDNOTA DB 10 DUP(?) ;notas ordenadas
INDICE DB 1D ;indice usado para ordenacao
NALUNOS EQU 10D ;constante numero de alunos
OPCAO DB 1D
MELHOR_NOTA DB 1D
PIOR_NOTA DB 1D
NUMERO_APROV DB 1D ;contador de numero de aprovados
COM_TURMA DB 1D ;verificar se ja tem turma
SOMA_TOTAL DW 1D ;soma total das notas
MEDIA DB 1D
RESTO_MEDIA DB 1D
ID_APROVADO DW 1D
;fim variaveis
.CODE
MOV COM_TURMA,0H ;inicialmente sem turma
JMP INICIO ;mais ou menos na linha 1350
;Abaixo todos os procedimentos usados
;menu mostra o menu
;pede a opecao
;verifica se valido e guarda
MENU PROC
;Mostrar todo o menu
CALL SEPARADOR
LEA DX,MSG_MENU
MOV AH,09H
INT 21H
CALL SEPARADOR
LEA DX,MSG_INSERIR ;1
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_MELHOR_PIOR ;2
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_ETD_MP ;3
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_NUM_APR ;4
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_MEDIA_T ;5
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_NUM ;6
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_PESQ_ALU ;7
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_DECRE ;8
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_IMPRI ;9
MOV AH,09H
INT 21H
CALL ESPACO
LEA DX,MSG_SAIR ;10
MOV AH,09H
INT 21H
CALL SEPARADOR
;receber opecao
RECEBER_OP:
LEA DX,MSG_ESCOLHA_OP ;escolher opcao
MOV AH,09H
INT 21H
;receber opcao
MOV BH,0AH
MOV AH,01H
INT 21H
;verificar se e numero valido
CMP AL,30H
JB INVALIDO_MENU ;se ascii menor que 0
CMP AL,31H
JA INVALIDO_MENU ;se ascii maior que 1 obs:maximo de 01 a 10
LIVRE_OPECAO_MENU:
MOV CL,AL ;guardar digito 1 em cl
MOV AH,01H ;receber segundo
INT 21H
CMP AL,30H
JB INVALIDO_MENU
CMP AL,39H
JA INVALIDO_MENU ;segundo ascii de ser menor que 9
CMP CL,31H ;caso o primeiro digito e 1
JE OPECAO10
CMP AL,30H ;caso nao e 1 entao e 0 e segundo digito nao pode ser 0
JE INVALIDO_MENU
JMP CONT
OPECAO10:
CMP AL,30H ;caso primeiro digito e 1 e obrigatorio segundo ser 0
JNE INVALIDO_MENU
JMP CONT
INVALIDO_MENU:
CALL INVAL
JMP RECEBER_OP
CONT:
MOV CH,AL ;guardar segunda opecao
SUB CL,30H ;tansforma em hex
SUB CH,30H
MOV AL,CL
MUL BH ;multiplicar primeiro digito por 0Ah(10)
ADD AL,CH ;adicionar ao segundo digito
LEA BP,OPCAO ;guardar a opecao
MOV [BP],AL
RET
MENU ENDP
;invalido
;e chamado quando usuario digite algo invalido
INVAL PROC
CALL ESPACO
LEA DX,MSG_INV
MOV AH,09H
INT 21H
CALL ESPACO
RET
INVAL ENDP
;separador
;imprime uma linha de = na tela
SEPARADOR PROC
LEA DX,SEP
MOV AH,09H
INT 21H
RET
SEPARADOR ENDP
;espaco
;imprime uma linha em branca na tela
ESPACO PROC
LEA DX,LINBRA ;linha em branco
MOV AH,09H
INT 21H
RET
ESPACO ENDP
;limpar
;limpa a tela
LIMP PROC
MOV Cx ,19h ;repetir ate limpar toda a tela (25 linhas)
LIMPAR_LINHA:
;movendo curso de posisao
MOV Ah,2h
MOV Dl,0h ;coluna 0
MOV Dh,19h ;linha 25
MOV Bl,0h ;pagina 0
INT 10h
DEC DH ;decrementa a linha todas as vezes (25-1)=24...
CALL ESPACO ;sobrepondo o que esta escrito com uma linha em branco
LOOP LIMPAR_LINHA
CALL PRIMEIRA_LINHA ;colocar o cursor no inico
RET
LIMP ENDP
;procesando
;exibe messagem e volta a primeira linha
MENSAGEM_PROCESANDO PROC
LEA DX,MSG_PROCESSANDO
MOV AH,09H
INT 21H
CALL PRIMEIRA_LINHA
RET
MENSAGEM_PROCESANDO ENDP
;receber
;pede as notas
;faz verificasao se e valido
;guarda as notas
RECEBER PROC
CALL SEPARADOR
LEA DX,MSG_INSERIR ;1
MOV AH,09H
INT 21H
CALL SEPARADOR
MOV CX,0H
MOV CX,NALUNOS ;numero de alunos 10
MOV BP,0H ; indice atual do vetor notas
RECEBENDO:
LEA DX,MSG_RNOTA
MOV AH, 09H
INT 21H
MOV BH,0AH
MOV AH,01H
INT 21H
;verificar primeiro caracter nota
CMP AL,30H
JB INVALIDONUMERO
CMP AL,32H
JA INVALIDONUMERO
SUB AL,30H
MOV BL,AL ;guardar digito 1 em bl
PROX: ;proximo caracter
MOV AH,01H
INT 21H
;verificar segundo caracter da nota
CMP AL,30H
JB INVALIDONUMERO
CMP AL,39H
JA INVALIDONUMERO
CMP BL,2H ;caso primeiro nao e 2
JNE LIVRE
COMPARA_DIG2: ;caso for e obrigadorio o segundo ser 0
CMP AL,30H
JNE INVALIDONUMERO
;respeita as condicoes
LIVRE:
SUB AL,30H ;segundo digito
MOV BH,AL ;salvar segund digito
MOV AL,BL ;pegar primeiro digito
MOV BL,0AH
MUL BL
ADD BH,AL
MOV NOTAS[BP],BH ;salvar a nota o indicie atual de bp
MOV ORDNOTA[BP],BH
INC BP
CMP CL,0H
JE FIM_RECEBER
LOOP RECEBENDO
JMP FIM_RECEBER
INVALIDONUMERO:
CALL INVAL
JMP RECEBENDO
FIM_RECEBER:
MOV COM_TURMA,01H ;agora a turma ja foi inserida
RET
RECEBER ENDP
;mostrar
;pega ms valores no vetor
;separa o resultado e resto da divisao por 10
;mostra na impresora cada caracter
MOSTRAR PROC
CALL SEPARADOR
LEA DX,MSG_IMPRI ;9
MOV AH,09H
INT 21H
CALL SEPARADOR
CALL ESPACO
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV CX,NALUNOS
MOV BP,0H
MOSTRAR2:
MOV AX,0H
MOV BH,0AH
MOV AL,NOTAS[BP] ;pegar a nota no indice de valor do bp
DIV BH
MOV BL,AH ;resto
MOV DL,AL
ADD DL,30H
MOV AH,05H ;para mostrar na impressora
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,05H
INT 21H
MOV DL,2DH
MOV AH,05H
INT 21H
INC BP
LOOP MOSTRAR2
FIM_MOSTRAR:
CALL ESPACO
CALL ENTER
RET
MOSTRAR ENDP
;mostrar odenado
;similar ao procedimendo anterior
;pega valores do vetor ordenado
;mostra na tela
MOSTRAR_ORDENADO PROC
CALL SEPARADOR
LEA DX,MSG_DECRE
MOV AH,09H
INT 21H
CALL SEPARADOR
CALL ESPACO
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV CX,0AH
MOV BP,0H
MOSTRAR_ORDENADO2:
MOV AX,0H
MOV BH,0AH
MOV AL,ORDNOTA[BP]
DIV BH
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,2DH
MOV AH,2H
INT 21H
INC BP
CMP CL,0H ;??????????
JE FIM_MOSTRAR
LOOP MOSTRAR_ORDENADO2
FIM_MOSTRAR_ORDENADO:
CALL ESPACO
CALL ENTER
RET
MOSTRAR_ORDENADO ENDP
;enter
;espera o usuario digitar algo
;depois continua
ENTER PROC
CALL SEPARADOR
LEA DX,MSG_CONT
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
RET
ENTER ENDP
;mp notas
;encontrar a melhor nota
;encontrar a pior nota
;salvar na variavel
MPNOTAS PROC
MOV CX,NALUNOS
MOV BP,0H
MOV BL,NOTAS[BP]
MOV MELHOR_NOTA,BL ;melhor nota como primeiro
MOV PIOR_NOTA,BL ;pior nota como primeiro
ANALISE:
MOV BL,NOTAS[BP]
MOV AL,MELHOR_NOTA
MOV AH,PIOR_NOTA
CMP BL,AL ;se bl e maior tem uma nova melhor nota
JAE MAIOR_NOTA
JMP CMP_MENOR
MAIOR_NOTA:
MOV MELHOR_NOTA,BL ;nova melhor nota passa a nota atual de bl
CMP_MENOR:
CMP BL,AH ;se bl e menor tem uma nova menor nota
JBE MENOR_NOTA
JMP SALTAR_NOTA
MENOR_NOTA:
MOV PIOR_NOTA,BL
SALTAR_NOTA:
INC BP ;proximo elemento do vetor
LOOP ANALISE
RET
MPNOTAS ENDP
;mostrar mp nota
;mostrar melhor nota
;mostrar pior nota
MOSTRAR_MPNOTAS PROC
CALL SEPARADOR
LEA DX,MSG_MELHOR_PIOR
MOV AH,09H
INT 21H
CALL SEPARADOR
CALL ESPACO
LEA DX,MSG_MNOTA
MOV AH,09H
INT 21H
MOV AX,0H
;mostrar a melhor nota
MOV BH,0AH
MOV AL,MELHOR_NOTA
DIV BH
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
CALL ESPACO
;mostrar pior nota
LEA DX,MSG_PNOTA
MOV AH,09H
INT 21H
MOV AX,0H
MOV BH,0AH
MOV AL,PIOR_NOTA
DIV BH
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
CALL ESPACO
CALL ENTER
RET
MOSTRAR_MPNOTAS ENDP
;quanta
;calcula a quantidade de aprovados
;e mostra na tela
QUANTA PROC
MOV BP,0H
MOV NUMERO_APROV,0H
MOV BH,NUMERO_APROV ;numero de aprovados
MOV CX,NALUNOS
CONTAR:
MOV BL,NOTAS[BP]
CMP BL,0AH ;notas maiores que 10
JAE CONTA
JMP SEM_QUANTA
CONTA:
INC BH
MOV NUMERO_APROV,BH
SEM_QUANTA:
INC BP
LOOP CONTAR
CALL SEPARADOR
LEA DX,MSG_NUM_APR
MOV AH,09H
INT 21H
CALL SEPARADOR
CALL ESPACO
LEA DX,MSG_NOTAPRO
MOV AH,09H
INT 21H
CMP BH,0AH ;se todos passaram
JE IGUAL10
MOV DL,NUMERO_APROV
ADD DL,30H
MOV AH,02H
INT 21H
CALL ESPACO
JMP FIMIGUAL10
IGUAL10:
MOV DL,31H
MOV AH,02H
INT 21H
MOV DL,30H
MOV AH,02H
INT 21H
CALL ESPACO
FIMIGUAL10:
CALL ENTER
RET
QUANTA ENDP
;primeira linha
;coloca o cursor na primeira linha
PRIMEIRA_LINHA PROC
MOV AX,0H
MOV BX,0H
MOV AH,02H
MOV DL,0H ;coluna 0
MOV DH,0H ;linha 0
MOV BL,0H ;pagina 0
INT 10H
RET
PRIMEIRA_LINHA ENDP
;ordena o vetor de notas
;usando algoritimo de selecao
ORDENACAO Proc
CALL MENSAGEM_PROCESANDO
MOV CX,NALUNOS
DEC CX ;porque comesamos apartir do indice 1
MOV BP,0h ;indice maior elemento
MOV AH,0h
MOV INDICE,AH
MOV BX,1h ;indice atual,comecar apartir do 1
PERCORRER:
MOV AX,0h
MOV AL,INDICE ;pegar valor do indice
MOV BP ,AX ;colocar em Bp ,que e indice menor elemento ja ordenado
INC AX ;adicionar 1 em ax
MOV BX,AX ;nao a nessecidade de compara indices iguais,comecar no proximo
MOV DL,NALUNOS
MOV Dh,0h ;garantir que dh esta em 0h
SUB DX,AX ;subtrair numero total de alunos pelo indice onde vai comecar a procurar
;nao a nesseciade de passar por partes do vetor que ja estao ordenados para encontrar o novo o maior elemento
ENCMENOR:
;passar pelo vetor e encontar o novo maior elemento
;bp tem inidice do maior elemento atual caso de inicio bp=0
;bx tem o indice atual da comparacoa com o vetor caso de inicio bx=1
MOV AH,ORDNOTA[BP] ;[0]000000000 no caso do inicio
MOV AL,ORDNOTA[BX] ;0[0]00000000
CMP AL,AH ;comparar indice atual com maior elemento caso for maior a uma troca
JAE TROCAR
JMP SEMTROCA ; caso nao sem troca
TROCAR:
MOV BP,BX ;bp passa a ser o valor de atual de bx que e o novo maior encontrado
SEMTROCA:
INC BX ;caso nao aja troca bx avanca para proxima posisao
DEC DL
CMP DL,0h ;continua procurando o maior caso dl nao for 0 ou seja nao chegou no fim do vetor
JNE ENCMENOR
;encontrou o maior,agora fazer as trocas de posisao o maior elemento de todos sera colocado o indice 0
TROCARPOS:
MOV AH,ORDNOTA[BP] ;bp tem o inidice do maior valor
MOV BX,0h
MOV Bl,INDICE ;indice guarda ate onde vetor ja foi ordenado,caso do inicio e 0 por ainda nao ordenou nada
MOV AL,ORDNOTA[BX] ;bx tem valor do inidice atual caso do inicio e 0
MOV ORDNOTA[BX],AH ;mover o valor do maior elemento para a posisao do inidice,(maior elemento do vetor e colocado no indice 0)
MOV ORDNOTA[BP],AL ;mover o valor do indice onde colocado maior elemento para o inidice onde o maior elemento estava
MOV AX,0h
MOV AL,INDICE
INC AL ;caso do inidice inical e 0 agora passa ser 1,proximo maior elemento sera colocado em indice 1
MOV INDICE, AL
LOOP PERCORRER ;e percorido ate passar por todos os alunos
CALL MOSTRAR_ORDENADO
RET
ORDENACAO ENDP
;soma media
;percorre todo vetor
;soma todas as notas
;divide pelo numero de alunos
;mostra na tela
SOMA_MEDIA PROC
CALL SEPARADOR
LEA DX,MSG_MEDIA_T
MOV AH,09H
INT 21H
CALL SEPARADOR
CALL ESPACO
MOV BP,0H
MOV CX,NALUNOS
MOV SOMA_TOTAL,0H
MOV AX,0H
SOMA:
MOV AL,NOTAS[BP]
ADD SOMA_TOTAL,AX
INC BP
LOOP SOMA
MOV BL,NALUNOS
MOV AX,SOMA_TOTAL
DIV BL
MOV MEDIA,AL
MOV RESTO_MEDIA,AH
MOSTRAR_MEDIA:
LEA DX, MSG_MEDIA
MOV AH,09H
INT 21H
MOV BL,0AH
MOV AX,0H
MOV AL,MEDIA
DIV BL
MOV BH,AH
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BH
ADD DL,30H
MOV AH,02H
INT 21H
;parte decimal
MOV DL,02CH ;virgula
MOV AH,02H
INT 21H
MOV DL,RESTO_MEDIA
ADD DL,30H
MOV AH,02H
INT 21H
CALL ESPACO
CALL ENTER
RET
SOMA_MEDIA ENDP
;localizar
;ultizado para pesquisar um aluno
;procurado pelo id
LOCALIZAR PROC
CALL SEPARADOR
LEA DX,MSG_PESQ_ALU2
MOV AH,09H
INT 21H
RECEBER_LOCALIZAR: