завершенные долларом строки - PullRequest
3 голосов
/ 27 января 2009

В моем классе на ассемблере нашим первым заданием было написать программу для печати простой строки с долларовым окончанием в DOS. Выглядело это примерно так:

BITS 32
    global _main

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

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

Насколько я понимаю, знак $ служит для прекращения жала, как ноль в C. Но что мне делать, если я хочу вставить знак доллара в строку (как я хочу распечатать "стоит 30 $") )? Это кажется простым вопросом, но мой профессор не знал ответа, и я, похоже, не нашел его с помощью поиска в Google.

Ответы [ 6 ]

8 голосов
/ 27 января 2009

Вы не можете использовать сервис DOS 0x09 для отображения $ знаков, вам нужно будет использовать 0x02. Смотри здесь .

3 голосов
/ 27 января 2009

Или создайте свою собственную строку print_string для печати строки с нулевым символом в конце, используя недокументированный INT 29h (символ печати в AL).

; 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

(при условии, что вы используете NASM)

0 голосов
/ 25 мая 2015

Вы можете использовать 02 INT 21H вместо 09 .

Вот образец.

mov dl, '$'

mov ah,02

int 21h
0 голосов
/ 27 января 2009

Один из способов - найти вызов, который печатает один символ. Вы можете напечатать любой символ с этим. Разбейте строку и выведите «оно стоит», затем «$» и, наконец, «30». Больше работы, но она выполняет свою работу.

0 голосов
/ 27 января 2009

Попробуйте '$$', '\ 044' (восьмеричное) или '\ x24' (шестнадцатеричное)

0 голосов
/ 27 января 2009

Um. Вы могли бы написать сборку, которая была бы учтена для экранированного $, например \$? Но тогда ваш \ тоже становится специальным символом, и вам нужно использовать \\, чтобы напечатать \

...