world visual tutorial portable inc hello assembly console dos nasm

assembly - visual - masm32 sdk tutorial



cadenas terminadas en dólares (6)

Pruebe con ''$$'', ''/ 044'' (octal) o ''/ x24'' (hexadecimal)

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 veía algo como 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 el aguijón como lo hace nulo en C. Pero, ¿qué hago si quiero poner un signo de dólar en la cadena (como quiero imprimir "cuesta $ 30")? Parece una pregunta simple, pero mi profesor no conocía la respuesta y parece que no la encuentro usando una búsqueda en Google.


Um. Podrías escribir el ensamblaje que se tomaría en cuenta para el $ escapado, por ejemplo /$ ? Pero luego tu / convierte en un símbolo especial también, y necesitas usar // para imprimir un /


O bien, cree su propia cadena de impresión para imprimir una cadena terminada en NULL utilizando la INT 29h no documentada (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és usando NASM)


Una forma es encontrar la llamada que imprime un solo caracter. Puedes imprimir cualquier personaje con eso. Rompe la cuerda e imprime "cuesta", luego el ''$'', y finalmente, "30". Más trabajo, pero hace el trabajo bien.


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


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

Aquí está la muestra.

mov dl, ''$'' mov ah,02 int 21h