Story Transcript
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
PRÁCTICA 2 CONVERSIÓN DE UN NÚMERO DECIMAL A BINARIO Y HEXADECIMAL Y VICEVERSA 1.
INTRODUCCIÓN
En esta práctica convertiremos un número decimal, introducido por el teclado, a binario y hexadecimal y viceversa. Usaremos módulos anteriores y veremos módulos nuevos.
2.
OBJETIVOS Al término de esta práctica el alumno sabrá: 2.1
Leer una cadena de caracteres mediante servicio 0AH, de la interrupción 21H.
2.2
Realizar conversiones entre diferentes bases.
2.3
Hacer que un programa sea más informativo con el usuario.
2.4
Hacer que un programa acepte parámetros del usuario.
3.
DESARROLLO
3.1
Procedimiento para leer cadenas.
PUBLIC ;LeeCadena ; ;Entrada: ; ; ;Salida: ;Registros:
PROC
LeeCadena
LEE CADENA CON TECLAS DE EDICIÓN DI = dirección destino de la cadena CL = límite máximo de cadena sin incluir terminador nulo Si CL = 0, LeeCadena no hace nada Cadena copiada de la entrada estándar en el buffer ninguno
LeeCadena and jz push
cl,cl @@99 ax
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;¿Es CL = 0 ? ;si, sale ;Salva registros usados 2-1
LENGUAJE ENSAMBLADOR 80386
push push push mov mov mov int xor mov mov mov call pop pop
PRÁCTICA 2
bx dx si [Buffer.maxlon],cl ah,0ah dx,offset Buffer.maxlon 21h bh,bh bl,[Buffer.cadlon] [bx + Buffer.carac],ASCnulo si,offset Buffer.carac CopiaCad si dx bx ax
;Pone byte de largo máximo ;Entrada de cadenas con DOS ;DS:DX apunta a la estructura ;DOS captura la cadena ;Parte alta de BX a cero ;BX = número de caracteres en el Buffer ;Cambia RC a ASCII nulo (0) ;Apunta al buffer con SI ;Copia cadena al buffer del ;usuario ;Repone registros
@@99: ret
ENDP
;Regresa a programa fuente
LeeCadena
Mediante este procedimiento se introducirá el número a convertir. Utilizaremos la interrupción 21H, servicio 0AH para introducir caracteres por el teclado y para capturar la cadena oprimimos RETURN.
3.2
Capturar el módulo anterior en el programa CADENAS.ASM; ensamblarlo y meterlo a la librería REM:
C>TASM /zi CADENAS C>TLIB /E REM -+CADENAS 3.3
Procedimientos para copiar una cadena en otra y moverla a la izquierda.
PUBLIC
CopiaCad, MueveIzq
COPIA UNA CADENA EN OTRA
;CopiaCad ; ;Entrada: ; ;Salida ;Registros:
SI = dirección de cadena fuente, cad1 DI = dirección de cadena destino, cad2 Caracteres en cad1 copiados en cad2 Ninguno
PROC
CopiaCad push push push xchg call
bx cx dx si,di LargoCad
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;Salva registros
;Trueca SI y DI ;Halla largo de cad1 (fuente) 2-2
LENGUAJE ENSAMBLADOR 80386
inc xchg xor xor call pop pop pop ret
cx si,di bx,bx dx,dx MueveIzq dx cx bx
PRÁCTICA 2
;Más uno para incluir terminador ;Repone SI y DI ;Índice de la fuente = 0 ;Índice del destino = 0 ;Copia fuente a destino ;Repone registros
ENDP
CopiaCad
;MueveIzq ; ;Entrada: ; ; ; ; ;Salida: ;Registros:
MUEVE BLOQUE DE BYTES A LA IZQ. (HACIA ABAJO) EN MEMORIA SI = dirección de cadena fuente, cad1 DI = dirección de cadena destino, cad2 BX = índice de cad1,i1 DX = índice de cad2,i2 CX = número de bytes a mover (K) Se mueven K bytes de cad1 [i1] a cad2 [i2] Ninguno
PROC
MueveIzq jcxz @@99 push cx push si push di add si,bx add di,dx cld rep movsb pop di pop si cx
;Salir si K = 0 ;Salva registros modificados
;Agrega índice ;Agrega índice al destino ;incrementando direcciones ;Mover mientras CX 0
@@99: ret
ENDP
MueveIzq
Con estos procedimientos copiamos la cadena original en otra para posteriormente eliminar ceros delanteros (ceros a la izquierda).
3.4
Capturar estos módulos en el programa MANCADE.ASM, ensamblarlos y agregarlos a la librería REM.
C>TASM /zi MANCADE C>TLIB /E REM +-MANCADE
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-3
LENGUAJE ENSAMBLADOR 80386
3.5
PRÁCTICA 2
Procedimientos para convertir cadenas de números binarios a y viceversa.
PUBLIC PUBLIC
BinSAscDec, ValCar, AscNum BinAscBin, AscBin, CarBas
CONVERTIR BINARIO CON SIGNO A CADENA ASCII DECIMAL
;BinSAscDec ; ;Entrada: ;Salida: ;Registros:
Misma que BinAscHex (AX es ahora de 16 bits, signado) Ninguna AX, CX
PROC
BinSAscDec push push cmp jge neg mov inc
bx di ax,0 @@10 ax [byte di],'-' di
;Salva BX y DI
bx,10 NumAsc di bx
;Pone base igual a 10 ;Convierte AX a ASCII ;Recupera registros
;Es AX negativo ;Brinca si >= 0 ;Forma complemento a 2 de AX ;Pone un "-" en la cadena
@@10: mov call pop ret
ENDP
BinSAscDec
;BinSscBin ; ;Entrada: ;Salida: ;Registros:
CONVIERTE VALOR BINARIO A CADENA ASCII DE DÍGITOS BINARIOS Misma que BinAscHex Ninguna AX, CX (indirectamente)
PROC
BinAscBin push mov call pop ret
ENDP
bx bx,2 NumAsc bx
;Salva en la pila ;Base = 2 ;Pasa a ASCII
BinAscBin
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-4
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
;AscBin ; ;Entrada: ; ; ; ; ; ;Salida: ; ;Registro:
CONVIERTE CADENA ASCII A BINARIO
PROC
AscBin
DI = cadena ASCII a convertir a binario ‘H’ al fin de cadena = hexadecimal ‘B’ al fin de cadena = binario ‘D’ al fin de cadena = decimal ‘_‘ indica número negativo No se permiten blancos en la cadena CF = 1: carácter ilegal. AX es irrelevante CF = 0: AX = valor binario AX
push call call xor jcxz mov add cmp pushf jne inc
bx cx dx si MayusCad LargoCad ax,ax @@99 si,di si,cx [byte di],'-' @@10 di
;Salva registros ;Convierte cadena a mayúscula ;CX = largo de cadena en DI ;Resultado parcial = 0 ;Sí largo = cero. AX= 0 CF= 0 ;Dirección cadena con SI ;Avanza Si al terminador nulo ;Verifica si es negativo ;Salva banderas de comparación ;Brinca si es positivo ;Brinca al signo de menos
@@10: call call rcl popf jne neg dec
CarBase AscNum bx,1 @@20 ax di
;Pone BX = número base. SI = último digito ;Convierte ASCII a número ;Salva CF en BX ;Repone banderas de comparación ;Forma complemento a 2s de AX ;Repone DI a cabeza de cadena
@@20: rcr
bx,1
;Repone CF desde BX
si dx cx bx
;Repone registros ;Regresa
@@99: pop ret
ENDP
AscBin
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-5
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
RETORNA BASE A UNA CADENA ASCII
;CarBase ; ;NOTA: ;Entrada: ;Salida: ; ;Registros:
SI apunta al terminador nulo al fin de la cadena BX = 2 (binario), 10 (decimal), 16 (hexadecimal) SI = dirección del último dígito de la cadena BX, DL, SI
PROC
CarBase mov mov cmp je mov cmp je mov cmp jne
Rutina privada para AscBin. No llamarla directamente
dl,[byte si-1] bx,16 dl,'H' @@10 bx,2 dl,'B' @@10 bx,10 dl,'D' @@20
;
;Trae último carácter de la cadena ;Pone si es hexadecimal ;¿Es cadena hex ? ;Si, brinca ;Por si es binario ;Es binario? ;Si, brinca ;Pon si es decimal ;¿Es decimal ? ;Brinca si no
@@10: dec
si
;Ajusta SI
@@20: ret
ENDP
CarBase
;AscNum ; ;NOTA: ;Entrada: ; ; ; ;Salida: ; ;Registros:
CONVIERTE CARACTERES ASCII A BINARIO
AX = valor inicial (0) BX = base (2=binario, 10=decimal, 16=hexadecimal) DI = dirección de cadena no asignada (cualquier formato) SI = dirección de último dígito de la cadena CF = 0: AX valor binario sin signo CF = 1: conversión no fue posible AX, CX, DX, SI
PROC
AscNum mov
Rutina privada para AscBin. No llamarla directamente
cx,1
;Inicia multiplicador
si,di @@99 si dl,[byte si] ValCar @@99
;Al inicio de la cadena
@@10: cmp je dec mov call jc
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;Procesa siguiente carácter a la izquierda ;Pone carácter en DL ;Convierte a valor en DX ;Sale si error (carácter ilegal) 2-6
LENGUAJE ENSAMBLADOR 80386
push xchg mul add pop mul xchg jmp
PRÁCTICA 2
cx ax,cx dx cx,ax ax bx ax,cx @@10
;AX = multiplicador CX = res. parcial ;DX,AX = valor dígito*multiplicador ;CX = nuevo valor parcial ;Repone multiplicador ;DX.AX = mult*base ;AX = res. parcial CX = nuevo ;multiplicador
@@99: ret
ENDP
AscNum
;VarCar ; Entrada: ; ;Salida: ; ;Registros:
PROC
CONVIERTE DE DÍGITO EN ASCII A VALOR BINARIO DL = dígito ASCII ‘0’….’9’, ‘A’….’F’’ BX = base (2= binario, 10=decimal, 16=hexadecimal) CF = 0: DX = valor binario equivalente CF = 1: mal carácter para esta base (DX es irrelevante) DX
ValCar cmp jbe sub
dl,'9' @@10 dl,7
;Verifica si es dígito hex ;Brinca si no ;Ajusta dígito hex a rango 3A..3F
dl,'0' dl,0f0h @@99 dh,dh dx,bx
;Convierte ASCII a decimal ;Verifica 4 bits altos (CF = 0) ;Brinca si error (no dígito o A-F) ;Convierte DL a 16 bits ;Compara con no. base (CF = 1 si bien)
@@10: sub test jnz xor cmp
@@99: cmc ret
ENDP
;Complementa para fijar bandera de error ;Regresa
ValCar
El procedimiento BinSASCDec convierte un número negativo a cadena ASCII decimal anteponiendo el signo negativo al exhibirlo. El procedimiento BinASCBin convierte una cadena binaria a cadena ASCII de números binarios, colocando en el registro BX la base de conversión. El procedimiento ASCBin convierte la cadena de entrada a mayúsculas, luego cuenta los AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-7
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
caracteres de la cadena; si no hay caracteres este procedimiento no hace nada y sale. Además prueba si la cadena tiene el signo "-", si es así salva el signo y llama a CarBase. Luego llama al procedimiento ASCNum, el cual convierte caracteres ASCII a binario; si CF es uno el carácter encontrado es ilegal. El procedimiento ValCar convierte dígito ASCII a binario, CF es uno el carácter es ilegal.
3.6
Capturar los módulos anteriores en el programa BINASC.ASM.
3.7
Ensamblar y poner en librería el programa BINASC.ASM
C>TASM /zi BINASC C>TLIB /E REM -+BINASC 3.8
Procedimientos para procesar parámetros en líneas de comandos de DOS.
%TITLE
"PROCESADOR (PARSER) DE PARÁMETROS EN LÍNEA DE COMANDOS DE DOS"
IDEAL DOSSEG MODEL ;
small
EQUs
LargoCola ColaCmndo
EQU EQU
0080h 0081h
;Sesgo del byte de longitud de parámetro ;Sesgo de parámetros
? 128 DUP (?)
;Número de parámetros ;128 bytes para las cadenas
DATASEG NumParam params
DW DB
CODESEG PUBLIC ;Separa ; ;Entrada: ;Salida:
CuentaPar, TraePar, TraeUnPar
RUTINA PRIVADA QUE BUSCA ESPACIOS, TABULADORES Y RETORNO DE CARRO
;Registros:
DS: SI apunta a carácter a verificar ZF = 1 (je) carácter es blanco, tabulador o retorno de carro ZF = 0 (jne) carácter separador AC
PROC
Separa mov cmp
al,[si] al,20h
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;Trae carácter en DS:SI ;¿Espacio ? 2-8
LENGUAJE ENSAMBLADOR 80386
je cmp je cmp
PRÁCTICA 2
@@10 al,09h @@10 al,0dh
;Si, brinca ;¿Tabulador ? ;Si, brinca ;¿Retorno de car.?
@@10: ret
ENDP
;Regresa
Separa
;CuentaPar ; ;Entrada: ;Salida: ; ;Registros:
PROC
REGRESA CONTEO DE LOS PARÁMETROS INTRODUCIDOS Ninguna DX = número de parámetros en línea de comando Al usar TraeUnPar, CX debe ser menor que el valor retornado DX
CuentaPar mov ret
dx,[NumParam]
;Trae valor de la variable ;Regresa
ENDP
CuentaPar
;TraePar ; ;Entrada: ; ; ;Salida: ; ;Registros:
OBTIENE LOS PARÁMETROS DE LA LÍNEA DE COMANDOS DS = PSP = prefijo del segmento del programa ES = segmento de datos del programa Llamar esta rutina antes de iniciar DS Parámetros globales llenos de cadenas ASCIIZ DS = segmento de datos del programa AL, BX, DX, SI, DS
PROC
TraePar
;
Inicia contador (CX), y registros índice (SI,DI)
xor mov inc mov mov ;
ch,ch cl,[ds:LargoCola] cx si,ColaCmndo di,offset params
;Parte alta de CX a cero ;CX = número de bytes introducidos ;Incluir RC al final ;Apunta a parámetros con SI
Salta espacios y tabs delanteros.
@@10: call jne inc
Separa @@20 si
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;Salta tabs. y espacios ;Brinca si no espacio ni tabulador ;Salta este carácter 2-9
LENGUAJE ENSAMBLADOR 80386
loop ;
PRÁCTICA 2
@@10
Copia cadenas de parámetros a parámetros globales.
@@20: push jcxz cld rep ;
cx @@30 movsb
;Salva CX para más tarde ;Omite movsb si cuenta = 0 ;Autoincrementa ;Copia CX bytes de DS:SI a ES:DI
Convierte blancos a nulos y pone NumParam.
@@30: push pop pop xor jcxz mov
es ds cx bx,bx @@60 si,offset params
;Salva ES en pila ;Hace DS = ES
Separa @@50 [byte ptr si],0 bx
;Verifica si blanco, tabulador o retorno de carro
si @@40
;Apunta a siguiente carácter ;Sigue hasta agotar CX
[NumParam],bx
; Salva número de parámetros
;Inicia conteo de parámetros ;Omite bucle si largo = 0 ;Apunta a parámetros con SI
@@40: call jne mov inc
;Brinca si no es separador ;Cambia separador a nulo ;Incrementa conteo de parámetros
@@50: inc loop
@@60: mov ret
ENDP
TraePar
;TraeUnPar ; Entrada: ; ;Salida: ;Registros:
OBTIENE DIRECCIÓN DEL PARÁMETRO PEDIDO POR NÚMERO
PROC
CS = número de parámetros (0 = primero) NOTA: CX debe ser menor que el número de parámetros
DI = sesgo de cadena ASCIIZ del parámetro AL, CX, DI
TraeUnPar xor mov
al,al di,offset params
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;AL = ASCII de terminador ;Apunta a cadena de parámetros 2-10
LENGUAJE ENSAMBLADOR 80386
jcxz cmp jae cld
PRÁCTICA 2
@@99 CX,[NumParam] @@99
;Si CX = 0, ya está hecho ;Salir si CX > número máximo ;Autoincrementa DI
@@10: scasb jnz @@10 loop @@10
;Examina si es nulo ;Repite hasta hallarlo ;Hasta agotar CX
@@99: ret
ENDP
TraeUnPar
END
;Fin de módulo PARAMS.ASM
3.9
Capturar los módulos anteriores con el nombre PARAMS.ASM
3.10
Ensamblarlos e introducirlos a la librería REM:
C>TASM /zi PARAMS C>TLIB /E REM -+PARAMS 3.11
Verificar la librería REM
C>TLIB REM,CON 3.12
Capturar el programa para convertir un número decimal a binario, hexadecimal; decimal sin signo y con signo.
%TITLE
"CONVIERTE NÚMEROS DECIMALES, BINARIOS Y HEXADECIMALES"
IDEAL DOSSEG MODEL STACK ;
small 256
EQUs
FDC rc nl LarMax
EQU EQU EQU EQU
0 13 10 40
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
;Fin de cadena ;Ret. de carro ;ASCII para nueva línea ;Máximo largo de cadena de entrada
2-11
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
DATASEG ClaveFin Saludo
apronta error binario hex decimal decimalS valor Respuesta
DB DB DB DB DB DB DB DB DB DB DW DB
;Código de error de DOS 0 valores decimales, binarios y hex' rc,nl,'Convierte rc,nl,'Dar el número a convertir en decimal' rc,nl,'Dar ENTER para salir',rc,nl,FDC rc,nl,nl,nl,'¿Número a convertir? ',FDC rc,nl,'ERROR: carácter ilegal en línea',FDC rc,nl,'Binario ............ :',FDC rc,nl,'Hexadecimal ........ :',FDC rc,nl,'Decimal sin signo .. :',FDC rc,nl,'Decimal con signo .. :',FDC ;Resultado de AscBin ? LarMax +1 DUP (?) ;Cadena para entrada/respuesta del ;usuario
CODESEG ;
De MANCADE.OBJ
EXTRN ;
De CADENAS.OBJ
EXTRN ;
LeeCadena:proc,SacaCadena:proc,NuevaLinea:proc
De BINASC.OBJ
EXTRN EXTRN ;
LargoCad:proc,CopiaCad:proc
BinAscHex:proc,BinSAscDec:proc,BinAscDec:proc BinAscBin:proc,AscBin:proc
De PARAMS.OBJ
EXTRN
TraePar:proc,CuentaPar:proc,TraeUnPar:proc
Inicia: mov mov call mov call and je mov call mov xchg call jmp
ax,@data es,ax TraePar ds,ax CuentaPar dx,dx normal cx,0 TraeUnPar si,offset Respuesta di,si CopiaCad short rep1
;Inicia ES con segmento de datos
di,offset saludo
;Apunta a bienvenida
;Trae parámetros de línea de comando ;inicia segmento ;¿Hubo parámetros ? ;No, brinca ;Trae primer parámetro ;SI apunta a buffer de entrada ;1er parámetro en cadena de entrada ;Salta a repetir (omite saludo)
normal: mov
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-12
LENGUAJE ENSAMBLADOR 80386
call ;
SacaCadena
PRÁCTICA 2
;Exhibe bienvenida
Apronta al usuario
Repite: mov call mov mov call
di,offset apronta SacaCadena di,offset Respuesta cx,LarMax LeeCadena
;Apunta apronta ;Exhibe apronta ;Trae respuesta del usuario ;Máxima longitud
call call jcxz call mov jnc mov call jmp
NuevaLinea LargoCad Salir AscBin [valor],ax seguir di,offset error SacaCadena repite
;Exhibe otra línea ;¿Usuario dio ENTER ? ;Si, sale (CX = 0) ;Convierte cadena a AX ;Pone resultado en variable ;Brinca si CF es 0 (no error) ;Caso contrario saca mensaje error. ;Exhibe error.
di,offset binario Sacacadena ax,[valor] cx,16 di,offset respuesta BinAscBin Sacacadena di,offset hex Sacacadena ax,[valor] cx,4 di,offset respuesta BinAscHex di,offset decimal Sacacadena ax,[valor] cx,1 di,offset respuesta BinAscDec Sacacadena di,offset decimalS Sacacadena ax,[valor] cx,1 di,offset respuesta BinSAscDec Sacacadena
;Apunta a etiqueta para binario ;Exhibe cadena ;Trae valor a convertir ;Exhibe 16 dígitos por lo menos ;Usa misma cadena de resultado ;Halla dígitos binarios ;Exhíbelos ;Apunta a etiqueta para hexadecimal ;Exhibe cadena ;Trae valor a convertir ;Exhibe 4 dígitos por lo menos ;Usa misma cadena de resultado ;Halla dígitos hex. call Sacacadena ;Exhíbelos ;Apunta a etiqueta para decimal ;Exhibe cadena ;Trae valor a convertir ;Exhibe un dígito por lo menos ;Usa misma cadena de resultado ;Halla dígitos decimales ;Exhíbelos ;Apunta a cadena ;Exhibe cadena ;Trae valor a convertir ;Exhibe un dígito ;Usa misma cadena de resultado ;Halla dígitos decimales ;Exhíbelos
rep1:
seguir: mov call mov mov mov call call mov call mov mov mov call mov call mov mov mov call call mov call mov mov mov call call
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-13
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
Salir: mov mov int
ah,4ch al,[ClaveFin] 21h
END inicia
; Fin de módulo CONVI.ASM
El programa exhibe el saludo y comentarios, por medio de otro letrero espera la entrada del número a convertir; una vez introducido el número, se llama a los procedimientos que se encuentran en el módulo BINASC.ASM, los cuales se encargan de hacer las operaciones pertinentes.
3.13
Ensamblar y crear el programa ejecutable mediante los comandos:
C>TASM /zi CONVI C>TLINK /v CONVI,,,REM. Si no se tiene el archivo TLINK, teclear:
C>LINK CONVI,,,REM 3.14
Ejecutar el programa con el comando:
C>CONVI y:
C>CONVI 34567 3.15
Este programa se puede depurar con Turbo Debugger mediante el siguiente comando:
C>TD CONVI.EXE 3.16
Ir a la ventana VIEW, en la opción REGS oprimir la tecla ENTER, hacer más chica la ventana con el ratón. Con F8 correr un procedimiento, con F7 ir paso a paso y con F9 correr el programa. Analizar con cuidado la conversión de un número ASCII a binario.
4.
TAREAS
4.1
Extender hasta 24 bits los números binarios soportados, según sugiere la tabla dada más abajo.
4.2
Hacer que el programa pueda convertir más de un parámetro.
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-14
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
4.3
Hacer que el programa sea más informativo con el usuario y exhibir un letrero con opción de realizar otro cálculo antes de salir del programa.
4.4
Introducir al programa el procedimiento Confirma y llamarlo para verificar la salida del programa, por si hay error.
4.5
Hacer un programa que escriba su propio nombre, incluyendo la ruta, de tal modo que si es cambiado de nombre con el comando REN de DOS reporte en nombre nuevo. Lo mismo si es movido o copiado a otro directorio.
NOTA:
Cuando se hagan modificaciones en un programa hay que ensamblarlo, meterlo a la librería o crear el ejecutable, según sea el caso.
COLUMNAS DEL NUMERO HEXADECIMAL 6 H E X 0 1 2 3 4 5 6 7 8 9 A B C D E F
5
DEC
0 1,048,576 2,097,152 3,145,728 4,194,304 5,242,880 6,291,456 7,340,032 8,388,608 9,437,184 10,485,760 11,534,336 12,582,912 13,631,488 14,680,064 15,728,640 7 6 5 4
4
3
2
H E X
DEC
H E X
DEC
H E X
DEC
H E X
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 65,536 131,072 196,608 262,144 327,680 393,216 458,752 524,288 589,824 655,360 720,896 786,432 851,968 917,504 983,040
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 4,096 8,192 12,288 16,384 20,480 24,576 28,672 32,768 36,864 40,960 45,056 49,152 53,248 57,344 61,440
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 256 512 768 1,024 1,280 1,536 1,792 2,048 2,304 2,560 2,816 3,072 3,328 3,584 3,840
0 1 2 3 4 5 6 7 8 9 A B C D E F
3 2 1 0
BYTE MAYOR
7654
3210
BYTE MEDIANO
1
DEC
0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 7654
H E X
DEC
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 3210
BYTE MENOR
Tabla para conversión de hexadecimal a decimal de 24 bits
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-15
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
EJEMPLOS DE CORRIDAS C:\SEM386>convi
Convierte valores decimales, binarios y hexadecimales Dar ENTER para salir
¿Número a convertir? 11001110101b Binario Hexadecimal Decimal sin signo Decimal con signo
0000011001110101 0675 1653 1653
¿Número a convertir? 1a3eh Binario Hexadecimal Decimal sin signo Decimal con signo
0001101000111110 1A3E 6718 6718
¿Número a convertir? C:\SEM386> C:\SEM386>convi 34567 Binario Hexadecimal Decimal sin signo Decimal con signo
1000011100000111 8707 34567 -30969
¿Número a convertir? -9817 Binario Hexadecimal Decimal sin signo Decimal con signo
1101100110100111 D9A7 55719 -9817
¿Número a convertir? 234d Binario Hexadecimal Decimal sin signo Decimal con signo
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
0000000011101010 00EA 234 234
2-16
LENGUAJE ENSAMBLADOR 80386
PRÁCTICA 2
¿Número a convertir? ff00h Binario Hexadecimal Decimal sin signo Decimal con signo
1111111100000000 FF00 65280 -256
¿Número a convertir? 11111 Binario Hexadecimal Decimal sin signo Decimal con signo
0010101101100111 2B67 11111 11111
¿Número a convertir? 12a3 -- ERROR: carácter ilegal en línea
¿Número a convertir? C:\SEM386>
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS
2-17
Nombre de archivo: practica 2 ensamblador 80386 Directorio: C:\Computacion V\practicas 80386 Plantilla: C:\WINDOWS\Application Data\Microsoft\Plantillas\Normal.dot Título: PRÁCTICA 2 Asunto: Prácticas de laboratorio de Computación V Autor: M. en C. Salvador Saucedo Flores Palabras clave: Comentarios: Fecha de creación: 05/07/02 04:00 P.M. Cambio número: 31 Guardado el: 22/07/02 12:46 P.M. Guardado por: Pablo Fuentes Ramos Tiempo de edición: 646 minutos Impreso el: 29/07/02 01:46 P.M. Última impresión completa Número de páginas: 17 Número de palabras: 2,442 (aprox.) Número de caracteres: 13,925 (aprox.)