汇编代码中的字符串缓冲区

时间:2015-11-26 23:17:29

标签: string assembly buffer

我刚刚结束了我的代码,可以覆盖您的密码。就像这样(FASM):

org 100h

mov cx, 16

petla:
mov ah,08h
int 21h
cmp al,0dh
je OK
mov ah,02h
mov dl,42
int 21h

cmp cx,0
je Fail
loop petla

Fail:

mov dl, 0ah
int 21h
mov dx, pass2
mov ah,9
int 21h
jmp koniec

OK:

mov dl, 0ah
int 21h
mov dx, pass
mov ah,9
int 21h
jmp koniec


koniec:
mov ah,4ch
int 21h

pass db 'Password OK', 0Ah, 0Dh, '$'
pass2 db 'Password Fail', 0Ah, 0Dh, '$'

现在我需要打印正版密码。我知道字符串缓冲区是必须的,缓冲区的声明应该如何,但我真的不知道如何使用它并让它工作。 打电话求救:) 欢呼声。

1 个答案:

答案 0 :(得分:2)

由于您的程序允许输入 15个字符的密码,您可以使用以下命令设置缓冲区:

Buffer db 16 dup ("$")

petla 循环之前初始化DI寄存器,并通过stosb指令将DOS函数中的ASCII代码放入缓冲区:

  mov  di, Buffer
  mov  cx, 16
petla:
  mov  ah,08h
  int  21h
  cmp  al,0dh
  je   OK
  stosb
  mov  ah,02h
  mov  dl,42
  int  21h
  ;;;cmp cx,0
  ;;;je Fail
  loop petla

请注意,在代码中的loop指令之前,对CX = 0的计算是没用的。