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

Assembler: Взаимодействие с пользователем

киньте пожалуйста пример на ассемблере, когда программа взаимодействует с пользователем.
что-то на подобии:

-укажите цвет:
-красный
-этот цвет принадлежит к тёплым тонам
укажите цвет:
-синий
-этот цвет принадлежит к холодным тонам
укажите цвет:
-палитра
-ошибка
Ассемблеры разные бывают.
Пример консольной программы Windows для компилятора MASM с использованием SDK Masm32:

.386
.model flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib

.stack 100h

.data
Prompt db "Укажите цвет: ",0
InFrmt db "%s",0
txtWarm db "Этот цвет принадлежит к тёплым тонам",0
txtCool db "Этот цвет принадлежит к холодным тонам",0
txtErr db "Ошибка",0
txtEnd db 13,10,10,"Для завершения работы нажмите любую клавишу",0
;Массив строк с названиями тёплых тонов
WarmCol db "красный",0,0,0,0
    db "желтый",0,0,0,0,0
    db "оранжевый",0,0
;Массив строк с названиями холодных тонов
CoolCol db "синий",0,0,0,0,0,0
    db "голубой",0,0,0,0
    db "зеленый",0,0,0,0
    db "фиолетовый",0
WarmNum equ 3 ;длина массива тёплых цветов
CoolNum equ 4 ;то же, холодных
ColorLen equ 11 ;размер названия цвета. Все цвета дополнены нулями до этой длины

.data?
Buffer db 1025 dup (?) ;буфер ввода строки с клавиатуры

.code
start:
    invoke crt_printf,addr Prompt
    invoke crt_scanf,addr InFrmt, addr Buffer
    lea esi,WarmCol
    mov ecx,WarmNum
    call TestColor
    jnz CoolTst
    invoke crt_printf,addr txtWarm
    jmp Quit

CoolTst:
    lea esi,CoolCol
    mov ecx,CoolNum
    call TestColor
    jnz Error
    invoke crt_printf,addr txtCool
    jmp Quit

Error:
    invoke crt_printf,addr txtErr

Quit:
    invoke crt__flushall
    invoke crt_printf,addr txtEnd
Inkey:
    invoke crt__kbhit
    test eax,eax
    jz Inkey
    invoke ExitProcess,NULL
   
TestColor proc
    push esi
    push ecx
    invoke crt_strcmp,addr Buffer,esi
    pop ecx
    pop esi
    add esi, ColorLen
    or eax,eax
    jz EndTest
    loop TestColor
EndTest:
    ret
TestColor endp
    end start

> на си знаю
Если вы знаете Си, то без труда найдёте в тексте программы знакомые функции printf, scanf, strcmp, kbhit, flushall, а также вызов функции WinAPI ExitProcess.
Муса Садриев
Муса Садриев
51 590
Лучший ответ
Андрей Федоришен мне нужно на TASM
велико ли различие TASM-а с вашим примером?
что необходимо заменить?
Ассемблер????)))))))))) ) Бери лучше Си.
Андрей Федоришен в том то и дело что на си знаю. нужен именно ассемблер