编制一程序,要求设置10个学生成绩,并存放于10字节的GRADE数组中,其中GRADE+N保存学号N+1的学生成绩。然后根据GRADE中的学生成绩,把学生名次填入10字节的RANK数组中,其中RANK

   编制一程序,要求设置10个学生成绩,并存放于10字节的GRADE数组中,其中GRADE+N保存学号N+1的学生成绩。然后根据GRADE中的学生成绩,把学生名次填入10字节的RANK数组中,其中RANK+N的内容是学号为N+1学生的名次。再按学号顺序和学生名次顺序分别把学生成绩

data segment
        ;input data segment code here
	
	GRADE DB 04H,05H,03H,30H,29H,26H,27H,31H,35H,39H
	RANK  DB $-GRADE DUP(?)
	TEMP DB ?
      ORGINAL DB "原始数据为:$"
      destiny DB "排序后数据为:$"	
data ends
stack segment
        ;input stack segment code here
stack ends
code segment
    assume cs:code,ds:data,ss:stack
start:
    mov ax,data
    mov ds,ax
    
      ;程序代码
      call COPY
      MOV DX,OFFSET ORGINAL
      MOV AH,09H
      INT 21H
      CALL ENTER_
      CALL SHOW
      MOV DL,0AH
      MOV AH,02H
      INT 21H
      CALL SORT  
      MOV DX,OFFSET DESTINY
      MOV AH,09H
      INT 21H
     CALL ENTER_
      CALL SHOW
    mov ah,4ch
    int 21h
    
    ;排序函数
    SORT PROC NEAR
    LEA DI,RANK
    LEA SI,RANK
    ADD SI,9
   LOOP1:
     CMP SI,OFFSET RANK
     LEA DI,RANK
     JB STOP
    LOOP2:   
     CMP DI,SI
     JNB BREAK
     MOV AL,BYTE PTR[SI]
     CMP AL,[DI]
     JNB CONTINUE
     MOV BYTE PTR TEMP,AL
     MOV AL,BYTE PTR [DI]
     MOV BYTE PTR [SI],AL
     MOV AL,BYTE PTR TEMP
     MOV BYTE PTR[DI],AL
     CONTINUE:
     INC DI
     JMP LOOP2
     BREAK:
     DEC SI
     JMP LOOP1 
     STOP:
    RET
    SORT ENDP
    
    ;复制 
    COPY PROC NEAR
      ;input code segment code here
    LEA SI ,GRADE
    LEA DI,RANK
    MOV CX ,10
 NEXT:
    MOV AL,BYTE PTR[SI]
    MOV BYTE PTR[DI],AL
    INC SI
    INC DI
    LOOP NEXT
    RET
    COPY ENDP
  ;输出目标数组中的值
    SHOW PROC NEAR
     MOV BH,10
    LEA SI, RANK
   PRINT: 
    MOV BL,BYTE PTR[SI]
    MOV DL,BL
    AND DL,0F0H;
    MOV CL,4
    ROR DL,CL
    OR DL,30H
    MOV AH,02H
    INT 21H
    MOV DL,BL
    AND DL,0FH
    OR DL,30H
    MOV AH,02H
    INT 21H
    MOV DL,09H
     MOV AH,02H
    INT 21H
    INC SI
    DEC BH
    JNZ PRINT
    RET
    SHOW ENDP
    ENTER_ PROC NEAR
     MOV DL,0DH
      MOV AH,02H
      INT 21H 
      MOV DL,0AH
      MOV AH,02H
      INT 21H
    RET
    ENTER_ ENDP
code ends
end start
 
程序运行结果:



分支程序设计,循环程序设计,子程序结构 1、练习逻辑运算指令、比较指令和条件转移指令的功能、用法以及与标志位的关系和可用的寻址方式 2、用地址表法,完成下面要求的多分支程序的设计。根据MODE单元的模式字(0-7)分别转向L0-L7标号处执行。L0-L7处分别完成显示‘0’-‘7’字符。 当MODE=0时,转L0标号,完成显示‘0’ 当MODE=1时,转L1标号,完成显示‘1’ 当MODE=2时,转L2标号,完成显示‘2’ 当MODE=3时,转L3标号,完成显示‘3’ 当MODE=4时,转L4标号,完成显示‘4’ 当MODE=5时,转L5标号,完成显示‘5’ 当MODE=6时,转L6标号,完成显示‘6’ 当MODE=7时,转L7标号,完成显示‘7’ 3、编制程序实现如下操作: 设有10个学生成绩,分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并存放于S5、S6、S7、S8、S9、S10单元。 实验六: 1. 请编写一程序,从附加一个未排序的字数组中,找出最大数和最小数分别存放在AX 和BX寄存器。 2. 以GRADE为首地址的10个字的数组中保存学生成绩。建立一个10个字的RNAK 数组,并根据GRADE学生成绩学生名次填入RANK数组中(提示:一个学生名次等于成绩高于等于该学生的人数加1)。 寄存器分配情况说明如下: AX 存放当前被测学生成绩 BX 存放当前被测学生的相对地址指针 CX 内循环计数值 DX 存放当前被测学生名次计数值 SI 内循环测时的地址指针 DI 外循环计数值 3、数组DATAX,其数据排列规律是:头三项是0,0,1,以 每项的值均是前三项之和。将项值小于等于2000以前的各项数据填入数组DATAX。 算法: n≥ 4时: ① an=an-1+an-2+an-3 ② an=2an-1—an-4 要求:按上述两种算法编程 4、从DATA_BUF(1000H)开始存放50个字节数据,编写程序将这些数据由小到大排序,排序后的数据仍放在该区域要求原始数据在源程序给出,排序前后的数据以每行10个的格式显示在屏幕上。 5、测量一字符串长度,并用十六进制数显示之
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值