elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  ¡¡¡Ayuda con entender logica de lenguaje ensamblador en nasm!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¡¡¡Ayuda con entender logica de lenguaje ensamblador en nasm!!!  (Leído 3,272 veces)
Broster27

Desconectado Desconectado

Mensajes: 2


Ver Perfil
¡¡¡Ayuda con entender logica de lenguaje ensamblador en nasm!!!
« en: 22 Abril 2022, 00:00 am »

Hola, soy nuevo por aquí y al estar investigando sobre nasm, encontré este foro
El caso es que estoy estudiando ingeniería en computación y me imparten una materia en la cual uso lenguaje ensamblador en nasm.
Estoy practicando con algunos ejercicios y tengo duda en como realizar uno.
Lo primero que debe hacerse es hacer, por ejemplo, mov eax, 1234ABCDh
Después de eso necesito crear una rutina que me imprima nibble, byte, word y dword
Con nibble debe salir D, byte debe salir CD, word debe salir ABCD y en dword debe salir 1234ABCD

Con la rutina que estaba creando solo puedo imprimir el nibble, de ahi en fuera me quede trabado en realizar lo demás, agradecería muchísimo el apoyo.

Entiendo que se deben usar corrimientos, rotaciones y así pero no estoy seguro como implementarlo.

Tengo unas rutinas creadas en clase que son printHex y printNumBase, la primera es para imprimir cualquier valor en hexadecimal y la segunda es para imprimir algun valor a hexadecimal, octal, binario, decimal dependiendo la base, esos los puse para tomarlos como referencia, la rutina que quiero usar es la de printHexx.

Puse también usar la librería porque para printNumBase se ocupa la librería pero con lo que estoy haciendo creo que no es muy necesario la librería.   

Este es mi código

%include "pc_io.inc"

section .data ; Datos inicializados
NL: db 13, 10
NL_L: equ $-NL
msg1: db "-----------PrintHex-------- "
msg1_L: equ $-msg1
msg2: db " Ejemplo 1: "
msg2_L: equ $-msg2
msg3: db " Ejemplo 2: "
msg3_L: equ $-msg3
msg4: db " Ejemplo 3: "
msg4_L: equ $-msg4
msg5: db " Ejemplo 4: "
msg5_L: equ $-msg5
orig: db " Original: "
orig_L: equ $-orig

section .bss ; Datos no inicializados
cadena resb 16
cad resb 16
cad1 resb 64
cad1_L equ $-cad1
A resb 64

section .text
global _start:

_start:


;-----inicio-----------
mov ecx, msg1
mov edx, msg1_L
call imprimir
call salto

mov ecx, orig
mov edx, orig_L
call imprimir

mov eax, 1234ABCDh
mov esi, cad
call printHex
call salto

mov ecx, msg2
mov edx, msg2_L
call imprimir

mov dword[A], eax
mov dl, 8
mov esi, cadena
call printHexx
call salto

;---------termino--------
mov eax, 1
mov ebx, 0
int 80h

salto:
push eax
push ebx
push ecx
push edx

mov eax, 4
mov ebx, 1
mov ecx, NL
mov edx, NL_L
int 80h

pop edx
pop ecx
pop ebx
pop eax
ret

imprimir:
push eax
push ebx
push ecx
push edx

mov eax, 4
mov ebx, 1
int 80h

pop edx
pop ecx
pop ebx
pop eax
ret

;printHex:
;pushad
;mov edx, eax
;mov ebx, 0fh
;mov cl, 28
;.nxt: shr eax,cl
;.msk: and eax,ebx
;cmp al, 9
;jbe .menor
;add al,7
;.menor:add al,'0'
;mov byte [esi],al
;inc esi
;mov eax, edx
;cmp cl, 0
;je .print
;sub cl, 4
;cmp cl, 0
;ja .nxt
;je .msk
;.print: mov eax, 4
;mov ebx, 1
;sub esi, 8
;mov ecx, esi
;mov edx, 8
;int 80h
;popad
;ret

printHexx:
pushad
and eax,0xf
cmp al,10
jb num
add al,7
shl al,cl
num:  add al,0x30    
call putchar
.print: mov eax, 4
mov ebx, 1
sub esi, 8
mov ecx, esi
mov edx, 8
int 80h
popad
ret


