|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
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
|
|