| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 624 人关注过本帖
标题:麻烦帮忙看下,谢谢
只看楼主 加入收藏
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:5 
麻烦帮忙看下,谢谢
模仿王爽汇编书第294页列程 很奇怪我输入,删除都很正常但再次输入就不显示了,比如说我输入 1 2 3 4 这4个字符,然后删掉3和4再输入5和6 ,这时5和 6不会在3和4位置出现,我跟踪各个寄存器觉的是正常 没有头续,麻烦帮忙,谢谢哈

assume cs:code
code segment
main:
call showchar
mov ax,4c00h
int 21h

showchar:     ;子程序   di用于屏幕定位 si用于内存定位
push ax
push es
push di
push si

jmp start
nul  db 0,240 dup(0)    ;nul[0]用来保存字串长度,num[0+?]处开始保存字符串(长度最多为240)

start:
mov ax,0B800h
mov es,ax
mov di,0
mov si,0
begin:     ;这里开始处理用户字串
mov si,0     ;si置0,方便定位
sub di,2     ;把屏幕上显示位置减2,下面加回来方便定位

do:
mov ah,0
int 16h     ;执行int16h后ah保存字符扫描码,al保存字符ascii码
cmp al,32              ;ascii码>=32为字符显示,小于为退格和回车
jb nochar     ;如果用户输入不是字符即(回车和退格)
cmp nul,240     ;是字符,判断当前字符总数是否小于240
ja exit     ;超过退出
inc si     ;否则定位nul中要保存字符位置
add di,2             ;定位屏幕上要显示位置
mov nul[si],al    ;把字符保存到内存
inc nul     ;字符总数+1
mov es:[di],al    ;在屏幕上显示输入的字符
jmp do

nochar:     ;处理删除键和回车键
cmp al,8           ;退格键?
je backspace    ;处理退格键
cmp al,13     ;回车?
je ent     ;处理回车键
jmp do     ;都不是回到字符输入点

backspace:     ;退格键
cmp nul,0     ;在执行退格键前必须判断当前字符串里是否有字符
jna    do     ;nul<=0(无字符)回到字符输入点
dec nul     ;有字符则总数减1
mov nul[si],0       ;把nul[si]位置内容置0(内存中字符删除)
dec si     ;修改内存字符串si位置
mov es:[di],0      ;把屏幕上字符删除
sub di,2             ;修改屏幕di位置
jmp do

ent:     ;回车
jmp exit

exit:
pop si
pop di
pop es
pop ax
ret
code ends
end main
更多 0
搜索更多相关主题的帖子: start 字符串 子程序 寄存器 
2014-04-07 23:52
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:20 
mov di,0
mov si,0
begin:     ;这里开始处理用户字串
mov si,0     ;si置0,方便定位
sub di,2     ;把屏幕上显示位置减2,下面加回来方便定位
//di跑哪去了
2014-04-08 09:25
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
add di,2             ;定位屏幕上要显示位置
mov nul[si],al    ;把字符保存到内存
inc nul     ;字符总数+1
mov es:[di],al    ;在屏幕上显示输入的字符
//从‘00’处开始输入,好像毛病还真不在这里
2014-04-08 09:31
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
收藏
得分:0 
这个很奇怪,比如说我输入 1 2 3 4 5然后册掉4和5,然后再输入5 6 7 8按理说应该在 4和5位置显示5 6但是字符不显示,可奇怪是7和8倒全正常显示
2014-04-08 17:44
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
收藏
得分:0 
...求教高手哈
2014-04-09 20:16
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
收藏
得分:0 
结贴哈mov es:[di],0这句得改成mov byte ptr es:[di],0
2014-04-09 22:31
快速回复:麻烦帮忙看下,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017536 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved