我真的是汇编语言的初学者。我对语法知之甚少。我在网上学习它,但我无法很好地理解它。我发现一个样本问题需要试验,但不能真正理解如何去做。更大,小于或等于汇编语言?
这里就是你给出个字符的两个字符串,这是我们应该称其为问题
和B. A为最多5个字符长和B最长255个字符。编写一个汇编语言程序,它将计算字符串B中字符串A的出现次数,并将结果留给AL。因此,如果A是字符串“job”而B是字符串“job I get a 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
听起来就像你试图编程一个字符串搜索,在汇编。有很多方法可以做到这一点。建议你从天真的字符串搜索开始https://en.wikipedia.org/wiki/String_searching_algorithm –
(假设为x86/64)CMP(比较)指令将设置标志寄存器中的各种标志..然后,您可以使用条件 - 说明,其行为取决于标志。明显的(非效率的)例子是条件跳转:jz(jump-if-zero),jnz(跳转if-not-zero),ja(跳转if-above),jb(跳转if-below),jl (跳 - 如果更少),jg(跳 - 如果 - 更大)等等。还有条件 - 电影。 – ABuckau