Мне нужно было написать программу на ассемблере, которая выполняет простое редактирование текста.
Он должен быть в шаблоне .EXE, но обработка файлов прерывается, например ah=3dh int 21h
.
Я пытался написать код в шаблоне .COM, но с разделенными данными и разделами кода. Фактический код слишком длинный, поэтому я не могу поставить его здесь. Но даже с простейшими кодами это не работает в шаблоне .EXE.
data segment
filename db 'myfilexxxx.txt', 0
handle dw ?
datax db " hello files! "
data_size=$-offset datax
buffer db 4 dup(' ')
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax,@data
mov ds,ax
mov ah, 3ch
mov cx, 0
mov dx, offset filename
mov ah, 3ch
int 21h ; create file...
mov handle, ax
mov bx, handle
mov dx, offset datax
mov cx, data_size
mov ah, 40h
int 21h ; write to file...
mov al, 0
mov bx, handle
mov cx, 0
mov dx, 7
mov ah, 42h
int 21h ; seek...
mov bx, handle
mov dx, offset buffer
mov cx, 4
mov ah, 3fh
int 21h ; read from file...
mov bx, handle
mov ah, 3eh
int 21h ; close file...
mov ax, 4c00h
int 21h
ends
end start
org 100h
mov ah, 3ch
mov cx, 0
mov dx, offset filename
mov ah, 3ch
int 21h ; create file...
mov handle, ax
mov bx, handle
mov dx, offset data
mov cx, data_size
mov ah, 40h
int 21h ; write to file...
mov al, 0
mov bx, handle
mov cx, 0
mov dx, 7
mov ah, 42h
int 21h ; seek...
mov bx, handle
mov dx, offset buffer
mov cx, 4
mov ah, 3fh
int 21h ; read from file...
mov bx, handle
mov ah, 3eh
int 21h ; close file...
ret
filename db "myfile.txt", 0
handle dw ?
data db " hello files! "
data_size=$-offset data
buffer db 4 dup(' ')
ret
![That is my .COM template code running](https://i.stack.imgur.com/5vY8f.png)
![This is what I get with .EXE template with same code](https://i.stack.imgur.com/2Kthc.png)