装配:来自用户的输入值(不止一个输入)
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。
这种差异可能不是您所期望的。
这是汇编中的一个函数,用于在 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。
这种差异可能不是您所期望的。