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
这个。。。看了你的代码有点头痛!
你这样问问题,简直是一点都不负责。把汇编语言的基本架构弄懂了才行啊。
代码分两段:
1、数据段,定义一些常量、变量(如果你学过高级语言,就应该明白),很简单,只是定义的格式不同,而且有了一些讲究(比如字符串的后面都带一个“$”标识字符串结尾),有初始值的写初始值,没初始值的,写默认值“?”。
2、代码段,就是高级语言里的函数体之类的。你的这段程序首先定义了一段主程序(main),也就是入口程序,然后在main体里做初始化,然后调用别的函数,实现具体的功能。
3、代码段中还有别的几个函数,proc明确的标识了这个定义。
具体的代码做什么的,你应该具体的问。