如何在'<carriage return =“”> <line feed =“”>'结尾的字符串?

时间:2019-05-04 20:53:02

标签: assembly x86-16

我应该在不使用字符串指令的情况下比较8086汇编中的两个字符串。到目前为止,一切都很好。我设法找到了一些与之接近的东西,但是作业还提到必须以=(0x0d,0x0a)结尾的字符串。我不确定如何执行此操作,也不确定我已经执行的代码是否可以执行此操作。

我尝试在互联网上和一些文档中进行搜索,但是我的知识水平太低或根本找不到适当的解释。

这是代码:

  DATA SEGMENT
        STR1 DB "ENTER FIRST STRING HERE ->$"
        STR2 DB "ENTER SECOND STRING HERE ->$"
        STR11 DB "FIRST" 13, 10 "STRING : ->$"
        STR22 DB "SECOND STRING: ->$"

        INSTR1 DB 20 DUP("$")
        INSTR2 DB 20 DUP("$")
        NEWLINE DB 10,13,"$"
        N DB ?
        S DB ?
        MSG1 DB "BOTH STRING ARE SAME$"
        MSG2 DB "BOTH STRING ARE DIFFERENT$"

  DATA ENDS

  CODE SEGMENT

        ASSUME DS:DATA,CS:CODE
  START:

        MOV AX,DATA
        MOV DS,AX

        LEA SI,INSTR1
        LEA DI,INSTR2

  ;GET STRING
        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,0AH
        MOV DX,DI
        INT 21H


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


  ;PRINT THE STRING

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

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

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

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

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

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

  ;STRING COMPARISON
        MOV BX,00

        MOV BL,INSTR1+1
        MOV BH,INSTR2+1

        CMP BL,BH
        JNE L1

        ADD SI,2
        ADD DI,2

      L2:MOV BL,BYTE PTR[SI]
        CMP BYTE PTR[DI],BL
        JNE L1
        INC SI
        INC DI
        CMP BYTE PTR[DI],"$"
        JNE L2

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

        JMP L5

      L1:MOV AH,09H
        LEA DX,MSG2
        INT 21H



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

        MOV AH,4CH
        INT 21H


  CODE ENDS
  END START

1 个答案:

答案 0 :(得分:1)

db "foo", 13, 10, "$"

您已经有一个db 10,13, "$"的换行符。

这是0xa, 0xd(与通常的DOS顺序相反,但是如果分别处理它们并垂直和水平移动光标,则效果相同。)