tlink spiderman source para not more marvel log instalar information have for descargar check been assembler assembled assembly tasm

assembly - spiderman - tasm marvel



¿Cómo puedo convertir HEX en DECIMAL? (1)

Al convertir números en un formato imprimible, a menudo es más fácil comenzar con el último dígito.

Considere la posibilidad de convertir 123 a "123", ¿cómo obtendríamos el último dígito? Es lo que queda cuando se divide por 10 (la base). Entonces el 123% 10 nos da 3 y 123/10 = 12 nos da el número correcto para trabajar en la próxima iteración. En x86, la instrucción "DIV" es lo suficientemente buena para darnos tanto el cociente como el resto (en ax y dx respectivamente). Lo único que queda es almacenar caracteres imprimibles en la cadena.

Al juntar todo esto, terminas con algo como lo siguiente (usando la sintaxis de nasm):

; ConvertNumber ; Input: ; ax = Number to be converted ; bx = Base ; ; Output: ; si = Start of NUL-terminated buffer ; containing the converted number ; in ASCII represention. ConvertNumber: push ax ; Save modified registers push bx push dx mov si, bufferend ; Start at the end .convert: xor dx, dx ; Clear dx for division div bx ; Divide by base add dl, ''0'' ; Convert to printable char cmp dl, ''9'' ; Hex digit? jbe .store ; No. Store it add dl, ''A''-''0''-10 ; Adjust hex digit .store: dec si ; Move back one position mov [si], dl ; Store converted digit and ax, ax ; Division result 0? jnz .convert ; No. Still digits to convert pop dx ; Restore modified registers pop bx pop ax ret

Esto requiere un buffer de trabajo (16 para el caso cuando base = 2 y un byte extra para el terminador NUL):

buffer: times 16 db 0 bufferend: db 0

Agregar soporte para números con signo se deja como un ejercicio para el lector. Aquí está más o menos la misma rutina adaptada para el ensamblaje de 64 bits.

Planeo convertir la variable X a decimal. Estoy teniendo problemas para usar el ensamblador de turbo, ¿puedes ayudarme?

code segment ;inicio de un segmento unico assume cs:code,ds:code,ss:code org 100h ;localidad de inicio del contador main proc ;procedimiento principal mov ax,cs mov ds,ax ; INICIO mov ax, x mov ah,4ch ;comienzo del fin de programa int 21h ;fin del programa main endp x dw 0A92FH code ends ; fin del segmento de codigo end main ;fin del ensamble

Muchas gracias