Ich versuche, ein Programm zu machen, wo der Benutzer eine Eingabe eingeben muss, zum Beispiel: Hello World
und erhalten eine Ausgabe: 'DLROw OLLEh'. Hier ist mein ProgrammMontage x86 Umkehrsatz Programm
org 100h
include emu8086.inc
.DATA
STR1 DB 0DH, 0AH, 'Input: $'
STR2 DB 0DH, 0AH, 'Output: $'
Nl DB 0Dh, 0Ah,'$'
.CODE
START:
MOV AX, @DATA
MOV DS, AX
DISP:
LEA DX,STR1
MOV AH,09H
INT 21H
MOV CL,00
MOV AH,01H
READ:
INT 21H
MOV BL, AL
PUSH BX
INC CX
CMP AL, 0DH
JZ DISPLAY
CMP AL, 'A' ; < then A
JB NotALetter
CMP AL, 'Z' ; > then Z
JA AGAIN ; repeat again
JMP CONTINUE1
AGAIN:
CMP AL, 'a' ; < then a
JB NotALetter
CMP AL, 'z' ; > then z
JA NotALetter
CONTINUE1:
JMP READ
DISPLAY:
LEA DX, STR2
MOV AH, 09h
INT 21H
LEA DX, NL
MOV AH, 09h
INT 21h
POP BX ; pop enter key
ANS:
MOV AH, 02h
POP BX ; pop the character
CMP BL, 'a' ; check if its in upper case
JB toLower ; if yes then jmp to toLower
SUB BL, 32 ; if not in upper case then convert to upper case
JMP CONTINUE2
toLower:
ADD BL, 32 ; convert to lower case
CMP BL, 20h
;SUB BL, 32
CONTINUE2:
MOV DL, BL
INT 21H
LOOP ANS
JMP EXIT ; if everything is fine jmp to exit
NotALetter:
printn
print "The input character is not a letter."
EXIT:
hlt
.EXIT
END START
ich jede Eingabe eingeben kann, aber sobald ich ein beliebiges Symbol eingeben, bin ich eine Nachricht bekommen, dass dies ein Symbol ist, dann Programm beendet, während ich die gleiche Ausgabe erhalten möchten, aber immer noch erlauben um ein Leerzeichen einzugeben. Ich bin wirklich neu in Assembly und außerdem habe ich, während ich versuchte, alles herauszufinden, noch mehr verloren.
Wenn ich JB NotALetter
Kommentar und JA NotALetter
, mein Raumzeichen wird @
wahrscheinlich, weil ich 20 mit der ASCII hex
Nummer bin hinzufügen. Kann jemand bitte helfen, dieses Problem zu lösen?
Umm, statt eine Fehlermeldung zu drucken, gehen Sie vielleicht zu 'CONTINUE2', so dass es unverändert weitergegeben wird? Haben Sie diesen Code selbst geschrieben? Du scheinst nicht zu verstehen, wie es funktioniert ... – Jester
@Jester Du hast recht. Ich habe bereits vor einer Woche eine ähnliche Frage gestellt [link] (https://stackoverflow.com/questions/47706414/assembly-emu8086-reversing-a-string). Ich versuche herauszufinden, wie es funktioniert, aber ich verstehe einfach nicht, wie die Montage funktioniert. Im Grunde lerne ich, indem ich etwas mache und versage ... Danke für deine Zeit –
Vielleicht verstehe ich die Frage nicht. Welchen Input haben Sie verwendet, welche Outputs haben Sie erwartet und welche Outputs haben Sie stattdessen bekommen? – interjay