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