定义字符串数组
没有做过这类型的 所以不知道怎么去定义字符串数组
程序代码:
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