怎么不输入呢??????????

xuewutian 2007-05-19 08:30:36
data segment
string byte 12 dup(?)
data ends

code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
lea dx, string
mov ah, 0ah
int 21h



mov ah, 4ch
int 21h
code ends
end start

这段代码编译和链接都过了,可为什么就是不能从键盘输入字符呢?
在XP控制台下打开.exe文件后,什么都不干,就过去了,根本就没有让光标在那里闪着,等待输入

另外,问一下:为什么双击这个.exe文件后,它只是闪一下,不会让那个黑屏停在哪里?怎么才能让它停下来???????

谢谢!!!!!
...全文
535 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuewutian 2007-05-20
  • 打赏
  • 举报
回复
真是太感谢你了,你这一说解决了我两天的问题
谢谢!!!
paullbm 2007-05-20
  • 打赏
  • 举报
回复
都搞清楚了吧。。。。。。

88
xuewutian 2007-05-20
  • 打赏
  • 举报
回复

不好意思
我这里出一点错,少写了一行,^_^
paullbm 2007-05-20
  • 打赏
  • 举报
回复
不过它只是在后面多一个空行,其他的什么都没有,不知道是为什么
=================
什么意思?说清楚点!!
xuewutian 2007-05-20
  • 打赏
  • 举报
回复
就刚才这个程序,为什么用了P命令后,会有一段乱码??????????

谢谢!!!谢谢!!!!
xuewutian 2007-05-20
  • 打赏
  • 举报
回复

谢谢!!
我试了一下,你刚才说的,不过它只是在后面多一个空行,其他的什么都没有,不知道是为什么
paullbm 2007-05-20
  • 打赏
  • 举报
回复
困了。。。
睡觉去。。。。。。
paullbm 2007-05-20
  • 打赏
  • 举报
回复
1.我想问一下,如果要指定一某个内存单元写字符,例如要给21000号单元到21008号单元写6个字符应该怎么写???????
=========================
code segment
assume cs:code
start:
mov ax,2000h
mov ds,ax
mov bx,1000h
mov dl,'a'

mov cx,9 ;cx的值决定写入内存单元数据的个数
s: mov [bx],dl
inc bx
inc dl
loop s
mov byte ptr[bx],'$' ;为DOS9号中断做准备

mov dx,1000h ;显示21000~21008号单元的9个字符
mov ah,9
int 21h

mov ah,4ch
int 21h
code ends
end start


2.在DEBUG中调试,当走到int 21h,用一个t命令时,它的CS和IP的值会变成另外一个,不知道这是为什么,怎么才能跳过,这一句????????????
====================
改用p命令
xuewutian 2007-05-20
  • 打赏
  • 举报
回复
能不能说一下上面的那个DEBUG中的问题?

谢谢!!!!
paullbm 2007-05-20
  • 打赏
  • 举报
回复
例如:输入1234567$(回车后)仍然是1234567$
则不知道是输出没有执行还是其他的原因?

=========================
只是光标没重定位,所以输出的把输入的完全覆盖了!!

可改成如下:
data segment
string db 12,?,12 dup(?)
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax

lea dx,string
mov ah,0ah
int 21h

mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h ; 10,13;换行

xor bh,bh
mov bl,[string+1]
mov string[bx+2],'$'

lea dx,string+2
mov ah,9
int 21h

mov ah,4ch
int 21h
code ends
end start
xuewutian 2007-05-20
  • 打赏
  • 举报
回复
还有我想问一下,在DEBUG中调试,当走到int 21h,用一个t命令时,它的CS和IP的值会变成另外一个,不知道这是为什么,怎么才能跳过,这一句????????????
谢谢!!!!!
xuewutian 2007-05-20
  • 打赏
  • 举报
回复
楼上的前辈:又有一个问题:1.如果给里面输入12345的话,(打印出来的是12345); 可为什么在调试时,用D命令显示那个内存单元的内容时,它里面存放的31 32 33 34,并且取出那些内存单元的内容时,也是31 32 33 34,这是为什么?????应该怎么输入一个大于9的整数????
2.在int 21处用P命令后,为什么AX中的值会改变???????
麻烦指点一下, 谢谢!!!!!
xuewutian 2007-05-20
  • 打赏
  • 举报
回复
第一个搞明白了,因为它里面存的是1234的ASCII码值
不过第二个还不太明白,还请各位大侠指点指点,谢谢!!!!
xuewutian 2007-05-19
  • 打赏
  • 举报
回复
还有就是如果按照上面的那样输进去,它再输出到控制台,
mov dx, offset string
mov ah, 0ah
int 21h

lea dx, string
;add dx, 2
mov ah, 09h
int 21h

mov ah, 4ch
int 21h
输入时最后一个字符为'$'
这样的话,在字符串前面会有两个未知字符(乱码)
如果加上注释的那一行add dx , 2
例如:输入1234567$(回车后)仍然是1234567$
则不知道是输出没有执行还是其他的原因?
xuewutian 2007-05-19
  • 打赏
  • 举报
回复
不是
就在程序代码中
paullbm 2007-05-19
  • 打赏
  • 举报
回复
我想问一下,如果要指定一某个内存单元写字符,例如要给21000号单元到21008号单元写6个字符应该怎么写???????
谢谢!!!




===================
指在DEBUG中吗?
xuewutian 2007-05-19
  • 打赏
  • 举报
回复
我想问一下,如果要指定一某个内存单元写字符,例如要给21000号单元到21008号单元写6个字符应该怎么写???????
谢谢!!!
paullbm 2007-05-19
  • 打赏
  • 举报
回复
string byte 12 dup(?)
改为
string db 12,?,12 dup(?)


================
功能0AH
功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
  1、第一个字节为缓冲区的最大容量,可认为是入口参数;
  2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
  3、从第三个字节开始存放实际输入的字符串;
  4、字符串以回车键结束,回车符是接受的最后一个字符;
  5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
  BUFF DB 80, ?, 80 DUP(?)   ;最多接受80个字符
出口参数:无
xuewutian 2007-05-19
  • 打赏
  • 举报
回复
试了,可还是不行啊!
不知道是不是这段代码哪里有问题?
czlyc006 2007-05-19
  • 打赏
  • 举报
回复
用CMD命令打开控制台再运行程序试试

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