Ich bin wirklich ein Anfänger in der Assemblersprache. Ich habe sehr wenig Kenntnis von der Syntax. Ich habe es im Internet studiert, aber ich kann es nicht gut verstehen. Ich habe ein Beispielproblem zum Experimentieren gefunden, kann aber nicht wirklich verstehen, wie es geht.Größer, weniger als oder gleich in der Assemblersprache?
hier ist das Problem
Sie zwei Zeichenketten angegeben werden, die wir als A beziehen und B. A ist höchstens 5 Zeichen lang sein und B höchstens 255 Zeichen lang sein. Schreiben Sie ein Assemblerprogramm, das die Anzahl der Vorkommen der Zeichenkette A in der Zeichenkette B zählt, wobei das Ergebnis AL bleibt. Wenn also A die Zeichenfolge "job" und B die Zeichenfolge "job I get a job" ist, sollte Ihr Programm 2 in AL belassen.
bisher kann ich nur ausdrucken und strings anzeigen. Wie löse ich das Problem, das mathematische Logik beinhaltet?
if AL > 7, display “Greater than Seven!”,
if AL < 7, display “Less than Seven!”,
if AL = 7, display “Equal to Seven!”.
Edit:
Ich habe einen Beispielcode, sondern nur für Zeichen. Wie ersetze ich es zu Zeichenkette?
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
Klingt, als ob Sie versuchen, eine String-Suche in Assembly zu programmieren. Es gibt viele Möglichkeiten, dies zu tun. Schlagen Sie vor, dass Sie mit der naiven String-Suche beginnen https://en.wikipedia.org/wiki/String_searching_algorithm –
(vorausgesetzt, x86/64) Eine CMP-Anweisung (compare) setzt verschiedene Flags im Flags-Register .. Sie können dann bedingte- Anweisungen, deren Verhalten von den Flags abhängt. Offensichtliche (nicht effiziente) Beispiele sind die bedingten Sprünge: jz (Sprung-wenn-Null), jnz (Sprung-wenn-nicht-Null), ja (Sprung-wenn-oben), jb (Sprung-wenn-unten), jl (jump-wenn-weniger), jg (jump-wenn-größer) usw. Es gibt auch Conditional-MOVes. – ABuckau