我真的是汇编语言的初学者。我对语法知之甚少。我在网上研究它但我无法理解它。我发现了一个样本问题需要进行实验,但无法真正理解如何去做。
这是问题
您将获得两个字符串,我们将其称为A和B. A最多5个字符,B最多255个字符。编写一个汇编语言程序,它将计算字符串B中字符串A的出现次数,并将结果保留为AL。因此,如果A是字符串“job”而B是字符串“job I job”,那么你的程序应该在AL中留下2。
到目前为止,我只能打印并显示字符串。如何解决涉及数学逻辑的问题?
if AL > 7, display “Greater than Seven!”,
if AL < 7, display “Less than Seven!”,
if AL = 7, display “Equal to Seven!”.
编辑:
我有一个示例代码但仅适用于字符。如何将其替换为字符串?
DATA SEGMENT
MSG1 DB 10,13, 'ENTER ANY STRING : - $'
MSG2 DB 10,13, 'ENTER ANY CHARACTER : -$'
MSG3 DB 10,13, ' $'
MSG4 DB 10,13, 'NO CHARACTER FOUND IN THE GIVEN STRING $'
MSG5 DB ' CHARACTER(S) FOUND IN THE GIVEN STRING $'
CHAR DB ?
COUNT DB 0
P1 LABEL BYTE
M1 DB OFFH
L1 DB ?
P11 DB OFFH DUP ('$')
DATA ENDS
DISPLAY MACRO MSG
MOV AH, 9
LEA DX, MSG
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:COD,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
DISPLAY MSG1
LEA DX,P1
MOV AH,0AH
INT 21H
DISPLAY MSG2
MOV AH,1
INT 21H
MOV CHAR,AL
DISPLAY MSG3
LEA SI, P11
MOV CL,L1
MOV CH,0
CHECK:
MOV AL,[SI]
CMP CHAR,AL
JNE SKIP
INC COUNT
SKIP:
INC SI
LOOP CHECK
CMP COUNT, 0
JE NOTFOUND
DISPLAY MSG3
MOV DL,COUNT
ADD DL,30H
MOV AH,2
INT 21H
DISPLAY MSG5
JMP EXIT
NOT FOUND:
DISPLAY MSG4
EXIT: MOV AH, 4CH
INT 21H
CODE ENDS
END START
答案 0 :(得分:2)
执行此操作的有效方法是使用
搜索B中A的第一个字符 repne scasb
如果找到匹配项,那么你可以使用A进行B和B中当前点的字符串比较。
repe cmpsb
我假设您有一份指南,解释这些指令如何使用寄存器。
有一种更快的方法来搜索字符串中的单个字符,使用一个循环中具有相同值的4(或8)个字节的寄存器,但是这个例子过于复杂程序