奥普瓯江 发表于 2019-4-15 17:30:12

这个程序删除的会出现崩溃现象

我在这里设置了一个:
cmp ah, 0e
je backspace
然后在按回车但是为什么一按回车就崩溃呢?
我感觉我的逻辑没有错误的地方啊

assume cs:code, ds:data
data segment
                table db 128 dup (0)
data ends

code segment
start:
                mov si, 0
                mov ax, 0b800h
                mov es, ax
                mov bx, 0
start_1:
                mov ah, 0
                int 16h
               
                cmp ah, 1ch
                je over_end
               
                cmp ah, 0eh
                je backspace
               
                call input
               
                jmp short start_1
over_end:
                mov ax, 4c00h
                int 21h
               
input: ;判断是否为数字
                cmp al, 30h
                jae input_1                ;无符号大于等于0则转移
                jmp short input_end
input_1:
                cmp al, 39h                ;无符号小于等于9则转移
                jbe input_4
input_2: ;判断是否为小写英文字母
                cmp al, 61h
                jae input_3
                jmp short input_end
input_3:
                cmp al, 7ah
                jbe input_4
                jmp short input_end
input_4:
                mov byte ptr table, al
                mov byte ptr es:, al
                mov byte ptr es:, 2
                inc bx
                inc si
input_end:
                ret
               
backspace:   ;这块这块删除后会出现崩溃不知道原因哪位大神能给看看指点一下麻烦了
                dec bx
                dec si
                mov byte ptr table,0
                mov byte ptr es:, ' '
                mov byte ptr es:, 0
                jmp short start_1
code ends
end start

人造人 发表于 2019-4-15 22:38:57

assume cs:code, ds:data
data segment
                table db 128 dup (0)
data ends

code segment
start:
                ; ^_^
                mov        ax, data
                mov        ds, ax
               
                mov si, 0
                mov ax, 0b800h
                mov es, ax
                mov bx, 0
start_1:
                mov ah, 0
                int 16h
               
                cmp ah, 1ch
                je over_end
               
                cmp ah, 0eh
                je backspace
               
                call input
               
                jmp short start_1
over_end:
                mov ax, 4c00h
                int 21h
               
input: ;判断是否为数字
                cmp al, 30h
                jae input_1                ;无符号大于等于0则转移
                jmp short input_end
input_1:
                cmp al, 39h                ;无符号小于等于9则转移
                jbe input_4
input_2: ;判断是否为小写英文字母
                cmp al, 61h
                jae input_3
                jmp short input_end
input_3:
                cmp al, 7ah
                jbe input_4
                jmp short input_end
input_4:
                mov byte ptr table, al
                mov byte ptr es:, al
                mov byte ptr es:, 2
                inc bx
                inc si
input_end:
                ret
               
backspace:   ;这块这块删除后会出现崩溃不知道原因哪位大神能给看看指点一下麻烦了
                dec bx
                dec si
                mov byte ptr table,0
                mov byte ptr es:, ' '
                mov byte ptr es:, 0
                jmp short start_1
code ends
end start

奥普瓯江 发表于 2019-4-18 17:20:49

人造人 发表于 2019-4-15 22:38


谢谢疏忽大意了
页: [1]
查看完整版本: 这个程序删除的会出现崩溃现象