【问题标题】:File not opening in masm32文件未在 masm32 中打开
【发布时间】:2015-10-31 17:38:53
【问题描述】:

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

.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
....

但是每当我执行它时,程序都会进行错误打开,显示文件无法读取,我认为问题出在字符串的连接中,但我不知道如何解决它。对不起,我是新手。

【问题讨论】:

  • 我建议使用调试器(甚至是 debug.exe 或获取 turbo 调试器 td.exe 的副本)单步执行代码以观察发生的情况。学习使用调试器是一项宝贵的技能。
  • 如果您正在创建一个 EXE(不是 COM)程序,那么您需要在程序启动时初始化数据段 (DS)。通常使用mov ax,@data 后跟mov ds,ax
  • 为什么标题和标签 masm32>?

标签: assembly dos masm32 16-bit


【解决方案1】:

短的sn-p有很多错误。假设您忘记复制了

.model small
.stack 1000h

.code
start:

END start

然后剩下:

  1. DS没有初始化:

    mov ax, @data
    mov ds, ax
    

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

  2. 您不会“将“Clone_”连接到文件名”,反之亦然。为此,您在copyfile db "Clone_", 0 之后没有足够的空间。

  3. 您将输入的最后一个字符替换为“$”,但随后测试字符串是否为空 (cmp byte ptr [si], 0)。

  4. 在 DOS 环境中,您只能使用 8.3 filenames 处理。我打赌你的文件名 Clone_... 太长了。

  5. offset filename 上,您不会找到文件名,而是int 21h/ah=0Ah 输入结构的开头。

【讨论】:

  • 对于第 5 点,您可以添加对 int 21h/ah=0ah 的 Ralph Brown 的中断列表之类的引用。那我就投赞成票。
  • @MichaelPetch:完成:-)。我想 OP 应该知道这一点,因为 filename 被定义为一个结构,并且连接以 lea si, filename...add si, 2 开头。
  • 除非他从互联网上复制和粘贴 sn-ps 的代码并且不知道它是如何工作的 ;-)
  • 我没有包括其他我只是决定退出我认为我的代码错误的sn-p。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多