汇编:来自用户的输入值(多于一个输入)

时间:2018-01-27 16:01:56

标签: assembly input bios emu8086

这是汇编中的一个函数,用于以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

1 个答案:

答案 0 :(得分:1)

要创建循环,不必使用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):

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

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