Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Asm]Domanda su Cmp

  1. #1

    [Asm]Domanda su Cmp

    Da quanto ho capito, quando faccio cmp dst, src in asm e come se facessi sub dst, src ma senza pero modificare nulla.
    Cioe alla fine ho(in metacodice):
    Result := dst-src
    E se il risultato è zero sono uguali(e lo ZF(0 flag) viene settato e poi usato per i vari Jump) se sono no i 2 operandi sono diversi.
    Ora........ho capito o c'è qualcosa nel mio ragionamente che falla?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    bè io non so molto di asm, ma so che se fai

    cmp ax,cx

    poi se metti

    jz etichetta

    va alla etichetta se la condizione è vera; se inceve metti jnz, salta se la condizione è falsa...
    www.vape04.too.it - informatica, elettronica e tante altre cose.
    @LFEO§OFT GREEnOS

  3. #3
    codice:
    [BITS 16]
    [ORG 0100h] ; for .com
    
    [SECTION .text]
    
    start:
    	mov ax, 100 ; set ax to 10
    	cmp ax, 10; compare ax with 10 values
    	je OK ; jump if ax = 10
    	JNE NO ; jump if ax NOT 10
    OK:
    	mov dx, Message_OK ; Message_OK = ds:dx
    	or ah, ah ; set ah to 0
    	mov ah, 09h ; set int 21h service 09h
    	int 21h
    	ret 
    NO:
    	mov dx, Message_NO ; Message_NO = ds:dx
    	or ah, ah ; set ah to 0
    	mov ah, 09h ; set int 21h service 09h
    	int 21h
    	ret 
    	
    	; set int 21h service 4Ch(exit)
    	mov ah, 4Ch
    	int 21h
    
    [SECTION .data]
    
    Message_OK db 'AX is equals 10', 13, 10, '$'
    Message_NO db 'AX is NOT equals 10', 13, 10, '$'
    Indi sto code in C sarebbe + o -
    codice:
    #include <stdio.h>
    
    int main()
    {
        unsigned int a = 0;
        if(a == 0){
           puts("AX is equals 10");
        }else {
           puts("AX is NOT equals 10");
        }
        return 0;
    }
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Il comando cmp indica all' A.L.U. che dovrà prepararsi a fare un confronto tra due entità: Sorgente e Destinazione.
    Di seguito, ci sarà la condizione che dovrà essere verificata:
    JE : jump egual (salta se Sorgente e Destinazione sono uguali)
    JNE: jump non egual (salta se Sorgente e Destinazione non sono uguali)
    JZ : jump zero
    Ce ne sono altre, vedi: Giobe Site

  5. #5
    Originariamente inviato da Luc@s
    codice:
    [BITS 16]
    [ORG 0100h] ; for .com
    
    [SECTION .text]
    
    start:
    	mov ax, 100 ; set ax to 10
    	cmp ax, 10; compare ax with 10 values
    	je OK ; jump if ax = 10
    	JNE NO ; jump if ax NOT 10
    OK:
    	mov dx, Message_OK ; Message_OK = ds:dx
    	or ah, ah ; set ah to 0
    	mov ah, 09h ; set int 21h service 09h
    	int 21h
    	ret 
    NO:
    	mov dx, Message_NO ; Message_NO = ds:dx
    	or ah, ah ; set ah to 0
    	mov ah, 09h ; set int 21h service 09h
    	int 21h
    	ret 
    	
    	; set int 21h service 4Ch(exit)
    	mov ah, 4Ch
    	int 21h
    
    [SECTION .data]
    
    Message_OK db 'AX is equals 10', 13, 10, '$'
    Message_NO db 'AX is NOT equals 10', 13, 10, '$'
    Indi sto code in C sarebbe + o -
    codice:
    #include <stdio.h>
    
    int main()
    {
        unsigned int a = 0;
        if(a == 0){
           puts("AX is equals 10");
        }else {
           puts("AX is NOT equals 10");
        }
        return 0;
    }
    oppure per gli .exe:

    codice:
    .model small
    .stack 100h
    
    .data
    
    stringa1 db 'AX è uguale a 10$'
    stringa2 db 'AX non è uguale a 10$'
    
    .code
    
    mov ax,@data
    mov ds,ax
    
    mov ax, 10 ;========qua puoi mettere qualunque valore=======
    
    cmp ax, 10
    jz ok
    
    lea dx, stringa2
    mov ah,9h
    int 21h
    
    jmp fine
    
    ok:
    lea dx, stringa1
    mov ah, 9h
    int 21h
    
    fine:
    mov ah,4ch
    int 21h
    
    end
    sub destiny, source serve per sottrarre..
    www.vape04.too.it - informatica, elettronica e tante altre cose.
    @LFEO§OFT GREEnOS

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    52
    si, se nn ricordo male e' come hai detto...
    il cmp fa la sottrazione x confrontare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.