Devo confrontare due numeri presenti in memoria in assembly

di il
3 risposte

Devo confrontare due numeri presenti in memoria in assembly

Ho provato a scrivere il codice, ma non stampa nulla

allego qui il codice

come commento c'è la consegna 

; Scrivere un programma in assembly x86 che determini il massimo tra due interi a 64bit situati in memoria alle locazioni di indirizzo 'num0' e 'num1'
; memorizzando il risultato alla locazione di registro 'nummax'

section .data
num0 dq 30
num1 dq 25
lnum0 equ $-num0
lnum1 equ $-num1
nummax dq 0
lnumm equ $-nummax

section .bss

section .text
global _start

_start:
mov esi, num0
mov edi, num1
cmp esi, edi   ;confronta i valori presenti in num0(esi) e num1(edi)
jnc _snum0    ; se vero (num0>num1) salta alla stampa di num0
jc _snum1    ; se falso (num0<num1) salta alla stampa di num1

_snum0:
mov eax, 4
mov ebx, 1
mov ecx, num0
mov edx, lnum0
int 0x80
;mov nummax, [esi]

_snum1:
mov eax, 4
mov ebx, 1
mov ecx, num0
mov edx, lnum0
int 0x80
;mov nummax, edi

;_smax:
; mov eax, 4
; mov ebx, 1
; mov ecx, [nummax]
; mov edx, lnumm
; int 0x80

_fine: 
 mov eax, 1
mov ebx, 0
int 0x80

3 Risposte

  • Re: Devo confrontare due numeri presenti in memoria in assembly

    Cosa e dove stampi nel codice? Non puoi stampare un valore binario ma una stringa ASCII.

    E poi non ti viene chiesto di stampare i numeri e ti viene chiesto di stampare nummax e non lo fai 

    Usa o tag code per il codice

  • Re: Devo confrontare due numeri presenti in memoria in assembly

    27/03/2023 - oregon ha scritto:


    Cosa e dove stampi nel codice? Non puoi stampare un valore binario ma una stringa ASCII.

    E poi non ti viene chiesto di stampare i numeri e ti viene chiesto di stampare nummax e non lo fai 

    Usa o tag code per il codice

    si mi sono accorto successivamente che non devo stampare

    il codice, tolte le stampe, è questo

    quando lo eseguo non mi da errori e logicamente non stampa nulla, quindi mi sto rivolgendo a voi per chiedervi se il codice qui sotto è corretto oppure no

    se no cosa devo modificare?

    ; Scrivere un programma in assembly x86 che determini il massimo tra due interi a 64bit situati in memoria alle locazioni di indirizzo 'num0' e 'num1'
    ; memorizzando il risultato alla locazione di registro 'nummax'

    section .data
    num0 dq 30
    num1 dq 25
    lnum0 equ $-num0
    lnum1 equ $-num1
    nummax dq 0
    section .bss

    section .text
    global _start

    _start:
    mov rsi, qword [num0]
    mov rdi, qword [num1]
    cmp rsi, rdi   ;confronta i valori presenti in num0(esi) e num1(edi)
    jg _snum0    ; se vero (num0>num1) salta alla stampa di num0
    mov rax, rbx    ;altrimenti carica rbx in rax

    _snum0:
    mov qword [nummax], rax

    _fine: 
    mov eax, 1
    mov ebx, 0
    int 0x80

  • Re: Devo confrontare due numeri presenti in memoria in assembly

    In nummax memorizza 0 se è più grande num0 oppure 1 se è più grande num1

    Prova

Devi accedere o registrarti per scrivere nel forum
3 risposte