注册 登录
编程论坛 汇编论坛

朋友门给讲解下这个程序 谢谢了

情非得已 发布于 2011-04-26 22:48, 456 次点击
data segment
    grade   dw     88,75,95,63,98,78,87,73,90,60
    rank    dw     10 dup(?)
data   ends

code segment

main  proc  far
    assume cs:code,ds:data

start:
     push  ds
     sub   ax,ax
     push  ax
     mov   ax,data
     mov   ds,ax
     mov   di,10
     mov   bx,ax
loop:
     mov   ax,grade[bx]
     mov   dx,0
     mov   cx,10
     lea   si,grade
next:
     cmp   ax,[si]
     jg    no_count
     inc   dx
no_count:
     add   si,2
     loop  next
     mov   rank[bx],dx
     add   bx,2
     dec   di
     jne   loop
     ret
main   endp
   code  ends
      end   start
3 回复
#2
你们都要疼我哦2011-04-29 16:43
悲哀
#3
zaixuexi2011-04-29 22:48
1. 朋友门->朋友们,代码不会就算了,不要连字也不识.
2. 讲解如下
程序代码:
data segment                    ;数据段头
    grade   dw     88,75,95,63,98,78,87,73,90,60    ;一堆数据
    rank    dw     10 dup(?)                        ;也是一堆放数据的地方咯
data   ends                     ;数据段尾

code segment                    ;代码段头

main  proc  far                 ;main头,段间调用
    assume cs:code,ds:data      ;段关联

start:                          ;一个标号名字叫start
     push  ds                   ;ds入栈
     sub   ax,ax                ;ax等于0
     push  ax                   ;ax入栈       以上3句为retf到psp头铺垫
     mov   ax,data              ;ax等于data
     mov   ds,ax                ;ds等于ax等于seg data
     mov   di,10                ;di等于10
     mov   bx,ax                ;bx等于ax等于seg data,这句会对吗?
loop:                           ;可以用loop标号吗?你们老师怎么教的?
     mov   ax,grade[bx]         ;ax不知道等于什么
     mov   dx,0                 ;dx等于0
     mov   cx,10                ;cx等于10
     lea   si,grade             ;si等于0
next:                           ;一个标号名字叫next
     cmp   ax,[si]              ;不知道等于什么的ax和ds:[si]比较
     jg    no_count             ;大于跳转到名字叫no_count标号的地方
     inc   dx                   ;dx加上1
no_count:                       ;一个标号名字叫no_count
     add   si,2                 ;si加上2
     loop  next                 ;cx减掉1,cx大于0跳转到名字叫next标号的地方
     mov   rank[bx],dx          ;把dx的值放入ds:rank[bx]中去
     add   bx,2                 ;bx加上2
     dec   di                   ;di减掉1,用来干吗的,我没看出来?打酱油的么?
     jne   loop                 ;cx减掉1,cx大于0跳转到一个名字起的不合适的地方
     ret                        ;retf到psp头,通过CD 20返回
main   endp                     ;main尾
   code  ends                   ;代码段尾
      end   start               ;从start开始跑
#4
情非得已2011-05-04 23:26
回复 3楼 zaixuexi
hehe 一时疏忽
1