汇编语言设计,急!

子程序设计
一.实验目的
掌握循环程序设计的方法(两重性循环结构)
掌握正确分配与使用寄存器。
二.实验内容与要求
以GRADE为首地址的10个字的数组中保存有学生成绩。建立一个10个字的RNAK 数组,并根据GRADE中的学生成绩将学生名次填入RANK数组中(提示:一个学生的名次等于成绩高于等于该学生的人数加1)。
寄存器分配情况说明如下:
AX 存放当前被测学生的成绩
BX 存放当前被测学生的相对地址指针
CX 内循环计数值
DX 存放当前被测学生的名次计数值
SI 内循环测试时的地址指针
DI 外循环计数值

麻烦帮我设计一个!

;Copyright:wangtianxu
;File name:rank.asm
;Description:建立学生名次表rank
STACK1 SEGMENT
DW 32 DUP('S')
STACK1 ENDS
DATA SEGMENT
GRADE DW 89,90,60,57,78,83,96,99,73,89 ;数组
RANK DW 10 DUP(?) ;预留空间
CN DW ($-RANK)/2 ;元素个数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
MAIN PROC FAR
START:
MOV AX,DATA
mov DS,AX
MOV CX,10;设置循环次数为10
MOV BX,0;BX存放当前被处理的数据在数组中的索引值,初始化为0
CYCLE: ;外层循环起始
PUSH CX;保存循环计数(下面的POP CX用来恢复这个记数)
MOV AX,GRADE[BX];取出第BX个学生的成绩
MOV DX,0;存放当前处理的学生的名次,初始化为0
LEA SI,GRADE;取数组的起始片仪偏移值
MOV CX,10
NEXT:;内层循环
CMP AX,[SI];AX与[SI]比较
JG NOCOUNT;如果AX大,则跳过INC DX
INC DX;AX不大于DS:[SI],则DX自增一次
NOCOUNT:
ADD SI,2;使SI加2,以便指向下一个被比较的对象
LOOP NEXT;内层循环,CX不为0则跳到NEXT
MOV RANK[BX],DX;DX是第BX个学生的排名
POP CX;恢复外层循环的次数
ADD BX,2;指向下一个被处理的学生的成绩
LOOP CYCLE;外循环
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END START

参考的C语言代码(译成汇编与上面的代码不全相同,但是算法一样的)里面的变量为了和上面的汇编比较,都是用寄存器名命名的,但是请注意还是有许多区别,不要弄混了。
int grade[10] = {88,75,95,63,98,78,87,73,90,60};
int rank[10];
void main()
{
int ax,si,bx=0,dx;
int cx;//循环计数。为了模拟上面的CX,这里就只用一个变量cx。
int temp;
for(cx = 10;cx != 0; cx--)
{
temp = cx;
ax = grade[bx];
si = 0;
for(cx = 10;cx != 0; cx--) //内层循环,cx应该被初始化为10,这样ax才能和所有的学生比较.
{
if(ax<=grade[si]) //和自己比较时相等,满足,故dx自加1,这样循环结束时dx就是“比自己成绩高的人数+1”了,也就是名次。
dx++;
si += 1;
}
rank[bx] = dx;
bx += 1;
cx = temp;
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

急,高分!设计汇编语言,输入年份,计算出岁数和生肖。
设计汇编语言程序,实现输入年份计算岁数和生肖的功能。程序使用MASM5.0编译通过。程序流程如下:1. 显示“请输入年份:”,等待用户输入。2. 通过`IN_NUM`子程序接收用户输入的年份,分段处理并存储。3. 计算输入年份与当前年份的差值,获取岁数。4. 判断岁数与生肖对应关系,显示生肖。5. 特殊处理:...

汇编语言程序设计分为那几个步骤?
汇编语言程序设计分为六个步骤,它们分别为拟定任务书、建立数学模型、建立算法、绘制程序流程图、编制汇编语言源程序和上机调试。在程序设计初期,拟定任务书明确了程序的目标和需求,是整个程序设计过程的起点。接着,建立数学模型帮助开发者理解问题的本质,将问题抽象化,便于后续步骤的进行。紧接着,建立...

简单的汇编语言程序设计!加急!
MOV 32H, 30H MOV A, 30H CLR C SUBB A, 31H ;(30H)-(31H)JC EXIT ;不够减转移 MOV 32H, 31H ;否则31H才是小数 EXIT:END --- 2. 将片内RAM单元中 30H~37H 的数据送到片外RAM的 40H~47H。MOV R0, #30H MOV R1, #40H MOV R2, #8 LOOP:MOV ...

汇编语言程序设计步骤 有那几步
汇编语言程序设计步骤:1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分数已存入计算机内存.1、 分析问题 根据条件、特点、规律 →数学...

汇编语言程序设计
1. 串操作指令、处理器控制指令-位控制指令 在某一字符串中搜寻是否有字符A,若有,则把搜索次数记录下来,送到BX中;若无,则将BX清0。设字符串起始地址偏移量为00H,字符串长度为n。MOV DI,0000H \/\/字符串初始地址放入寄存器DI中 MOV CX,n \/\/字符串长度放入CX中 MOV AL,'A' \/\/要...

汇编语言是一种什么程序设计语言
汇编语言是一种工具程序设计语言,用于将汇编语言源程序转换为机器语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和...

汇编语言 子程序设计
在子程序中将AX中的值以十六进制形式显示。=== DATA SEGMENT D1 DW 13276 ;数: 0~65535 DATA ENDS ;--- CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX ;--- MOV AX, D1 ;取来数字.CALL DISP_AX MOV DL, 'H'MOV AH, 2 INT 2...

汇编语言程序设计题目,在线等答案!!!急!
MOV AL, A ;取来A AND AL, 00001111B MOV CL, 4 SHR AL, CL ;左移4位.MOV CL, AL MOV AL, B ;取来B AND AL, 00001111B ADD AL, CL ;合成.MOV C, AL ;保存.END ;--- 15.比较两个变量A和B的大小,在屏幕上显示比...

8088·8086汇编语言程序设计内容简介
汇编语言是一种直接与计算机硬件交互的语言,特别适合于微型计算机系统的开发和过程控制。在当今,8088\/8086和80×86系统计算机被广泛应用,因此,《8088\/8086汇编语言程序设计》这部教材将焦点放在了这一系统上,作为学习的基础内容。该书旨在提供全面的教学,特别强调了由易到难的学习路径和实例驱动的方法。

汇编语言程序设计中使用哪种软件工具
在汇编语言程序设计中,选择哪种软件工具主要取决于你的需求和平台。以下是几种常用的工具:1. MASM,由微软公司提供的x86汇编开发环境,它具有可视化界面,便于在Windows下进行开发,速度较快,支持80x86和Win32Asm,是Windows下开发者的首选工具。2. NASM,是跨平台的80x86和x86-64汇编语言编译程序,旨在...

相似回答