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