2016-08-10 2 views
0

Hier ist ein neues Update, was ich gerade mache. Ich bin verwirrt, wie ich die in S2 gespeicherten Daten benutze, um dasselbe Wort auf dem ganzen Bildschirm zu suchen. Wenn gefunden, markieren Sie das Wort.Assembly Array Daten speichern

DOSBOX - Compiler: A86

org 100h 
;----------------------------------------------------- 
lea bp, S1  
mov cx, 35 
mov al, 1 
mov ah, 13h 
mov bh, 0 
mov dl, 0 
mov dh, 25 
mov bl, 7 
int 10h 
;----------------------------------------------------------   ; Asks input' 
mov di,1 
start: 
mov ah, 0 
int 16h 
mov dx,ax 
mov ah, 0eh 
cmp dx,4d00h 
je start2 
int 10h 
mov S2[di], al 
inc di 
jmp start 

start2 : 
mov cx,di 
mov di,1 
mov si,0 

relop : 
mov ah,[si] 
cmp ah,S2[di] 

mov al, 13h 
    mov ah, 0 
    int 10h  ; set graphics video mode. 
    mov al, 1100b 
    mov cx, 10 
    mov dx, 20 
    mov ah, 0ch 
    int 10h  ; set pixel. 

inc di 
add si,2 
je relop 

mov ah, 13h 
lea bp, S2 
mov al, 1 
mov bh, 0 
mov bl, 7 
mov dl, 0 
mov dh, 25 
int 10h 



MOV AH, 4CH 
INT 21H 







S1 DB "EENTER THE WORD TO FIND ON SCREEN : " 
S2 db 1 dup (?) 







; ========= data =============== 

Ich kann nicht int 21h für Ein- und Ausgabe verwenden, sondern nur das Programm (Rückkehr)

+1

Es ist Ihre Frage nicht klar. Welchen Assembler verwenden Sie? Warum bewegst du nicht direkt die S2-Inhalte in den Videospeicher, wenn du INT 21 nicht nutzen willst? –

+0

Ich kann den Videospeicher nicht verwenden, weil ich die gespeicherte Zeichenfolge verwenden muss, um nach etwas zu suchen. like, wie drucke ich was ich in S2 gespeichert zurück auf dem Bildschirm, aber es sollte in der Mitte von "FEHLER ->" und "konnte nicht gefunden werden" – will

+0

Wie soll Ihr Code funktionieren? Es gibt keine Kommentare, die darauf hinweisen, was Ihrer Meinung nach passieren sollte. –

Antwort

1
mov dl, 0 
mov dh, 25 

Sie zu Ende sind Drucken der Eingabeaufforderung über den Bildschirm hinaus! Coords sind nullbasiert und für die Zeile reichen sie von 0 bis 24 auf dem Standardtextbildschirm.


mov si,0 
relop : 
mov ah,[si] 
cmp ah,S2[di] 
mov al, 13h 
mov ah, 0 
int 10h  ; set graphics video mode. 

Wenn Sie vom Bildschirm lesen möchten, dann sollten Sie auf keinen Fall einen neuen Bildschirm auf jeder Iteration dieser retrievel Schleife einrichten! Außerdem wird das Initialisieren des SI-Registers auf 0 nicht zu dem ersten Zeichen des eingegebenen Wortes gelangen.

Lösung:

Zeigen Sie Ihren 35 Zeichen lang prompt in der ersten Reihe des Bildschirms (mov dh,0). Jetzt wissen Sie, dass das eingegebene Wort an der Videospeicher-Offsetadresse 70, aber im Videospeichersegment liegt.

mov ax,0B800h 
mov es,ax 
mov si,70 
relop : 
es mov ah,[si] <-- This is the ASCII code of the 1st inputted character 

Beste auch diese Korrekturen vorzunehmen:

S1 DB "ENTER THE WORD TO FIND ON SCREEN : " 
S2 db 44 dup (?) 
Verwandte Themen