Pregunta

En mi clase de lenguaje ensamblador, nuestra primera tarea fue escribir un programa para imprimir una cadena simple terminada en dólares en DOS. Se parecía a esto:

BITS 32
    global _main

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

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

Según tengo entendido, el signo $ sirve para terminar la picadura como lo hace nulo en C. Pero, ¿qué hago si quiero poner un signo de dólar en la cadena (como si quisiera imprimir " cuesta $ 30 ")? Esta parece una pregunta simple, pero mi profesor no sabía la respuesta y parece que no la encuentro usando una búsqueda en Google.

¿Fue útil?

Solución

No puede usar el servicio 0x09 de DOS para mostrar signos $, deberá usar 0x02. Consulte aquí .

Otros consejos

O cree su propia cadena de impresión para imprimir una cadena terminada en NULL utilizando el INT 29h no documentado (carácter de impresión en 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

(Suponiendo que está utilizando NASM)

Um. Puede escribir un ensamblaje que se tenga en cuenta para $ escapado, p. \$? Pero entonces su \ también se convierte en un símbolo especial, y necesita usar \\ para imprimir un <=>

Una forma es encontrar la llamada que imprime un solo carácter. Puedes imprimir cualquier personaje con eso. Rompa la cadena e imprima & Quot; cuesta & Quot ;, luego el '$', y finalmente, & Quot; 30 & Quot ;. Más trabajo, pero hace el trabajo.

Puede usar el 02 servicio de INT 21H en lugar del 09 servicio .

Aquí está la muestra.

mov dl, '$'

mov ah,02

int 21h

Pruebe '$$', '\ 044' (octal) o '\ x24' (hexadecimal)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top