【发布时间】: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