我是装配工新手。
我不能编译和链接在masm 3这个代码。当我进入一个数据段比masm 3发现数据区没有。然后我有一个错误在这个代码。所有的消息文本将被写入到test1.txt文件。〉16位DOS / COM
奇怪的是,在MASM 3中数据部分是不可访问的,但在MASM 611中它工作。下一个原因是将所有数据(当我使用611时)所有消息文本写入文件。目标是只写我。
after use "masm test.asm"
enter image description here〉https://i.stack.imgur.com/B4J80.png
.8086
.model tiny
data:
filename db "test1.txt", 0
handle dw 0
usermsg db "write me$", 0
;buffer times 200 db 0
msg_open db "Error opening file!$"
msg_seek db "Error seeking file!$"
msg_write db "Error writing file!$"
msg_close db "Error closing file!$"
END data
.stack 100h
.code
org 100h
start:
mov ah, 3dh
mov al, 2
mov dx, offset filename
int 21h
jc err_open
mov [handle], ax
mov bx, ax
mov ah, 42h ; "lseek"
mov al, 2 ; position relative to end of file
mov cx, 0 ; offset MSW
mov dx, 0 ; offset LSW
int 21h
jc err_seek
mov bx, [handle]
mov dx, offset usermsg < Here I offset usermsg only
mov cx, 100
mov ah, 40h
int 21h ; write to file... > Here will be write all msg, usermsg is in dx only.
jc err_write
mov bx, [handle]
mov ah, 3eh
int 21h ; close file...
jc err_close
exit:
mov ax, 4c00h
int 21h
err_open:
mov dx, offset msg_open
jmp error
err_seek:
mov dx, offset msg_seek
jmp error
err_write:
mov dx, offset msg_write
jmp error
err_close:
mov dx, offset msg_close
; fallthrough
error:
mov ah, 09h
int 21h
mov ax, 4c01h
int 21h
end start
END
1:
1条答案
按热度按时间e5nqia271#
我在网上看了一个Masm 3.0手册,没有看到
.model
或.data
或.code
指令。(.COM)程序中,第一条指令可以是跳转到开始处跳过周围的数据,或者是有数据的后段代码。代替.data
或.code
,可以使用segment
指令来代替。但是,对于一个.com(tiny)程序,只使用一个段。DS和CS被初始化为程序前缀(类似于命令行信息),在org 100h代码下面,因此代码从CS:0100h开始。