Je souhaite comparer deux chaînes en assemblage x86. L'un d'eux est lu à partir d'un fichier et l'autre est lu sur le clavier et les deux sont enregistrés dans une variable.Comparer deux chaînes en assemblage x86
Je n'ai aucune idée de comment comparer ces deux variables. Je serai tellement excité si quelqu'un me donnait un exemple ou quelque chose qui pourrait m'aider.
.386
.model flat, stdcall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
includelib msvcrt.lib
include Macro.asm
extern exit: proc
extern printf:proc
extern scanf:proc
extern strlen:proc
extern fscanf:proc
extern fopen:proc
extern fprintf:proc
extern fclose:proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
public start
.data
format_sir db "%s", 0
format_afisare db "%s", 0
format_zecimal db "&d", 0
mod_citire db "r",0
mod_scriere db "w",0
pointer_fisier_sursa dd 0
pointer_fisier_destinatie dd 0
nume_fisier db 20 dup(0)
fpass db 20 dup(0)
fuser db 20 dup(0)
user db 20 dup(0)
pass db 20 dup(0)
.code
start:
;read file name
citire_fisier:
push offset nume_fisier
push offset format_sir
call scanf
add esp,8
;open the file in read mode
deschide_fisier_citire nume_fisier, mod_citire, pointer_fisier_sursa
cmp pointer_fisier_sursa,0
jne citire_user_parola
jmp citire_fisier
citire_user_parola:
;read from file
Push offset fuser
Push offset format_sir
Push pointer_fisier_sursa
Call fscanf
Add esp,12
push offset fpass
push offset format_sir
push pointer_fisier_sursa
call fscanf
add esp,12
;read from keyboard
push offset user
push offset format_sir
call scanf
add esp,8
push offset pass
push offset format_sir
call scanf
add esp,8
Macro.asm:
deschide_fisier_citire macro nume_fisier, mod_deschidere, pointer_fisier_sursa
push offset mod_deschidere
push offset nume_fisier
call fopen
mov pointer_fisier_sursa ,eax
add esp,8
endm
inchidere_fisier macro pointer_fisier_sursa
push pointer_fisier_sursa
call fclose
add esp,4
endm
Pour comparer chaînes, utilisez 'rep cmpsb'. – fuz
Où sont les variables de chaîne que vous voulez comparer? La seule chaîne que je vois est "nume_fisier" (parce que c'est le type 'db 20 dup'). –
Vous avez raison. J'avais tort dans la déclaration. J'ai besoin de comparer fpass avec pass et fuser avec l'utilisateur. – Ral