Другие языки программирования и технологии
Assembler: вывод через текстовый файл.
Дана задача, и в конце нужно вывести результат ЧЕРЕЗ текстовый файл. Не В файл, а ЧЕРЕЗ него. Это вообще как?
> вывод через текстовый файл
Это испорченный телефон.
Вместо того, чтобы пересказывать как вы пытались понять, что это такое, написали бы слово в слово формулировку задания.
Скорее всего, речь идёт о выводе текста на экран, используя функцию записи в файл.
Программа MS-DOS:
format MZ
entry code:N167064296
segment data_seg
String db "Текст для вывода на экран", 13, 10, 0
Number rb 16
segment code
;Подпрограмма вывода текста на экран функцией записи в файл
;dx - адрес начала строки для вывода
TextOut:
mov cx, -1
mov di, dx
xor al, al
repne scasb
not cx
dec cx
mov ah, 40h
mov bx, 1; дескриптор stdout
int 21h
ret
N167064296:
mov bp, data_seg
mov ds, bp
mov es, bp
mov dx, String
call TextOut
mov eax, 12345h
mov di, Number
call BinToStr
xor al, al
stosb
mov dx, Number
call TextOut
mov ax, 0C08h
int 21h
mov ah, 4Ch
int 21h
BinToStr:
push dx
mov ebx, 10
xor edx, edx
div ebx
test eax, eax
jz @F
call BinToStr
@@:
or dl, 30h
mov al, dl
stosb
pop dx
ret
Программа Windows:
format PE console
entry N167064296
include "win32a.inc"
include "api/kernel32.inc"
include "api/user32.inc"
section ".code" code readable executable
;Подпрограмма вывода текста на экран функцией записи в файл
;Text_Adr - адрес начала строки для вывода
proc TextOut stdcall Text_Adr :dword
local hStdOut rd 1
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov [hStdOut], eax
invoke lstrlen, [Text_Adr]
invoke WriteFile, [hStdOut], [Text_Adr], eax, NULL, NULL
ret
endp
N167064296:
stdcall TextOut, String
stdcall BinToStr, 12345h, Number
xor al, al
stosb
stdcall TextOut, Number
invoke GetStdHandle, STD_INPUT_HANDLE
invoke ReadConsole, eax, Number+4, 1, Number, NULL
invoke ExitProcess, NULL
proc BinToStr uses edx, Number :dword, Buff :dword
mov eax, [Number]
mov ebx, 10
xor edx, edx
div ebx
test eax, eax
jnz @F
mov edi, [Buff]
jmp BinToStr2
@@:
stdcall BinToStr, eax, [Buff]
BinToStr2:
or dl, 30h
mov al, dl
stosb
ret
endp
section ".data" data readable writeable
String db "Текст для вывода на экран", 13, 10, 0
Number rb 16
section ".idata" import data readable
library kernel32,"kernel32.dll", user32, "user32.dll"
А в Linux вообще все устройства представляются файлами:
format ELF
section ".text" executable
public _start
_start:
mov eax, String
call TextOut
mov eax, 12345h
mov edi, Number
call BinToStr
xor al, al
stosb
mov eax, Number
call TextOut
mov ebx, 0
mov eax, 1
int 80h
;Подпрограмма вывода текста на экран функцией записи в файл
;eax - адрес начала строки для вывода
TextOut:
push eax
mov ecx, -1
mov edi, eax
xor al, al
repne scasb
not ecx
dec ecx
mov edx, ecx
pop ecx
mov ebx, 1 ; дескриптор stdout
mov eax, 4
int 80h
ret
BinToStr:
push edx
mov ebx, 10
xor edx, edx
div ebx
test eax, eax
jz @F
call BinToStr
@@:
or dl, 30h
mov al, dl
stosb
pop edx
ret
section ".data" writeable
String db "Текст для вывода на экран", 10, 0
Number rb 16
Это испорченный телефон.
Вместо того, чтобы пересказывать как вы пытались понять, что это такое, написали бы слово в слово формулировку задания.
Скорее всего, речь идёт о выводе текста на экран, используя функцию записи в файл.
Программа MS-DOS:
format MZ
entry code:N167064296
segment data_seg
String db "Текст для вывода на экран", 13, 10, 0
Number rb 16
segment code
;Подпрограмма вывода текста на экран функцией записи в файл
;dx - адрес начала строки для вывода
TextOut:
mov cx, -1
mov di, dx
xor al, al
repne scasb
not cx
dec cx
mov ah, 40h
mov bx, 1; дескриптор stdout
int 21h
ret
N167064296:
mov bp, data_seg
mov ds, bp
mov es, bp
mov dx, String
call TextOut
mov eax, 12345h
mov di, Number
call BinToStr
xor al, al
stosb
mov dx, Number
call TextOut
mov ax, 0C08h
int 21h
mov ah, 4Ch
int 21h
BinToStr:
push dx
mov ebx, 10
xor edx, edx
div ebx
test eax, eax
jz @F
call BinToStr
@@:
or dl, 30h
mov al, dl
stosb
pop dx
ret
Программа Windows:
format PE console
entry N167064296
include "win32a.inc"
include "api/kernel32.inc"
include "api/user32.inc"
section ".code" code readable executable
;Подпрограмма вывода текста на экран функцией записи в файл
;Text_Adr - адрес начала строки для вывода
proc TextOut stdcall Text_Adr :dword
local hStdOut rd 1
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov [hStdOut], eax
invoke lstrlen, [Text_Adr]
invoke WriteFile, [hStdOut], [Text_Adr], eax, NULL, NULL
ret
endp
N167064296:
stdcall TextOut, String
stdcall BinToStr, 12345h, Number
xor al, al
stosb
stdcall TextOut, Number
invoke GetStdHandle, STD_INPUT_HANDLE
invoke ReadConsole, eax, Number+4, 1, Number, NULL
invoke ExitProcess, NULL
proc BinToStr uses edx, Number :dword, Buff :dword
mov eax, [Number]
mov ebx, 10
xor edx, edx
div ebx
test eax, eax
jnz @F
mov edi, [Buff]
jmp BinToStr2
@@:
stdcall BinToStr, eax, [Buff]
BinToStr2:
or dl, 30h
mov al, dl
stosb
ret
endp
section ".data" data readable writeable
String db "Текст для вывода на экран", 13, 10, 0
Number rb 16
section ".idata" import data readable
library kernel32,"kernel32.dll", user32, "user32.dll"
А в Linux вообще все устройства представляются файлами:
format ELF
section ".text" executable
public _start
_start:
mov eax, String
call TextOut
mov eax, 12345h
mov edi, Number
call BinToStr
xor al, al
stosb
mov eax, Number
call TextOut
mov ebx, 0
mov eax, 1
int 80h
;Подпрограмма вывода текста на экран функцией записи в файл
;eax - адрес начала строки для вывода
TextOut:
push eax
mov ecx, -1
mov edi, eax
xor al, al
repne scasb
not ecx
dec ecx
mov edx, ecx
pop ecx
mov ebx, 1 ; дескриптор stdout
mov eax, 4
int 80h
ret
BinToStr:
push edx
mov ebx, 10
xor edx, edx
div ebx
test eax, eax
jz @F
call BinToStr
@@:
or dl, 30h
mov al, dl
stosb
pop edx
ret
section ".data" writeable
String db "Текст для вывода на экран", 10, 0
Number rb 16
> Это вообще как?
Примерно так же, как и удалить гланды через задний проход.
"вывести результат ЧЕРЕЗ текстовый файл" -- абсурдное и бессмысленное словосочетание.
Примерно так же, как и удалить гланды через задний проход.
"вывести результат ЧЕРЕЗ текстовый файл" -- абсурдное и бессмысленное словосочетание.
Через файл отображаемый на память, так юзай api той системы в которой находишься.
Похожие вопросы
- Открывается текстовый файл но не записывается - C++
- Задача на ПаскалеИмеется текстовый файл. Переписать его строки в обратном порядке в другой файл
- Какими текстовыми редакторами можно полноценно открыть 11 гигабайтный текстовый файл?
- Как из pdf можно сделать какой-нибудь текстовый файл?
- Как переделать jpg в текстовый файл??
- Как прочитать огромный текстовый файл в PChar на Delphi и разобрать на предложения и слова???
- Есть текстовый файл для программы-теста. вопрос в нем - не понятные символы. можно расшифровать?
- Такой вопрос с кодировкой в visual studio, мне надо чтобы я мог писать в текстовый файл текст, но пишет кракозябры
- Assembler помогите создать файлы *.obj *.exe
- Assembler или C для микроконтроллеров?