Другие языки программирования и технологии

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
Оrozbai Мuratov
Оrozbai Мuratov
51 590
Лучший ответ
> Это вообще как?
Примерно так же, как и удалить гланды через задний проход.

"вывести результат ЧЕРЕЗ текстовый файл" -- абсурдное и бессмысленное словосочетание.
СШ
Саша Шигало
58 475
Через файл отображаемый на память, так юзай api той системы в которой находишься.
Газиз Алахунов
Газиз Алахунов
11 372