【问题标题】:String buffer in assembly code汇编代码中的字符串缓冲区
【发布时间】:2015-11-26 23:17:28
【问题描述】:

我刚刚结束了我的代码,它允许覆盖您的密码。它是这样的(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, '$'

现在我需要打印真正的密码。我知道字符串缓冲区是必须的以及缓冲区的声明应该是什么样子,但我真的不知道如何使用它并使其工作。 求救:) 干杯。

【问题讨论】:

    标签: string assembly buffer


    【解决方案1】:

    由于您的程序允许输入 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 是没有用的。

    【讨论】:

    • @Milo 如果此答案对您有所帮助并解决了您的问题,请考虑接受该答案。有关如何接受以及为什么接受的更多信息,请参阅此 SO 信息:meta.stackexchange.com/a/5235/271768
    猜你喜欢
    • 2012-07-07
    • 2017-04-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多