Alrik Wegner
Newbie
- Registriert
- März 2019
- Beiträge
- 2
Hallo, ich bin neu hier!
Ich bekomme es einfach nicht hin, eine Batch zu schreiben, die die Folgende Aufgabe erfüllt.
Ich habe schon diverse Foren & Seiten durchsucht und immer nur Teillösungen gefunden, die aber weitere Probleme gebracht haben, sodass es nie ganz funktioniert hat.
Folgende Befehle stehen in Dateien, die übersetzt werden sollen.
Übersetzt werden soll das ganze dann nach diesem Schema:
[val] steht für den Wert, der hinter dem Befehl steht und das "+" dient hier nur als Platzhalter. Letztendlich soll dann aus dem Quellcode dann etwas in diese Richtung in einer Textdatei gespeichert werden: 000304f7 00100003 000309ff 000700f9 000c0057 00060a07 00...
Die jeweils 8-stelligen Hexadezimal-Werte können durch Leerzeichen oder auch durch Absätze getrennt sein.
Bisher habe ich folgenden Code geschrieben:
Also sollen die Befehle in Zahlen umgewandelt werden und die Daten, wenn vorhanden dahinter geschrieben werden oder ggf. durch 0000 ersetzt werden.
Falls Interesse besteht: Der Code soll für eine CPU, die ich in Logisim gebaut habe übersetzt werden und bei längeren Codes ist es doch einfacher, wenn man in Buchstaben und nicht in Zahlen schreiben muss.
Ich hoffe, ich habe mich verständlich ausgedrückt.
Danke für Eure Hilfe!
Ich bekomme es einfach nicht hin, eine Batch zu schreiben, die die Folgende Aufgabe erfüllt.
Ich habe schon diverse Foren & Seiten durchsucht und immer nur Teillösungen gefunden, die aber weitere Probleme gebracht haben, sodass es nie ganz funktioniert hat.
Folgende Befehle stehen in Dateien, die übersetzt werden sollen.
Code:
load.var 001b
load.flag 000b
store.var 0035
store.flag 00a4
goto 00b9
goto.when 00b5
write.acc b38f
send.var 9345
send.flag 069a
condition 0003
addup
subtract
multiply
divide
run
shutdown
#Kommentar
Übersetzt werden soll das ganze dann nach diesem Schema:
Code:
load.var val >> 0001+[val]
load.flag val >> 0002+[val]
store.var val >> 0003+[val]
store.flag val >> 0004+[val]
goto val >> 0005+[val]
goto.when val >> 0006+[val]
write.acc val >> 0007+[val]
send.val val >> 0008+[val]
send.flag >> 0009+0000
condition val >> 000a+[val]
addup >> 000b+0000
subtract >> 000c+0000
multiply >> 000d+0000
divide >> 000e+0000
run >> 000f+0000
shutdown >> 0010+0000
Die jeweils 8-stelligen Hexadezimal-Werte können durch Leerzeichen oder auch durch Absätze getrennt sein.
Bisher habe ich folgenden Code geschrieben:
Code:
@echo off
mode con lines=35 cols=100
title Mip-16-1024-a Assembler Compiler
set /p quelle=Pfad der Datei, die kompiliert werden soll:
echo ----------------------------------------------------------------------------------------------------
set /p ziel=Pfad der Datei, in der der kompilierte Code gespeichert werden soll:
cls
echo Wollen sie die Datei "%quelle%" kompilieren und den Code dann in "%ziel%" speichern?
echo ----------------------------------------------------------------------------------------------------
echo J/N
choice /c YJN /N
if errorlevel=3 goto abbruch
if errorlevel=2 goto kompilieren
if errorlevel=1 goto kompilieren
:abbruch
cls
echo Der Vorgang wurde vom Benutzer abgebrochen.
pause >nul
exit
:kompilieren
cls
echo Der Code wird kompilert...
echo ----------------------------------------------------------------------------------------------------
echo Dieser Prozess kann einen Moment dauern.
set line=1
rem In diesem Bereich liegt das Problem, ich weiß, dass die zwei for-Schleifen so nicht funktionieren können.
for /f "tokens=1 delims=2" %%i in ('more/e +%line% ^< %quelle%') do (
echo %%i
)
FOR /f "usebackq tokens=1 delims=2" %%i in (%quelle%) do (
echo %%i >>temp.txt
timeout 1 >nul
set var=<temp.txt
echo %var%
)
:end
pause >nul
exit
Also sollen die Befehle in Zahlen umgewandelt werden und die Daten, wenn vorhanden dahinter geschrieben werden oder ggf. durch 0000 ersetzt werden.
Falls Interesse besteht: Der Code soll für eine CPU, die ich in Logisim gebaut habe übersetzt werden und bei längeren Codes ist es doch einfacher, wenn man in Buchstaben und nicht in Zahlen schreiben muss.
Ich hoffe, ich habe mich verständlich ausgedrückt.
Danke für Eure Hilfe!