给下面的代码写个注释,同学找我帮忙的,可是我也不会,只能请前辈了,谢谢

DSEG SEGMENT
VAR DB 5,7,19H,23H,0A0H
N EQU $-VAR
DSEG ENDS
CSEG SEGMENT
ASSUMENT CS:CSEG,DS:DSEG
BG:MOV AX,DSEG
MOV DS,AX
MOV CX,N-1
MOV SI,0
MOV BH,VAR[SI]
JCXZ LAST
AGIN:INC SI
CMP BH,VAR[SI]
JAE NEXT
MOV BH,VAR[SI]
NEXT:LOOP AGIN
LAST:MOV,AH,4CH
INT 21H
CSEG ENDS
END BG

你这段汇编代码就是求出数组中的最大值。下边是注释,希望能够帮到你。

DSEG SEGMENT ;数据段
VAR DB 5,7,19H,23H,0A0H ;定义变量,你也可以看成在定义C语言中的一个数组,并且初始化
N EQU $-VAR ;测出长度(即:测出有几个变量或变量)
DSEG ENDS ;数据段结束
CSEG SEGMENT ;代码段
ASSUMENT CS:CSEG,DS:DSEG ;建立CS寄存器和代码段,DS寄存器和数据段的连接(你可以不用管为什么,若继续深入学习,自然会明白)
BG:MOV AX,DSEG ;这一句和下一句代码合起来的作用把代码段的首地址装入段寄存器DS,注意:不能直接把代码段的首地址给DS,必须用AX(或BX或CX或DX)中转一下。 BG是标志程序从什么地方开始,(即设置CS:IP)和最末的 END BG相对应.
MOV DS,AX
MOV CX,N-1 ;设置循环次数
MOV SI,0 ;初始化SI为0
MOV BH,VAR[SI] ;把数组中的第一个变量(相当于array[0])给 BH(BX寄存器的高8位)
JCXZ LAST ;如果CX等于0则跳转到LAST标记的地方继续执行程序(在此程序中的具体功能为检测数组是否为空,若为空,直接退出程序,否则继续往下做,求出数组中的最大值)
AGIN:INC SI ;循环标志
CMP BH,VAR[SI] ;比较(BH)的值和VAR[SI] ,相当于比较 array[ n-1 ]和array[n]
JAE NEXT ;若(BH)大于VAR[SI],则跳转到NEXT标记的地方继续执行程序
MOV BH,VAR[SI] ;把VAR[SI]赋给 BH
NEXT:LOOP AGIN ;循环,跳转到标记AGIN出继续执行程序。(LOOP指令和CX相连用)
LAST:MOV,AH,4CH ;这句和下一句合起来的功能是退出程序
INT 21H
CSEG ENDS ;代码段结束
END BG ;和标记BG相对应

用C语言写就是

#include<stdio.h>
int main()
{
int i,maxnum;

int array[5]={5,7,25,35,160};
maxnum=array[0];
for(i=2;i<5;i++)
{
if(maxnum>array[i])continue;

else maxnum=array[i];

}
return 0;

}

写了这么多,希望能够帮到你!
温馨提示:答案为网友推荐,仅供参考
相似回答