Zum Hauptinhalt springen

Wie kann ich ein Array über die Tastatur in TASM eingeben

TASM (Turbo Assembler) ist eine der häufigsten Programmiersprachen in Assembler, die zur Entwicklung von Anwendungen für MS—DOS- und Windows-Betriebssysteme verwendet wird. Es ermöglicht Ihnen, auf niedrigem Niveau mit dem Speicher Ihres Computers zu arbeiten und effiziente und schnelle Programme zu erstellen.

Eine der grundlegenden Operationen, die ein Programm auf TASM ausführt, ist die Eingabe und Ausgabe von Daten. In diesem Artikel werden wir uns ansehen, wie Sie ein Array korrekt über die Tastatur in TASM eingeben.

Schritt 1: Vorbereiten des Arrays

Der erste Schritt besteht darin, ein Array zu erstellen, in dem die Tastatureingaben gespeichert werden. Dazu müssen Sie Speicher mithilfe der DB-Direktive (Data Byte) oder DW-Direktive (Data Word) im Datenabschnitt des Programms zuweisen.

Um beispielsweise ein Array von 10 Bytes zu erstellen, können Sie den folgenden Code verwenden:

In diesem Fall erstellen wir ein array, das aus 10 Bytes besteht, von denen jedes mit einem Zeichen initialisiert wird?.

Schritt 2: Dateneingabe

Nachdem Sie das Array erstellt haben, müssen Sie die Daten über die Tastatur eingeben. Dazu können Sie den Systemaufruf INT 21h verwenden, mit dem Sie Zeichen aus der Standardeingabe abrufen und im Speicher speichern können.

Zum Beispiel können Sie den folgenden Code verwenden, um ganze Zahlen einzugeben:

mov ah, 01h ; parameter übergeben

int 21h ; Systemunterbrechung aufrufen

sub al, 30h ; konvertiert ein Zeichen in eine Zahl

mov [array], al ; Speichern einer Zahl in ein Array

In diesem Fall wird das über die Tastatur eingegebene Zeichen in der Groß- und Kleinschreibung AL gespeichert. Dann wird das Zeichen in eine Zahl konvertiert, indem der Zeichencode '0' von ihm subtrahiert wird (der Wert von 30h im Hexadezimalsystem), und die resultierende Zahl wird im array array gespeichert.

Wenn diese Schritte ausgeführt werden, können wir das Array erfolgreich über die Tastatur in TASM eingeben.

TASM-Array: Tastatureingabe

Die TASM-Programmiersprache (Turbo Assembler) wird häufig zum Erstellen von Assembler-Programmen für den Intel x86-Prozessor verwendet. Wenn Sie ein Array über die Tastatur in TASM eingeben müssen, müssen Sie spezielle Befehle verwenden, um die Daten von der Konsole zu lesen.

Erstellen Sie zunächst ein Array im Speicher mithilfe der db- oder dw-Direktive, abhängig vom Datentyp des Arrays. Um beispielsweise ein Bytearray zu erstellen, können Sie den folgenden Befehl verwenden:

myArray db 100 dup(?)

Hier ist myArray der Name des Arrays, db ist die Direktive für das Byte-Array, 100 ist die Anzahl der Array-Elemente und dup(?) - Befehl zum Füllen von Arrayelementen mit nicht definierten Daten.

Um die Werte eines Arrays über die Tastatur einzugeben, müssen Sie den Befehl ReadChar oder ReadString verwenden, um die Zeichen bzw. die Zeichenfolgen über die Tastatur zu lesen. Im folgenden Code wird beispielsweise veranschaulicht, wie Sie Zahlen über die Tastatur eingeben und in einem Array speichern:

mov cx, 100 ; количество элементов массиваmov si, offset myArray ; адрес начала массива; ввод чисел с клавиатурыinputLoop:call ReadChar ; чтение символа с клавиатурыsub al, '0' ; преобразование символа в числоmov [si], al ; сохранение числа в массивеinc si ; переход к следующему элементу массиваloop inputLoop

In diesem Beispiel wird das Register cx verwendet, um die Anzahl der Elemente im Array zu verfolgen, und das Register si, um auf die Adressen der Elemente im Speicher zuzugreifen. Der Befehl call ReadChar liest das Zeichen von der Tastatur und speichert es im al- Register. Mit dem Befehl sub al wird ein '0' Zeichen in einen numerischen Wert konvertiert.

Nachdem dieser Code ausgeführt wurde, enthält das myArray die über die Tastatur eingegebenen numerischen Werte.

Jetzt wissen Sie, wie Sie ein Array über die Tastatur in TASM eingeben. Mit speziellen Befehlen zum Lesen von Daten aus der Konsole und zum Verwenden von Registern können Sie Arrays ganz einfach über die Tastatur in TASM erstellen und füllen.

Grundlagen der Arbeit mit Arrays in TASM

Um mit TASM-Assembler-Arrays zu arbeiten, müssen mehrere Schritte ausgeführt werden.

  1. Bestimmen Sie die Größe des Arrays. Um dies zu tun, müssen Sie die Anzahl der Elemente kennen, die im Array gespeichert werden sollen. Beispiel: Für ein Array mit 10 Elementen beträgt die Größe 10.
  2. Definieren Sie den Datentyp, der im Array gespeichert ist. Zum Beispiel kann es sich um eine ganze Zahl oder ein Zeichen handeln.
  3. Definieren Sie den Speicherort des Arrays. Dies kann ein Register, ein Registerpaar oder ein Speicher sein.
  4. Definieren Sie die Methode zum Füllen des Arrays. Dies kann Tastatureingaben sein, aus einer Datei gelesen oder zufällige Werte generiert werden. In diesem Fall müssen Sie zum Eingeben eines Arrays über die Tastatur den Befehl INT 21h verwenden, die Funktion 1h, um das Zeichen über die Tastatur zu lesen.

Der Beispielcode zum Eingeben eines Arrays über die Tastatur lautet wie folgt:

MOV CX, 10 ; Array-Größe

MOV SI, OFFSET array ; Adresse des Arrayanfangs

MOV AH, 01h ; Funktion zum Lesen des Zeichens über die Tastatur

INT 21h ; Unterbrechungsaufruf

MOV [SI], AL ; Speichern eines Zeichens in einer Arrayzelle

INC SI ; Array-Adresse erhöhen

LOOP READ_ARRAY ; wiederholtes Lesen eines Arrays

Nachdem dieser Code ausgeführt wurde, wird das Array mit den über die Tastatur eingegebenen Werten gefüllt.

Das Arbeiten mit Arrays in TASM ist ein wichtiger Aspekt bei der Entwicklung von Assembler-Programmen. Wenn Sie die Grundlagen der Arbeit mit Arrays verstehen, können Sie sie effektiv für verschiedene Aufgaben verwenden.

Steuerung zum Lesen eines Zeichens über die Tastatur übertragen

Um ein Zeichen über die TASM-Tastatur einzugeben, verwenden Sie die BIOS INT 16h-Funktion. Sie können den folgenden Code verwenden, um das Lesen eines Zeichens über die Tastatur zu steuern:

  1. Speichert den aktuellen Registerkontext.
  2. Rufen Sie die BIOS-Funktion INT 16h mit der Option 0 auf (Zeichen lesen).
  3. Erhalten Sie das gelesene Zeichen im AH-Register.
  4. Stellen Sie den Kontext der Register wieder her.

Beispielcode in TASM:

; Сохранение текущего контекста регистровpush axpush bxpush cxpush dx; Вызов функции BIOS INT 16hmov ah, 0 ; Параметр - читать символint 16h ; Вызов BIOS; Получение прочитанного символаmov ah, 0 ; AH содержит прочитанный символ; Восстановление контекста регистровpop dxpop cxpop bxpop ax

Jetzt können Sie das gelesene Zeichen in Ihrem TASM-Programm verwenden.

Zwischenspeichern des eingegebenen Zeichens in Groß- und Kleinschreibung

Wenn Sie ein Zeichenarray über die Tastatur eingeben, liest das Programm jedes Zeichen ein und speichert es in Groß- und Kleinschreibung. Das Zeichen kann dann an der gewünschten Position des Arrays geschrieben werden. Um ein Zeichen in einem Register zu speichern, verwenden Sie eine MOV-Anweisung, die den Wert von einem Ort zum anderen verschiebt.

Beispiel für die Verwendung der MOV-Anweisung zum Speichern eines Zeichens im AX-Register:

MOV AH, 0 ; читаем символ с клавиатурыINT 16hMOV [array+BX], AL ; сохраняем символ в массиве

In diesem Beispiel wird das Zeichen mit einem 16h-Interrupt gelesen und im AL-Register gespeichert. Der Wert des AL-Registers wird dann mithilfe der MOV-Anweisung an die gewünschte Position im Array verschoben.

Das Zwischenspeichern des eingegebenen Zeichens in die Groß- und Kleinschreibung ermöglicht es dem Programm, das Array über die Tastatur einzugeben und jedes Zeichen zur weiteren Datenverarbeitung im Speicher des Computers zu speichern.

Platzieren eines Symbols in der Auswahl des Arrays

Um ein Zeichen in einem ausgewählten Arrayelement in TASM zu platzieren, müssen Sie die folgenden Schritte ausführen:

  1. Definieren Sie ein Array und seine Abmessungen.
  2. Zähle die Anzahl der Array-Elemente über die Tastatur.
  3. Verwenden Sie eine Schleife, um Zeichen in jedes Element des Arrays einzugeben.
  4. Ruft die Position des ausgewählten Arrayelements ab.
  5. Fügt ein Zeichen in das ausgewählte Array-Element ein.

Beispielcode in TASM:

.MODEL SMALL.STACK 100H.DATAARRAY DB 10 DUP (?) ; определение массива. POS DW ? ; определение позиции выделенного элемента массиваCHAR DB ? ; определение символа для вставки.CODEMAIN PROCMOV AX, @DATAMOV DS, AX. ; считывание размера массива с клавиатуры и ввод массиваMOV CX, POS ; загрузка позиции выделенного элемента в регистр CXDEC CX ; уменьшение позиции на 1 для выравнивания индексов в массивеMOV AL, CHAR ; загрузка символа для вставки в регистр ALMOV [ARRAY + CX], AL ; вставка символа в выделенный элемент массива. ; вывод массива на экранMOV AH, 4CHINT 21HMAIN ENDPEND MAIN

In diesem Beispiel wird das im Register AL enthaltene Zeichen in das ausgewählte Element des Arrays eingefügt, das sich an der im Register CX angegebenen Position befindet. Vor dem Einfügen eines Symbols müssen Sie die Position um 1 reduzieren, um die Indizes im Array auszurichten.

Überprüfen, ob die Zeicheneingabe beendet ist

Wenn Sie ein Array über die Tastatur in TASM eingeben, ist es wichtig, dass Sie feststellen können, wann der Benutzer mit der Eingabe von Zeichen fertig ist.

Dazu können Sie ein Sonderzeichen verwenden, das als Marker für das Ende der Eingabe dient. Sie können beispielsweise einen Punkt, ein Komma oder ein beliebiges anderes Zeichen verwenden, das nicht im Datenarray selbst verwendet wird.

Zuerst müssen Sie eine Variable deklarieren, die die Werte der über die Tastatur eingegebenen Zeichen speichert:

array db 100 dup(?)count db ?

Variablenwert count wird verwendet, um die Anzahl der eingegebenen Zeichen zu verfolgen.

Sie können dann eine Schleife verwenden, die ausgeführt wird, bis Sie das Endzeichen eingegeben haben:

mov cx, 100 ; максимальное количество символовlea si, array ; адрес начала массиваmov dl, '.' ; символ окончанияinput_loop:mov ah, 1 ; считывание символаint 21h ; вызов прерыванияmov ah, 0 ; запись символа в массивstosb ; сохранение символа в массивеinc count ; увеличение счетчика введенных символовcmp al, dl ; проверка на окончание вводаje input_end ; если символ равен маркеру окончания, то выход из циклаloop input_loop ; возврат к началу цикла, если не достигнут максимум символовinput_end:

Dieser Code verwendet einen 21h-Interrupt mit Parameter 1, um ein Zeichen von der Tastatur zu lesen, und einen 21h-Interrupt mit Parameter 0, um das Zeichen in ein Array zu schreiben.

Nachdem Sie die Eingabe abgeschlossen haben, können Sie die empfangenen Werte bearbeiten, z. B. sie auf dem Bildschirm anzeigen:

mov bx, 1 ; указатель на стандартный выводlea dx, array ; адрес массиваmov cx, count ; количество символовmov ah, 9 ; вывод строкиint 21h ; вызов прерывания

Jetzt wissen Sie, wie Sie bei der Eingabe eines Arrays über die Tastatur in TASM auf das Ende der Zeicheneingabe prüfen können.

Vergrößert den Zeiger des aktuellen Arrayelements

In TASM können Sie den Zeiger des aktuellen Arrayelements vergrößern, indem Sie die Größe eines einzelnen Elements zu seinem Wert hinzufügen. Wenn jedes Element im Array 2 Byte groß ist, wird der Zeiger des aktuellen Elements wie folgt vergrößert:

mov ax, word ptr [ebx] ; загрузка указателя текущего элемента в регистр axadd ax, 2 ; увеличение указателя текущего элемента на 2 байтаmov word ptr [ebx], ax ; сохранение обновленного значения указателя текущего элемента

In diesem Beispiel wird davon ausgegangen, dass sich der Zeiger des aktuellen Arrayelements im ebx-Register befindet. Mit dem Befehl mov ax, word ptr [ebx] der Zeigerwert des aktuellen Elements wird in das ax-Register geladen. Verwenden Sie dann den Befehl add ax, 2 der Zeigerwert des aktuellen Elements wird um 2 Bytes erhöht (da jedes Element im Array eine Größe von 2 Bytes hat). Schließlich mit dem Befehl mov word ptr [ebx], ax der aktualisierte Zeigerwert des aktuellen Elements wird im Speicher gespeichert.

Nachdem Sie diese Befehle ausgeführt haben, zeigt der Zeiger des aktuellen Elements auf das nächste Element im Array und Sie können damit fortfahren.

Beachten Sie, dass die Größe des Arrayelements je nach dem Datentyp im Array unterschiedlich sein kann. Wenn beispielsweise jedes Element im Array 4 Bytes groß ist (der Datentyp ist dword), muss der Zeigerwert des aktuellen Elements um 4 Bytes und nicht um 2 Bytes erhöht werden.

Die Array-Eingabe wird abgeschlossen und die Steuerung wird zurückgegeben

Nachdem alle Elemente des Arrays mit der input-Anweisung eingegeben wurden, müssen Sie die Arrayeingabe abschließen und die Steuerung an das Hauptprogramm zurückgeben.

Um dies zu tun, können Sie eine spezielle Beschriftung verwenden, die als Indikator für das Ende der Eingabe dient, bevor Sie die Eingabe eines Arrays beenden. Sie können beispielsweise den Wert -1 als Eingabeende festlegen. Wenn der Benutzer -1 eingibt, weiß das Programm, dass das Array vollständig gefüllt ist und es möglich ist, die Dateneingabe zu beenden.

Der Anwendungsfall ist -1, um die Eingabe eines Arrays zu beenden:

MarkierungArray
beschriftung 1:input
cmpeax, -1
jemarkierung2
markierung2:.

In diesem Beispiel wird dieser Wert nach der Eingabe jedes Arrayelements mit -1 verglichen. Wenn sie gleich sind, springt das Programm zu Beschriftung Beschriftung 2 , wo weitere Operationen mit dem Array durchgeführt werden können.

Verwenden Sie die ret-Anweisung, um die Steuerung des Hauptprogramms zurückzugeben. Sie gibt die Steuerung an den Punkt zurück, von dem die aktuelle Prozedur oder Funktion aufgerufen wurde. Nachdem Sie das Array eingegeben und alle Vorgänge damit abgeschlossen haben, rufen Sie die ret-Anweisung auf, wodurch die Steuerung an das Hauptprogramm zurückgegeben wird.