首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASM:从文件DTA获取数据

ASM:从文件DTA获取数据
EN

Stack Overflow用户
提问于 2015-11-04 19:18:58
回答 2查看 258关注 0票数 0

这必须打印一个找到的文件名,但它会打印出一些不太可能的符号。有什么帮助吗?

代码语言:javascript
复制
mov dx,offset DTA
mov ah,1Ah
int 21h

mov dx, offset comex
xor cx, cx
mov ah,4Eh
int 21h
jc  exit

mov ah,40h 
mov bx, dst_fh 
mov cx,13
lea dx, DTA+30d 
int 21h 
EN

回答 2

Stack Overflow用户

发布于 2015-11-07 01:49:59

当DOS为文件名/扩展名填充13字节长的DTA字段时,它以紧凑的方式完成。这意味着,如果文件名及其扩展名没有使用完整的空间,那么在终止零后面会有一些垃圾字节。这些是你观察到的奇怪的字符!看看这些示例(@代表终止零):

代码语言:javascript
复制
in DTA            filespec
-------------     ------------
DOCUMENT.TXT@     DOCUMENT.TXT
SHORT.DOC@à&é     SHORT.DOC
F@&é"'(§è!çà)     F

解决方案是实际找到终止零点的位置,并相应地设置CX。

代码语言:javascript
复制
lea dx, DTA+30
xor bx, bx
L1:
inc bx               ;There's always at least 1 character
cmp [DTA+30+bx],bh   ;BH=0
jne L1
mov cx, bx
mov bx, dst_fh
mov ah, 40h
int 21h

使用此代码,您将只发送实际的filename+dot+extension。

票数 1
EN

Stack Overflow用户

发布于 2015-11-04 21:25:40

也许您正在使用支持长名称的文件系统,在这种情况下,此DOS函数返回的名称将被转换为旧的8.3格式。使用"dir /x“命令查看显示的文件名与您使用代码得到的文件名相同。ps:此函数返回13字节固定大小的文件名,名称位于前8个字符,后3个字符为扩展名,如果您的文件名少于8个字符,则将放置空格来填充前8个字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33520479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档