In Assembler x86 Windows ein ROT13 Converter programmieren?

6 Antworten

Hatte Fehler im code! (Sprungbefehl zum rollover) hier die korrekte Version (komplett):

.686
 .model flat,stdcall
 option casemap:none
 
 include \masm32\include\windows.inc
 include \masm32\include\masm32.inc
 include \masm32\include\kernel32.inc
 
 includelib \masm32\lib\kernel32.lib
 includelib \masm32\lib\masm32.lib
.CODE
 
_main:
    push offset szText
    call StdOut
    xor ecx,ecx
    xor eax,eax
_loop:
    cmp BYTE PTR szText[ecx], 0
    je _exit
    mov al, BYTE PTR szText[ecx]
    add al, 13
    cmp BYTE PTR szText[ecx],'A'
    jl _next
    cmp BYTE PTR szText[ecx],'Z'
    jl _caps
    cmp BYTE PTR szText[ecx],'a'
    jl _next
    cmp BYTE PTR szText[ecx],'z'
    jg _next
    cmp al,'z'
    ja _rollover
    jmp _writeback
_caps:
    cmp al,'Z'
    ja _rollover
    jmp _writeback
_rollover:
    sub al,26
 
_writeback:
    mov BYTE PTR szText[ecx], al
_next:
    inc ecx
    jmp _loop
 
_exit:
    push offset szText
    call StdOut
    push 0
    call ExitProcess
 
.DATA
    szText    db "Hier der Text",10,13,0
 
END _main

Kompilieren mit "ml rot13.asm /link /subsystem:console"

das EWDK hat die includes auch nicht.. es braucht die Installation von www.masm32.com, die gerneriert dann auch die libs und includes.

und zu dem "Problem" selbst. Ich hab' das jetzt mal so gemacht:

_main:
    xor ecx,ecx
    xor eax,eax
_loop:
    cmp BYTE PTR szText[ecx], 0
    je _exit
    xor ah,ah
    mov al, BYTE PTR szText[ecx]
    add al,13
    cmp BYTE PTR szText[ecx],'A'
    jl _next
    cmp BYTE PTR szText[ecx],'Z'
    jl _caps
    cmp BYTE PTR szText[ecx],'a'
    jl _next
    cmp BYTE PTR szText[ecx],'z'
    jg _next
    cmp ax,'z'
    jge _rollover
    jmp _writeback
_caps:
    cmp ax,'Z'
    jge _rollover
    jmp _writeback
_rollover:
    sub al,26
_writeback:
    mov BYTE PTR szText[ecx], al
_next:
    inc ecx
    jmp _loop
_exit:

Kurze Gegenfrage: Wie sieht denn ein Setup aus?

Ich mach' grad den d/l vom EWDK für win10.. der MASM ist ja beim VS2019 dabei, aber die includes für MASM nicht..

Wenn das soweit alles da ist, versuch ich mal ob ich dir da helfen kann.. mein Assembler ist ein bisschen eingerostet _und_ die Umgebung hat sich sehr verändert. ;)

Als ich mit Assembler aufgehört hab' gab's Windows XP.. :P

Also ich würde es so probieren, dass ich ein C Programm für die Ein-/ und Ausgabe schreibe -quasi als Wrapper für die Systemfunktionen und dann Assembler für diese Funktion in C einbette. Aber ich habe keine Ahnung von x86 Assembler in Verbindung mit Betriebssystem.

Windows lässt (glaube ich) keine Direktspeicherzugriffe mehr zu.

Woher ich das weiß:eigene Erfahrung – 10 Jahre Hardwarehilfe und eine Menge Eigenerfahrung
NianMao  24.09.2019, 09:01

In seinem eigenen Speicherbereich darf man machen was man möchte.. ;)

0