| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 948 人关注过本帖
标题:定义字符串数组
只看楼主 加入收藏
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
结帖率:96.55%
收藏
 问题点数:0 回复次数:1 
定义字符串数组
没有做过这类型的  所以不知道怎么去定义字符串数组
搜索更多相关主题的帖子: 字符串 
2011-07-30 13:02
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
下面给一个自己敲的 如果有更好的组织方法 请指导下
程序代码:
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
快速回复:定义字符串数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054698 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved