Frage

In meiner Assemblersprache Klasse, unsere erste Aufgabe war es, ein Programm zu schreiben, einen einfachen Dollar-terminierten String in DOS zu drucken. Es sah so etwas wie folgt aus:

BITS 32
    global _main

section .data
    msg db "Hello, world!", 13, 10, ’$’

section .text
_main:
mov ah, 9
mov edx, msg
int 21h
ret

Wie ich es verstehe, dient das $ -Zeichen den Stachel zu beenden, wie null in C tut Aber was mache ich, wenn ich ein Dollar-Zeichen in der Zeichenfolge setzen wollen (wie ich will auszudrucken „es kostet $ 30“ )? Dies scheint eine einfache Frage, aber mein Professor wußte die Antwort nicht und ich scheine nicht, es zu finden eine Google-Suche.

War es hilfreich?

Lösung

Sie können nicht von DOS 0x09 Service $ Zeichen angezeigt werden, müssen Sie 0x02 verwenden. Siehe hier .

Andere Tipps

oder eigenes print_string macht einen NULL-terminierten String mit dem undokumentierten INT 29h (Druckzeichen in AL) zu drucken.

; ds:si = address of string to print
print_string:
    lodsb                   ; load next character from ds:si
    or al, al               ; test for NULL-character
    jz .end_of_string       ; end of string encountered, return.
    int 29h                 ; print character in AL on screen
    jmp print_string        ; print next character
.end_of_string:
    ret                     ; return to callers cs:ip

(Angenommen, Sie NASM verwenden)

Um. Sie könnten Montage schreiben, die für entgangenen $ berücksichtigt würden, zum Beispiel \$? Aber dann wird Ihr \ ein spezielles Symbol zu, und Sie müssen \\ verwenden, um eine \ zu Drucken

Eine Möglichkeit ist, den Anruf zu finden, die ein einzelnes Zeichen druckt. Sie können damit beliebige Zeichen drucken. Brechen Sie die Zeichenfolge und Druck „kostet“, dann die ‚$‘ und schließlich „30“. Mehr Arbeit, aber es wird die Arbeit erledigt.

Sie können 02 Service von INT 21H anstelle von 09 Service .

Hier ist die Probe.

mov dl, '$'

mov ah,02

int 21h

Versuchen '$$', '\ 044' (Oktal) oder '\ x24' (hex)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top