肥马时代 发表于 2012-9-11 14:59:54

为什么第二次运行就没反应

本帖最后由 肥马时代 于 2012-9-12 10:08 编辑

学到直接定址表,突发奇想,结合端口,想在屏幕中间显式输入的0-9数字,于是写了下面的程序
;testins
assume cs:code,ds:data
;----------------------------------------
;data
;----------------------------------------
data segment
   ascii   db '0123456789'
   passcode db0bh,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
       je copy ;找到了就copy到显存
      inc bx ;这条不是就比较下一条(一共10条)
      loop f
; 循环结束说明0-9没有被按下
      jmp short next;就继续读键盘
copy:
      mov al,ascii
;在屏幕中间显式
      mov es:,al

      jmp short next
exit:
mov ax,4c00h
int 21h
code ends
end s

问题就是:我这个程序可以运行,但是在dos窗口只能运行一次,第二次敲进去没有反映,关掉重新打开dos窗口又能运行,请问这是什么情况

肥马时代 发表于 2012-9-12 10:08:46

各位大大们,帮帮忙啊

无星之夜 发表于 2012-9-14 08:01:24

。。。这个。。你少了个退出的je吧。。。je exit。
其他的我也不知道。。。

无星之夜 发表于 2012-9-14 08:06:12

来帮你顶一下吧。。。不过注意一个细节哦,你发现没有你输入的东西在dos的命令行窗口也出现了,就是说命令行在你程序运行后居然读到了你程序运行中输入的东西

肥马时代 发表于 2012-9-19 15:42:47

谢谢啊,我试试

肥马时代 发表于 2012-9-19 16:31:43

还是不行,不过我现在学到后面了,可以从键盘缓冲区读字符了,这样就不用这样处理了

dsaa 发表于 2013-6-16 10:21:32

过来学习一下。。。。
页: [1]
查看完整版本: 为什么第二次运行就没反应