作者rexkimta (冷杉林)
看板ASM
标题Re: [问题] 执行时出现NTVDM CPU 已经遇到不合法的 …
时间Mon Dec 31 22:30:20 2007
我和原po遇到同样的问题
本来也是按一下指定的热键(设为f10)会跳出那个视窗
後来我在display那里修改之後就变成按两次会这样,
据说热键enter热键会有奇怪的事发生……
然後这题变成bouns了,贴程式码上来不会有问题吧?
TITLE test1 (test.asm)
; Program Description:
; Author:
; Date Created:
; Last Modification Date:
CR EQU 0dh
LF EQU 0ah
.model small
.DATA
act BYTE 0
beginpos BYTE ?
str_store BYTE ' a',16 dup('$')
leng_store WORD 0
str_out1 BYTE 'HotKey Test!',0
.CODE
start: jmp init
main:
sti
push bp
mov bp, sp
push ax
push bx
push cx
push dx
push si
push di
push ds
getkey:
mov ax, @data
mov ds, ax
in al, 60h
cmp al, 44h
je display
;cmp al, 14h
;je backspace
cmp al, 1ch
je _enter
;cmp al, 39
;je space
store:
cmp act, 00h
jne readc
mov act, 01h
mov ah, 03h
mov bh, 00h
int 10h
mov beginpos, dl
readc:
jmp _exit
_enter:
cmp act, 01h
jne _nothing
mov ah, 03h
mov bh, 00h
int 10h
sub dl, beginpos
mov cl, dl
mov ch, 0
mov leng_store, cx
mov dl, beginpos
mov si, 0
nextchar:
mov ah, 02h
int 10h
mov ah, 08h
int 10h
mov str_store[si], al
mov ah, 02h
inc dl
inc si
loop nextchar
mov act, 00h
_nothing:
jmp _exit
display:
cmp act, 01h ;就是加接下来这两行,也就是说
jne _exit ;如果什麽都没有打就什麽事也不会发生
mov ah, 09h
mov dx, offset str_store
int 21h
_exit:
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
pop bp
jmp cs:[old_int9]
old_int9 DWORD ?
init:
mov ax, 3509h
int 21h
mov ax, @CODE
mov ds, ax
mov word ptr old_int9, bx
mov word ptr old_int9+2, es
mov dx, offset main
mov ax, 2509h
int 21h
mov ah, 62h
int 21h
mov dx, SEG zseg
sub dx, bx
mov ax, 3100h
int 21h
.STACK
zseg SEGMENT
zseg ENDS
END start
--
★ 辰星! 五 欢迎加入五行战斗牌的奇幻世界!
★ ★ 太白! 岁星! 星 官方网站:(内有讨论区)
★★ 镇星!荧惑! 连 http://cfe.myweb.hinet.net/
「当苍茫天穹中 那并非最闪亮 珠 PTT台大社版:NTU-CFE
但却最纯净的五颗星 连成一线时,!
天与地的共鸣 将永不止歇,其力量可至无限。」 ψrexkimta
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.223.155