输出中的垃圾和打印的错误字符串

时间:2013-11-22 23:24:13

标签: string assembly x86 nasm dos

我正在使用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}

1 个答案:

答案 0 :(得分:0)

不需要很长时间才能找到你的第一个问题...

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

我认为你希望它是ds,而不是dx

我看到你重新发明gets()。检查你没有溢出缓冲区怎么样?

在此之后你想要做什么并不太清楚。一些评论怎么样?