首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在masm32中打开文件

无法在masm32中打开文件
EN

Stack Overflow用户
提问于 2015-11-01 01:38:54
回答 1查看 139关注 0票数 0

我的程序要求读取一个文件名,然后它应该生成一个文件名为"Clone_originalfilename“的文件的克隆。这是我的代码块:

代码语言:javascript
复制
.data
filename db 100 
         db ?
         db 100 dup (0)
copyfile db "Clone_", 0

.code
mov dx, offset filename ; reads the filename entered by user
mov ah, 0Ah
int 21h

mov si, offset filename + 1 ; replaces the last character (Enter) to '$'
mov cl, [ si ] 
mov ch, 0      
inc cx 
add si, cx 
mov al, '$'
mov [ si ], al 

; concatenate "Clone_" to the filename 
lea si, filename
lea di, copyfile

L0: 
    cmp byte ptr [di], '_' 
    jz exL0
    inc di
    jmp L0
exL0:
    inc di 
    add si, 2 
    xor bx, bx 
L1:
    cmp byte ptr [si], 0    
    jz exL1
    mov bl, byte ptr [si]   
    mov byte ptr [di], bl

    inc si
    inc di
    jmp L1
exL1:
    inc di
    mov bl, byte ptr [si]       
    mov byte ptr [di], bl


mov dx, offset filename 
mov al, 2
mov ah, 3Dh
int 21h

mov handle, ax
jc erroropening
....

但每当我执行它时,程序就会进入错误打开,显示文件无法读取,我认为问题出在字符串的连接上,但我不知道如何修复它。抱歉,我是个新手。

EN

回答 1

Stack Overflow用户

发布于 2015-11-01 02:30:11

在这个简短的代码片段中有很多错误。让我们假设您忘记了复制

代码语言:javascript
复制
.model small
.stack 1000h

代码语言:javascript
复制
.code
start:

END start

然后仍然是:

  1. DS没有初始化:

mov ax,@data mov ds,ax

所以至少lea di, copyfile不会加载正确的地址。filename存储在错误的位置。

  • 您不能将Clone_“连接到文件名”,反之亦然。出于这个目的,在copyfile db "Clone_", 0.

  • You将输入的最后一个字符替换为'$‘之后,您没有足够的空间,但是之后要测试字符串是否为空,这是一个只能用8.3 filenames处理的(cmp byte ptr [si], 0).

  • In环境。我打赌你的文件名Clone_..。int 21h/ah=0Ah.

太长了。

  • offset filename上你找不到文件名,而是输入结构的开头
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33454576

复制
相关文章

相似问题

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