鱼C论坛

 找回密码
 立即注册
查看: 2184|回复: 2

[已解决]这个程序删除的会出现崩溃现象

[复制链接]
发表于 2019-4-15 17:30:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在这里设置了一个:
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[si], al
                mov byte ptr es:[bx + si + 1920], al
                mov byte ptr es:[bx + si + 1920 + 1], 2
                inc bx
                inc si
input_end:
                ret
                
backspace:   ;这块这块删除后会出现崩溃不知道原因哪位大神能给看看指点一下麻烦了
                dec bx
                dec si
                mov byte ptr table[si],0
                mov byte ptr es:[bx + si + 1920], ' '
                mov byte ptr es:[bx + si + 1920 + 1], 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[si], al
                mov byte ptr es:[bx + si + 1920], al
                mov byte ptr es:[bx + si + 1920 + 1], 2
                inc bx
                inc si
input_end:
                ret
                
backspace:   ;这块这块删除后会出现崩溃不知道原因哪位大神能给看看指点一下麻烦了
                dec bx
                dec si
                mov byte ptr table[si],0
                mov byte ptr es:[bx + si + 1920], ' '
                mov byte ptr es:[bx + si + 1920 + 1], 0
                jmp short start_1
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[si], al
                mov byte ptr es:[bx + si + 1920], al
                mov byte ptr es:[bx + si + 1920 + 1], 2
                inc bx
                inc si
input_end:
                ret
                
backspace:   ;这块这块删除后会出现崩溃不知道原因哪位大神能给看看指点一下麻烦了
                dec bx
                dec si
                mov byte ptr table[si],0
                mov byte ptr es:[bx + si + 1920], ' '
                mov byte ptr es:[bx + si + 1920 + 1], 0
                jmp short start_1
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-18 17:20:49 | 显示全部楼层

谢谢疏忽大意了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 07:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表