首页 新闻 会员 周边 捐助

汇编 请求解释程序

0
悬赏园豆:100 [已关闭问题] 关闭于 2012-06-29 17:16

i这是一个输入人名然后排序输出,因为小菜鸟,想学习汇编,请求解释一下

Data segment
   namepar      label   byte
   maxnlen      db  21
   namelen      db  ?
   namefld      db 21 dup(?)
   crlf         db 13,10,'$'
   endaddr      dw ?
   messg1       db  'name?','$'
   messg2       db 'sorted names',13,10,'$'
   namectr      db  0
   nametab      db  30  dup (20 dup(' '))
   namesav      db  20 dup (?),13,10,'$'
   swapped      db  0
Data ends

Code segment
  main  proc far
assume cs:code,ds:data,es:data
start:  push  ds
        mov  ax,0
        push  ax
        mov  ax,data
        mov  ds,ax
        mov  es,ax
        cld
        lea   di,nametab
a20loop: 
        call   b10read
        cmp  namelen,0
        jz    a30
        cmp  namectr,30
        je    a30
        call   d10stor
        jmp  a20loop
a30:    cmp  namectr,1
        jbe   a40
        call   g10sort
        call   k10disp
a40:    mov  ax,4c00h
        Int    21h
  Main endp
    b10read  proc  near
        mov   ah,09
        lea   dx ,messg1
        int   21h
        mov  ah,0ah
        lea  dx,namepar
        int  21h
        mov  ah,09
        lea  dx,crlf
        int  21h
        mov  bh,0
        mov  bl ,namelen
        mov  cx,21
        sub  cx,bx
b20:   mov  namefld[bx],20h
       inc  bx
       loop  b20
       ret
       b10read  endp
       d10stor  proc  near
       inc  namectr
       cld
       lea  si,namefld
       mov  cx,10
       rep  movsw
       ret
       d10stor  endp
       g10sort  proc near
       sub  di ,40
       mov  endaddr,di
g20:   mov  swapped,0
       lea  si,nametab
g30:    mov  cx,20
        mov  di,si
        add  di,20
        mov  ax,di
               
       mov  bx,si
       repe  cmpsb
       jbe   g40
       call  h10xchg
g40:    mov  si,ax
       cmp  si,endaddr
       jbe   g30
       cmp  swapped,0
       jnz   g20
       ret
       g10sort  endp
       h10xchg   proc  near
       mov  cx,10
       lea   di , namesav
       mov  si,bx
       rep   movsw
       mov  cx,10
       mov  di,bx
       rep   movsw
       mov  cx ,10
       lea   si,namesav
       rep   movsw
       mov  swapped,1
       ret
 h10xchg    endp
          
 k10disp   proc  near
       mov  ah,09
       lea  dx,messg2
       int  21h
       lea  si,nametab
k20:   lea  di,namesav
       mov  cx,10
       rep movsw
       mov ah,9
       lea dx, namesav
       int 21h
       dec namectr
       jnz  k20
       ret
 K10disp   endp
code ends
end start   

owner_hzh的主页 owner_hzh | 初学一级 | 园豆:6
提问于:2012-06-10 15:03
< >
分享
所有回答(1)
0

这个。。。看了你的代码有点头痛!

你这样问问题,简直是一点都不负责。把汇编语言的基本架构弄懂了才行啊。

代码分两段:

1、数据段,定义一些常量、变量(如果你学过高级语言,就应该明白),很简单,只是定义的格式不同,而且有了一些讲究(比如字符串的后面都带一个“$”标识字符串结尾),有初始值的写初始值,没初始值的,写默认值“?”。

2、代码段,就是高级语言里的函数体之类的。你的这段程序首先定义了一段主程序(main),也就是入口程序,然后在main体里做初始化,然后调用别的函数,实现具体的功能。

3、代码段中还有别的几个函数,proc明确的标识了这个定义。

 

具体的代码做什么的,你应该具体的问。

无之无 | 园豆:5095 (大侠五级) | 2012-06-10 21:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册