2013-11-22 1 views
0

Я использую nasm, и я должен выполнить эту программу сборки для класса, который должен получить пароль, сравнить с тем, который хранится в pass, и написать все, что действительно является паролем или но, по какой-то нечетной причине, при печати cade он дает мусор вместе со строкой, а когда печатать две другие, он печатает cade вместо contr и мусор, поэтому я не совсем уверен, что происходит, и если кто-то может помоги мне, я бы очень признателен.Отпечатано в выводе и неправильных строках

Вот макрос я использую, чтобы вывести строку

%macro inout 2 
mov ah,%2 
mov dx,%1 
int 21h 
%endmacro 

А вот это программа

[bits 16] 
%include "macros2.inc" 

[segment .data] 


cade: db 'Enter the password',0ah, 0dh,'$' 
invalida: db 'wrong password',0ah, 0dh,'$' 
valida: db 'valid password',0ah, 0dh,'$' 
pass: db '12345$' 
band: db 0 
contr: resb 10 

[segment .code] 
..start 
mov ax,data 
mov dx,ax 

inout cade,09h 
mov bx,contr 
mov ah,09h 
mov dx,cade 
int 21h 
leer: 
    mov ah,08h 
    int 21h 
    cmp al,0dh 
    je checa 
    mov [bx],al 
    inc bx 
    mov ah,02h 
    mov dl, "*" 
    int 21h 
    jmp leer 

checa: 
    lea di,[contr] 
    lea si, [pass] 
    dec si 
revisa: 

    loadsb 
    inc di 
    cmp [di],al 
    jne error 
    inc bx 
    inc di 
    cmp si,'$' 
    jl revisa 

mov ah,09h 
mov dx,valida 
int 21h 
jmp fin 

error: 
mov ah,09h 
mov dx,invalida 
int 21h 

fin: 
mov ah,4ch 
int 21h 















[bits 16] 
%include "macros2.inc" 

[segment .data] 


cade: db 'Introduzca la contrsena',0ah, 0dh,'$' 
invalida: db 'Contraseña no Valida',0ah, 0dh,'$' 
valida: db 'Contraseña valida',0ah, 0dh,'$' 
pass: db '12345$' 
band: db 0 
contr: resb 10 

[segment .code] 
..start 
mov ax,data 
mov dx,ax 

inout cade,09h 
mov bx,contr 
mov ah,09h 
mov dx,cade 
int 21h 
leer: 
    mov ah,08h 
    int 21h 
    cmp al,0dh 
    je checa 
    mov [bx],al 
    inc bx 
    mov ah,02h 
    mov dl, "*" 
    int 21h 
    jmp leer 

checa: 
    lea di,[contr] 
    lea si, [pass] 
    dec si 
revisa: 

    loadsb 
    inc di 
    cmp [di],al 
    jne error 
    inc bx 
    inc di 
    cmp si,'$' 
    jl revisa 

mov ah,09h 
mov dx,valida 
int 21h 
jmp fin 

error: 
mov ah,09h 
mov dx,invalida 
int 21h 

fin: 
mov ah,4ch 
int 21h} 
+0

Что такое 'inout cade, 09h'? –

+0

Забыл об этом, я макрос получает строчную метку и intrusciton для использования. – user2308612

ответ

0

не займет много времени, чтобы найти свою первую проблему ...

[segment .code] 
..start 
mov ax,data 
mov dx,ax 

Я думаю, вы хотите, чтобы это было ds, а не dx.

Я вижу, что вы изобретаете gets(). Как насчет проверки того, что вы не переполняете свой буфер?

Непонятно, что вы пытаетесь сделать после этого. Как насчет некоторых комментариев?

Смежные вопросы