我正在使用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 :(得分:0)
不需要很长时间才能找到你的第一个问题...
[segment .code]
..start
mov ax,data
mov dx,ax
我认为你希望它是ds
,而不是dx
。
我看到你重新发明gets()
。检查你没有溢出缓冲区怎么样?
在此之后你想要做什么并不太清楚。一些评论怎么样?