assembly 具有旧MASM3的数据节语法不可访问

f0brbegy  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(146)

我是装配工新手。
我不能编译和链接在masm 3这个代码。当我进入一个数据段比masm 3发现数据区没有。然后我有一个错误在这个代码。所有的消息文本将被写入到test1.txt文件。〉16位DOS / COM
奇怪的是,在MASM 3中数据部分是不可访问的,但在MASM 611中它工作。下一个原因是将所有数据(当我使用611时)所有消息文本写入文件。目标是只写我。
after use "masm test.asm"
enter image description herehttps://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

e5nqia27

e5nqia271#

我在网上看了一个Masm 3.0手册,没有看到.model.data.code指令。(.COM)程序中,第一条指令可以是跳转到开始处跳过周围的数据,或者是有数据的后段代码。代替.data.code,可以使用segment指令来代替。但是,对于一个.com(tiny)程序,只使用一个段。DS和CS被初始化为程序前缀(类似于命令行信息),在org 100h代码下面,因此代码从CS:0100h开始。

_DATA   segment para public 'DATA'
_DATA   ends
DGROUP  group   _DATA
_BSS    segment para public 'BSS'
_BSS    ends
DGROUP  group   _BSS
STACK   segment para STACK 'STACK'
        db      512 dup (?)
STACK   ends
DGROUP  group   STACK
_TEXT   segment word public 'CODE'
        assume  cs:_TEXT,ds:DGROUP
start:   ...
_TEXT   ends
        end     start

相关问题