正文

汇编 分支程序设计2006-11-13 10:00:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hammers/20266.html

分享到:

实验内容:

在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。假设学生成绩在[90100]区间为优秀,在[80,90)区间为良好,在[70,80)区间为一般,在[60,70)区间为及格,在[0,60)区间为不及格,要求统计出不及格,及格,一般,良好和优秀的人数,分别送入NotpassedPassedGoodBetterBest字节单元。

1. 用普通的跳转语句实现上述功能。

2. 用地址表法和转移表实现。

*******************************************

DATASEG SEGMENT
 NOTPASSED DB 0
 PASSED DB 0
 GOOD DB 0
 BETTER DB 0
 BEST DB 0 
 SCORE DB 90,80,75,30,64,95 DUP(70)
DATASEG ENDS

CODESEG SEGMENT
 ASSUME DS:DATASEG,CS:CODESEG
START:
 MOV AX,DATASEG
 MOV DS,AX

 MOV BX,0
 MOV CX,100
AGAIN: CMP SCORE[BX],90       
 JB NEXT               
 INC BEST                    ;if >= 90 , Best!
 JMP DONE
NEXT: CMP SCORE[BX],80            ;If got here, must <90!
 JB NEXT1
 INC BETTER                  ;if >=80 , Better
 JMP DONE
NEXT1: CMP SCORE[BX],70            ;and so on......
 JB NEXT2
 INC GOOD
 JMP DONE
NEXT2: CMP SCORE[BX],60
 JB NEXT3
 INC PASSED                 ;Passed
 JMP DONE
NEXT3: INC NOTPASSED              ;Not passed
DONE: INC BX
 LOOP AGAIN 

 MOV AH,4CH                 ;Oh,mum,it has done,we need go home.
 INT 21H
CODESEG ENDS
 END START
 *********************************************************

DSEG SEGMENT
       NOTPASSED DB 0
       PASSED    DB 0
       GOOD      DB 0
       BETTER    DB 0
       BEST      DB 0
       SCORE     DB 100,90,88,98,85,82,78,45,92 DUP(90)
       AddrTbl   DW   Func0,Func1,Func2,Func3,Func4,Func5
DSEG ENDS


CSEG SEGMENT
        ASSUME  DS:DSEG,CS:CSEG
START:
      MOV AX,DSEG
      MOV DS,AX
    
      MOV SI,0
      MOV CX,100
AGAIN:
    MOV DL,10  
    MOV AL,SCORE[SI]
    CMP AL,60
    JB   func0
    SUB AL,50
    MOV AH,0
    DIV DL
    MOV BL,AL
    MOV BH,0
 shl bx,1
    JMP AddrTbl[BX] 

Func0:
     INC NOTPASSED
     JMP DONE

Func1:
     INC PASSED
     JMP DONE


Func2:
     INC GOOD
     JMP DONE


Func3:
     INC BETTER
     JMP DONE
 
Func4:
     INC BEST
     JMP DONE

Func5:
     INC BEST
     JMP DONE
DONE:
    INC  SI
    LOOP AGAIN


    MOV AH,4CH
    INT  21H
CSEG ENDS
     END START

 

*******************************************************

DATASEG SEGMENT
       NOTPASSED DB 0
       PASSED    DB 0
       GOOD      DB 0
       BETTER    DB 0
       BEST      DB 0
       SCORE     DB 100,70,88,45,96 DUP(90)
DATASEG ENDS


CODESEG SEGMENT
        ASSUME  DS:DATASEG,CS:CODESEG
START:
      MOV AX,DATASEG
      MOV DS,AX
      MOV CX,100
      MOV SI,0
     
AGAIN:
    MOV DL,10 
    MOV AL,SCORE[SI]
    CMP AL,60
    JB  Func0
    SUB AL,50
    MOV AH,0
    DIV DL
    MOV AH,0
    MOV BX,AX
    SHL AX,1
    ADD BX,AX
    ADD BX,OFFSET JmpTbl
    JMP BX


 JmpTbl:
         jmp    NEAR PTR func0
         jmp   NEAR PTR func1
         jmp    NEAR PTR func2
         jmp   NEAR PTR func3
         jmp   NEAR PTR func4
         jmp   NEAR PTR func5
        
       
func0:
     INC NOTPASSED
     JMP DONE
   
func1:
     INC PASSED
     JMP DONE
    
func2:
     INC GOOD
     JMP DONE
    

func3:
     INC BETTER
     JMP DONE
    
func4:
     INC BEST
     JMP DONE
    
func5:
     INC BEST
     JMP DONE
 
 DONE:
     INC SI
     LOOP AGAIN
      
    MOV AH,4CH
    INT  21H
CODESEG ENDS
     END START

 

阅读(3126) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册