|
4鱼币
本帖最后由 肥马时代 于 2012-9-12 10:08 编辑
学到直接定址表,突发奇想,结合端口,想在屏幕中间显式输入的0-9数字,于是写了下面的程序
;testins
assume cs:code,ds:data
;----------------------------------------
;data
;----------------------------------------
data segment
ascii db '0123456789'
passcode db 0bh,02h,03h,04h,05h,06h,07h,08h,09h,0ah;这里存了0-9的通码
; 0 1 2 3 4 5 6 7 8 9
data ends
;----------------------------------------
;code
;----------------------------------------
code segment
s: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
;读键盘
next:
in al,60h
cmp al,1ch;如果按下enter就退出
;检查通码
mov cx,10
mov bx,0
f: cmp al,passcode[bx]
je copy ;找到了就copy到显存
inc bx ;这条不是就比较下一条(一共10条)
loop f
; 循环结束说明0-9没有被按下
jmp short next;就继续读键盘
copy:
mov al,ascii[bx]
;在屏幕中间显式
mov es:[160*12+40*2],al
jmp short next
exit:
mov ax,4c00h
int 21h
code ends
end s
问题就是:我这个程序可以运行,但是在dos窗口只能运行一次,第二次敲进去没有反映,关掉重新打开dos窗口又能运行,请问这是什么情况
|
|