装配:来自用户的输入值(不止一个输入)

Assembly : Input value from user (more then one input)

这是汇编中的一个函数,用于在 2 个字符串 "size" 和 "per"、
中获取用户的输入 但它只需要 1 个输入然后开始崩溃。

我需要帮助。提前谢谢你。

input:
mov si,0
lb :
mov ah,0
int 16h
cmp al,0x0d
je 2nd
mov [size + si],al
inc si
loop lb
2nd:
mov si,0
lb1:
mov ah,0
int 16h
mov [per + si],al
cmp al,0x0d
je 3rd
inc si
loop lb1
3rd:
ret

要创建循环,并不一定要使用 loop 指令!

在第一个循环中,将字符存储在 size 中并在 SI 中递增指针后,您需要始终跳回到循环的顶部.正确的指令是 jmp lb,无条件跳转到标签 lb.

input:
    mov si, 0
lb :
    mov ah, 0
    int 16h
    cmp al, 0x0d
    je  2nd
    mov [size + si], al
    inc si
    jmp lb              ; The unconditional jump
2nd:

在您的第二个循环中,在 SI 中递增指针后,您需要始终跳回到此循环的顶部。正确的指令是 jmp lb1,无条件跳转到标签 lb1.

    mov si, 0
lb1:
    mov ah, 0
    int 16h
    mov [per + si], al
    cmp al, 0x0d
    je  3rd
    inc si
    jmp lb1             ; The unconditional jump
3rd:
    ret

您应该注意的一件事是检查 ENTER 键 (ASCII 13):

  • 第一个循环检查它 存储在内存中之前,因此没有回车 return 附加到字符串 size
  • 第二个循环在 存储在内存中后检查它,因此 return 附加到字符串 per

这种差异可能不是您所期望的。