定义字符串数组
没有做过这类型的 所以不知道怎么去定义字符串数组
2011-07-30 13:02
程序代码:COMMENT /
用选择排序法对6个字符串进行排序
/
include yxf.lib
Data SEGMENT
buffer DB 81
DB 0
DB 81 DUP("$")
str1 DB 81 DUP('$')
str2 DB 81 DUP('$')
str3 DB 81 DUP('$')
str4 DB 81 DUP('$')
str5 DB 81 DUP('$')
str6 DB 81 DUP('$')
array DW offset str1, offset str2,
offset str3, offset str4,
offset str5, offset str6
msg DB "Enter string:$"
Data ENDS
Stack SEGMENT Stack
DB 200 DUP(0)
Stack ENDS
Code SEGMENT
ASSUME CS:Code, SS:Stack, DS:Data, ES:Data
Begine:
mov ax, Data
mov ds, ax
mov es, ax
CALL Get_Input
CALL Deal_Proc
CALL Out_Input
Exit
COMMENT /
过程名:Deal_Proc
入口参数:
出口参数:
功能:rt
/
Deal_Proc PROC
push bp
mov bp, sp
push si
push di
push cx
push bx
push dx
mov si, offset array
mov cx, 6
loop_:
mov di, si
mov bx, cx
mov dx, word ptr [si];假设dx中存放着最大数
for_:
dec bx
jz next_
add di, 2
;cmp dx, word ptr [di]
mov ax, word ptr [di]
push ax
push dx
CALL strcmp;两个字符串进行比较
;返回值存放在ax中
cmp ax, 2
je for_
xchg dx, word ptr [di]
jmp for_
next_:
mov word ptr [si], dx
add si, 2
loop loop_
pop dx
pop bx
pop cx
pop di
pop si
mov sp, bp
pop bp
ret
Deal_Proc ENDP
COMMENT /
过程名:Get_Input
入口参数:
出口参数:
功能:录取字符串
/
Get_Input PROC
push bp
mov bp, sp
push si
push cx
push di
mov di, 0
mov cx, 6
loop_:
push cx
Print_String <offset msg>
Scanf_String <offset buffer>
Crlf
cmp cl, 0;表示没有接受到控制台的字符输入
je loop_
push si
mov ax, word ptr array[di]
push ax
CALL strcpy
add di, 2
pop cx
loop loop_
pop di
pop cx
pop si
mov sp, bp
pop bp
ret
Get_Input ENDP
COMMENT /
过程名:Out_Input
入口参数:
出口参数:
功能:输出字符串数组
/
Out_Input PROC
push bp
mov bp, sp
push si
push cx
mov cx, 6
lea si, array
loop_:
Print_String <word ptr [si]>
Crlf
add si, 2
loop loop_
pop cx
pop si
mov sp, bp
pop bp
ret
Out_Input ENDP
COMMENT /
过程名:strcmp
入口参数:栈参数
1、str1第一个字符串的首地址
2、str2第二个字符串的首地址
出口参数:
ax存放比较后的结果
str1 > str2 1
str1 = str2 0
str1 < str2 2
功能:比较两个字符串的大小
/
str1_len EQU word ptr [bp-2]
str2_len EQU word ptr [bp-4]
strcmp PROC
push bp
mov bp, sp
sub sp, 4;开辟4字节空间
push si
push di
push cx
mov si, word ptr [bp+6];str2
push si
CALL strlen
mov str2_len, ax
mov di, word ptr [bp+4];str1
push di
CALL strlen
mov str1_len, ax
cld;设置方向标志位
;先比较两个字符串的长度
mov cx, str1_len
cmp cx, str2_len
ja loop_dp
mov cx, str2_len;cx中存放的是最小的长度
loop_dp:
repe cmpsb
ja next_a
jb next_b
mov cx, str1_len
cmp cx, str2_len
ja next_a
jb next_b
mov ax, 0
jmp over_dp
next_b:
mov ax, 2
jmp over_dp
next_a:
mov ax, 1
jmp over_dp
over_dp:
pop cx
pop di
pop si
mov sp, bp
pop bp
ret 4
strcmp ENDP
COMMENT /
过程名:strlen
入口参数:栈顶
1.待计算字符串的首地址
出口参数:ax存放字符串的长度
功能:计算字符串的长度
/
strlen PROC
push bp
mov bp, sp
push si
mov ax, 0
mov si, word ptr [bp+4]
loop_:
cmp byte ptr [si], '$'
je quit
inc si
inc ax
jmp loop_
quit:
pop si
mov sp, bp
pop bp
ret 2
strlen ENDP
COMMENT /
过程名:strcpy
入口参数:栈参数
1.目的串首地址
2.源串首地址
3.cl 复制的个数
出口参数:无
功能:完成两个字符串的拷贝
/
strcpy PROC
push bp
mov bp, sp
push si
push di
push cx
mov ch, 0
mov si, word ptr [bp+6];
mov di, word ptr [bp+4];
cld;设置方向标志位
rep movsb
quit:
pop cx
pop di
pop si
mov sp, bp
pop bp
ret 4
strcpy ENDP
Code ENDS
END Begine
2011-07-30 13:04