Ich möchte zwei Strings verketten, aber in meiner Ausgabe, anstatt die endgültige verkettete Zeichenfolge, bekomme ich eine Reihe von seltsamen Zeichen und Leerzeichen, vielleicht könnte mir jemand ein wenig helfen. Ich möchte das Ergebnis in S3 speichern. Hier ist der CodeAssembly verketten zwei Strings
DATA SEGMENT
STR1 DB "ENTER FIRST STRING HERE ->$"
STR2 DB "ENTER SECOND STRING HERE ->$"
STR3 DB "CONCATEnatedD STRING :->$"
STR11 DB "FIRST STRING : ->$"
STR22 DB "SECOND STRING: ->$"
s1 DB 20 DUP("$")
s2 DB 20 DUP("$")
s3 db 40 dup(?)
NEWLINE DB 10,13,"$"
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
lea dx,str1
mov ah,09h
int 21h
lea si,s1
l1: mov ah,01h
int 21h
mov [si],al
inc si
cmp al,31h
jne l1
dec si
lea dx,str2
mov ah,09h
int 21h
lea di,s2
l2: mov ah,01h
int 21h
mov [di],al
inc di
cmp al,32h
jnz l2
lea si,s3
lea di,s1
lea si,s3
lea di,s1
l3: mov al,[di]
mov [si],al
inc si
inc di
cmp al,31h
jnz l3
dec si
lea di,s2
l4: mov al,[di]
mov [si],al
inc si
inc di
cmp al,32h
jnz l4
lea dx,str3
mov ah,09h
int 21h
l5: mov dl,[si]
cmp dl,32h
jz l6
mov ah,02h
int 21h
inc si
jmp l5
l6:MOV AH,4CH
INT 21H
CODE ENDS
END START
ich die Lösung gefunden zu haben, hoffe, es ist gut ohne Fehler: Datensegment msg db 0Dh 0Ah "String1: $" msg2 db 0Dh 0Ah " string2: $“ rev db 0Dh 0Ah "Ergebnis:" $
buffer label byte
buffer2 label byte
str_maxlen db 255
str_length db 0
str_string db 255 dup(0)
str_string2 db 255 dup(0)
result db 255 dup('$')
num db 0
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
lea dx,msg
mov ah,09h
int 21h
lea dx,buffer
mov ah,0Ah
int 21h
mov cl,str_length
mov bh,cl
mov ch,0
lea si,str_string
lea di,result
op1: mov bl,[si]
mov [di],bl
inc di
inc si
loop op1
mov cl,bh
op3: dec si
loop op3
lea dx,msg2
mov ah,09h
int 21h
lea dx,buffer2
mov ah,0Ah
int 21h
mov cl,str_length
lea si,str_string
mov cl,str_length
mov ax,0
op2: mov al,[si]
mov [di],al
inc di
inc si
loop op2
lea dx,rev
mov ah,09h
int 21h
lea dx,result
mov ah,09h
int 21h
mov ah,4Ch
int 21h
code ends
end start
Warum halten Sie das Zeichen Vergleich für die Kopierschleife als Abbruchbedingung zu '31h' kopiert? '31h' repräsentiert das ASCII für die Ziffer' 1'. – lurker
Ich stimme zu schließen, weil ich glaube, dass dies eine Hausaufgabe ist und ich kann nicht sehen, wie OP sich bemüht hat, ihr Problem zu lösen. Vielleicht wurden sie von ihrem [ersten erfolgreichen Versuch einer billigen Lösung] (https://stackoverflow.com/questions/38824670/assembly-reverse-a-string) ermutigt? –
Das ist keine Hausaufgabe, nur ein Hobby, und ich frage hier als letztes Mittel, wenn ich keine Lösung finde. Und wer hat diese Art von Hausaufgaben im Sommer? Diejenigen, die Assembly studieren, tun dies in der Schule während der normalen Schulzeit nicht August. – user3848412