;printNumBase:
;pushad
;mov edi,0 ;usaremos como contador
;@@up:
;mov edx,0 ;para usar con EAX
;div ebx ;EAX = EDC:EAX/EBX ;EDX residuo
;cmp edx, 9
;jbe @@less
;add edx, 7
;@@less:
;add edx, 30h
;mov byte[esi + edi], DL
;inc edi
;cmp eax, 0
;je @@down
;jmp @@up
;@@down:
;mov eax,0h
;@@ciclo:
;dec edi
;mov AL, [esi+edi]
;cmp AL,0h
;je @@salir
;call putchar
;jmp @@ciclo
;@@salir:
;popad
;ret


« Última modificación: 22 Abril 2022, 00:33 am por Broster27 » En línea

BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: ¡¡¡Ayuda con entender logica de lenguaje ensamblador en nasm!!!
« Respuesta #1 en: 22 Abril 2022, 01:37 am »

Lo primero que debe hacerse es hacer, por ejemplo, mov eax, 1234ABCDh
Después de eso necesito crear una rutina que me imprima nibble, byte, word y dword
Con nibble debe salir D, byte debe salir CD, word debe salir ABCD y en dword debe salir 1234ABCD
(...)
Entiendo que se deben usar corrimientos, rotaciones y así pero no estoy seguro como implementarlo

Hola, no hace falta rotar bits, es solamente operaciones de and al registro eax:



Código
  1. #include <cstdio>
  2. #include <cstdint>
  3.  
  4. extern "C" void printHex(uint32_t uiNumber)
  5. {
  6.    printf("%X\n", uiNumber);
  7. }
  8.  
  9. int main(int argc, char*argv[])
  10. {
  11.    asm(
  12.        "movl $0x1234ABCD, %eax;\r\n"
  13.        "andl $0x0F, %eax;\r\n"
  14.        "pushl %eax;\r\n"
  15.        "call printHex;\r\n"
  16.        "addl $0x04, %esp;\r\n"
  17.  
  18.        "movl $0x1234ABCD, %eax;\r\n"
  19.        "andl $0xFF, %eax;\r\n"
  20.        "pushl %eax;\r\n"
  21.        "call printHex;\r\n"
  22.        "addl $0x04, %esp;\r\n"
  23.  
  24.        "movl $0x1234ABCD, %eax;\r\n"
  25.        "andl $0xFFFF, %eax;\r\n"
  26.        "pushl %eax;\r\n"
  27.        "call printHex;\r\n"
  28.        "addl $0x04, %esp;\r\n"
  29.  
  30.        "movl $0x1234ABCD, %eax;\r\n"
  31.        "pushl %eax;\r\n"
  32.        "call printHex;\r\n"
  33.        "addl $0x04, %esp;\r\n"
  34.    );
  35.  
  36.    return 0;
  37. }


B#


En línea



Broster27

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: ¡¡¡Ayuda con entender logica de lenguaje ensamblador en nasm!!!
« Respuesta #2 en: 22 Abril 2022, 05:38 am »

Una disculpa por responder hasta ahorita, la verdad no lo había pensado así y creo que me lo estaba complicando mas de lo que parece, te agradezco mucho que hayas respondido y por tu ayuda! 
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calculadora en Lenguaje Ensamblador - Linux x86 & NASM
ASM
nicoobe 5 23,483 Último mensaje 27 Febrero 2012, 02:33 am
por nicoobe
AYUDA CON LENGUAJE ENSAMBLADOR
ASM
nuru_chan 1 3,234 Último mensaje 12 Diciembre 2012, 18:12 pm
por Eternal Idol
Entender la lógica de un bucle while en python.-
Scripting
NOB2014 6 4,042 Último mensaje 20 Noviembre 2017, 15:48 pm
por NOB2014
Duda sobre ensamblador (NASM), IDE SASM
ASM
UsuarioZ 2 4,060 Último mensaje 9 Octubre 2020, 23:00 pm
por UsuarioZ
MOVIDO: Duda sobre ensamblador (NASM), IDE SASM
Programación General
MCKSys Argentina 0 2,370 Último mensaje 8 Octubre 2020, 11:09 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines