Assembly 如何在';中结束字符串&书信电报;回车>&书信电报;线路馈电>';?

Assembly 如何在';中结束字符串&书信电报;回车>&书信电报;线路馈电>';?,assembly,x86-16,Assembly,X86 16,我应该比较8086汇编中的两个字符串,而不使用字符串指令。到现在为止,一直都还不错。我设法找到了与此类似的内容,但作业还提到必须在=(0x0d,0x0a)中结束字符串。我不知道该怎么做,也不知道我的代码是否已经做到了这一点 我曾尝试在互联网上搜索过一些资料,但要么我的知识水平太低,要么就是没有找到合适的解释 代码如下: DATA SEGMENT STR1 DB "ENTER FIRST STRING HERE ->$" STR2 DB "ENTER SE

我应该比较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
db“foo”,13,10,“$”

您已经有了一个带有
db 10,13,“$”
的新行


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

首先,重新考虑所有包含
INSTR1+…
的指令,并使用
SI
DI
作为索引基来替换它们。您确实使用
LEA-SI,INSTR1设置了
SI
DI
;LEA DI,INSTR2
出于某种原因。。。原因是你需要它们来建立索引。IIRC
SI
DI
也保留在
int21h
调用中,因此它们是作为字符串指针的好选择。