定义字符按字母顺序排列的单词

时间:2017-03-18 15:46:31

标签: assembly x86-16 emu8086

我正在尝试定义字符串中的哪些单词按字母顺序排序,而必须循环遍历每个整个字符串并比较每个字符位置。我想我应该创建一个字母表字符串,然后使用一些汇编函数将它与我的字符串中的每个单词进行比较,但现在我不知道如何处理它。

我写了一些代码来从控制台获取字符串:

DATA SEGMENT
    STR1     DB "enter your sring:$"
    STR2     DB "my string is:$"
    INSTR1   DB 250 DUP("$")
    NEWLINE  DB 10,13,"$"
    ALPHABET DB "abcdefghijklmnopqrstuvwxyz"  
DATA ENDS

CODE SEGMENT
    ASSUME DS:DATA, CS:CODE
START:    
    MOV AX,DATA
    MOV DS,AX

    LEA SI,INSTR1

    MOV AH,09H
    LEA DX,STR1
    INT 21H

    MOV AH,0AH
    MOV DX,SI
    INT 21H


    MOV AH,09H
    LEA DX,NEWLINE
    INT 21H

    MOV AH,09H
    LEA DX,STR2
    INT 21H

    MOV AH,09H
    LEA DX,INSTR1+2
    INT 21H

    MOV AH,09H
    LEA DX,NEWLINE
    INT 21H
CODE ENDS
END START

请给我一些建议:
我该怎么做?

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用函数01h而不是0Ah。基本上你是一次遍历输入的一个字符,但它是在输入时完成的。

Loop: mov     cl, al                  ; Move previously read character
      mov     ah, 1
      int     21h
      sub     cl, al                  ; Carry set means we are in ascending order
      ......
      jc      Loop

显然需要做更多的逻辑,但是在源头进行分析消除了指向缓冲区的开始并遍历它的需要。 Point是这样或那样的,字符串/输入中的下一个字符需要与前一个字符进行比较。