PRÁCTICA 1

PRÁCTICA 1 PRÁCTICA 1

azul2.bnct.ipn.mx
from azul2.bnct.ipn.mx More from this publisher
15.05.2013 Views

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 1 3.10 Procedimientos para conversiones. %TITLE "RUTINAS DE CONVERSIÓN DE BINARIO A ASCII Y VICEVERSA" ; EQUs IDEAL DOSSEG MODEL small ASCnulo EQU 0 ;ASCII de carácter nulo %NEWPAG CODESEG PUBLIC DigitoHex, NumAsc, BinAscDec ;DigitoHex CONVIERTE VALOR DE 4 BITS A DÍGITO HEXADECIMAL ASCII ; ;Entrada: DL = valor binario (nibble alto = 0) ;Salida: DL = ASCII del dígito hexadecimal equivalente) ;Registros: DL PROC DigitoHex @@5: cmp dl,10 ;DL < 10 (es decir hex 'A')? jb @@5 ;Sí, brinca add dl, 'A'-10 ;No, convertir A, B, C, D, E o F ret add dl,'0' ;Convierte a dígitos 0 a 9 ret ;Retorna ENDP DigitoHex ;NumAscr CONVIERTE BINARIO NO SIGNADO A ASCII ; ;Entrada: AX = valor de 16 bits a convertir ; BX = base del resultado (2 = binario, 10 = decimal, 16 = hexadecimal) ; CX = número mínimo de dígitos de salida ; DI = dirección de cadena para resultados ; Si CX = 0 y AX = 0, largo de la cadena es cero ; Si CX = 1 y AX = 0, la cadena tendrá ‘0’ ;Salida: Ninguna ;Registros: AX, CX PROC NumAsc push dx ;Entrada normal AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 1-8

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 1 push di ;Salva registros push si ; SI controla los dígitos guardados en la pila @@10: @@20: @@30: @@40: xor si,si ;Contador de dígitos a cero jcxz @@20 ;Si CX = 0 brinca a ponerlo a 1 xor dx,dx ;Extiende AX a 32 bits div bx ;AX = DX. AX/BX, DX = residuo call DigitoHex ;Convierte DL a dígito hexadecimal push dx ;Salva dígito en la pila inc si ;Cuenta dígitos salvados loop @@10 inc cx ;Pone CX = 1 por si no se hizo or ax,ax ;AX = 0? (todos los dígitos) jnz @@10 ;Si AX > 0 continua la conversión mov cx,s ;CX = contador de caracteres en pila jcxz @@40 ;Omite sgte bucle si CX=0000 cld ;Autoincrementa DI en STOSB pop ax ;Trae siguiente dígito en AL stosb ;Pone dígito en cadena y avanza DI loop @@30 ;Repite el bucle mov [byte di],ASCnulo ;Pone cero al fin de cadena pop si di dx ;Repone registros ret ;Regresa ENDP NumAsc ;BinAscDec CONVIERTE VALOR BINARIO A CADENA ASCII DECIMAL ; ;Entrada: Misma que BinAscHex ;Salida: Ninguna ;Registros: AX, CX (indirectamente) PROC BinAscDec push bx ;Salva BX en la pila mov bx,10 ;Base para conversión call NumAsc ;Pasa a ASCII pop bx ;Repone BX ret ;Regresa a programa fuente AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 1-9

LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

3.10 Procedimientos para conversiones.<br />

%TITLE "RUTINAS DE CONVERSIÓN DE BINARIO A ASCII Y VICEVERSA"<br />

; EQUs<br />

IDEAL<br />

DOSSEG<br />

MODEL small<br />

ASCnulo EQU 0 ;ASCII de carácter nulo<br />

%NEWPAG<br />

CODESEG<br />

PUBLIC DigitoHex, NumAsc, BinAscDec<br />

;DigitoHex CONVIERTE VALOR DE 4 BITS A DÍGITO HEXADECIMAL ASCII<br />

;<br />

;Entrada: DL = valor binario (nibble alto = 0)<br />

;Salida: DL = ASCII del dígito hexadecimal equivalente)<br />

;Registros: DL<br />

PROC DigitoHex<br />

@@5:<br />

cmp dl,10 ;DL < 10 (es decir hex 'A')?<br />

jb @@5 ;Sí, brinca<br />

add dl, 'A'-10 ;No, convertir A, B, C, D, E o F<br />

ret<br />

add dl,'0' ;Convierte a dígitos 0 a 9<br />

ret ;Retorna<br />

ENDP DigitoHex<br />

;NumAscr CONVIERTE BINARIO NO SIGNADO A ASCII<br />

;<br />

;Entrada: AX = valor de 16 bits a convertir<br />

; BX = base del resultado (2 = binario, 10 = decimal, 16 = hexadecimal)<br />

; CX = número mínimo de dígitos de salida<br />

; DI = dirección de cadena para resultados<br />

; Si CX = 0 y AX = 0, largo de la cadena es cero<br />

; Si CX = 1 y AX = 0, la cadena tendrá ‘0’<br />

;Salida: Ninguna<br />

;Registros: AX, CX<br />

PROC NumAsc<br />

push dx ;Entrada normal<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!