![]() | 第6章 文字输出与键盘输入 | -139- | |||||||||||||||||||
code main get_key: is_j: is_k: is_m: |
segment assume proc mov mov mov mov int mov int mov mov mov int or cmp jnz dec jns mov jmp cmp jnz dec jns mov jmp cmp jnz inc cmp jb mov jmp cmp jnz inc cmp jb mov |
cs:code far ax,data ds,ax dx,offset keymsg ah,9 21h ah,3 10h current,dh byte ptr current+1,dl ah,0 16h al,20h al,'i' is_j byte ptr current mov_cur byte ptr current,24 mov_cur al,'j' is_k byte ptr current+1 mov_cur byte ptr current+1,79 mov_cur al,'k' is_m byte ptr current+1 byte ptr current+1,79 mov_cur byte ptr current+1,0 mov_cur al,'m' exit byte ptr current byte ptr current,24 mov_cur byte ptr current,0 |
;初始化DS寄存器 ;输出字符串KEYMSG ;利用10H中断的03功能 ;取得当前光标位置 ;保存光标当前位置 ;等待键盘输入 ;将输入的字符转换成小写字母 ;输入的是'i'键吗? ;不是'i'键,转IS_J继续 ;光标所在行号减1 ;如果光标行号仍不小于0,则移动光标 ;若光标行号小于0,将其移动到屏幕底部 ;转MOV_CUR移动光标 ;输入的是'j'键吗? ;不是'j'键,转IS_K继续 ;光标所在列号减1 ;若光标列号不小于0,则移动光标 ;若光标列号小于0,将其移动至屏幕右端 ;转MOV_CUR移动光标 ;输入的是'k'键吗? ;不是'k'键,转IS_M继续 ;光标所在列号加1 ;光标列号大于79吗? ;小于79则移动光标 ;大于79则将光标移动到屏幕最左端 ;转MOV_CUR移动光标 ;输入的是'm'键吗? ;不是'm'键,转EXIT结束 ;光标所在行号加1 ;光标行号大于24吗? ;小于24则移动光标 ;大于24则将光标移动到屏幕顶部 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |