Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .386
- .MODEL FLAT, STDCALL
- ; прототипы внешних функций (процедур) описываются директивой EXTERN,
- ; после знака @ указывается общая длина передаваемых параметров,
- ; после двоеточия указывается тип внешнего объекта – процедура
- EXTERN GetStdHandle@4: PROC
- EXTERN WriteConsoleA@20: PROC
- EXTERN CharToOemA@8: PROC
- EXTERN ReadConsoleA@20: PROC
- EXTERN lstrlenA@4: PROC
- EXTERN ExitProcess@4: PROC; функция выхода из программы
- .DATA; сегмент данных
- STRN DB "ВВЕДИТЕ ПЕРВОЕ ЧИСЛО:",13,10,0; выводимая строка, в конце добавлены
- ; управляющие символы: 13 – возврат каретки, 10 – переход на новую
- ; строку, 0 – конец строки; с использованием директивы DB
- ; резервируется массив байтов
- STRN2 DB "ВВЕДИТЕ ВТОРОЕ ЧИСЛО:",13,10,0
- FMT DB "Число %d", 0; строка со списком форматов для функции wsprintfA
- DIN DD ?; дескриптор ввода; директива DD резервирует память объемом
- ; 32 бита (4 байта), знак «?» используется для неинициализированных данных
- DOUT DD ?; дескриптор вывода
- BUF DB 200 dup (?); буфер для вводимых/выводимых строк длиной 200 байтов
- LENS DD ?; переменная для количества выведенных символов
- FIR DB ?
- SEC DB ?
- LEN DD ?
- .CODE; сегмент кода
- MAIN PROC
- ;Ввод двух чисел
- MOV EAX, OFFSET STRN
- PUSH EAX
- PUSH EAX
- CALL CharToOemA@8
- MOV EAX, OFFSET STRN2
- PUSH EAX
- PUSH EAX
- CALL CharToOemA@8
- PUSH -11
- CALL GetStdHandle@4
- MOV DOUT, EAX
- PUSH -10
- CALL GetStdHandle@4
- MOV DIN, EAX
- PUSH OFFSET STRN
- CALL lstrlenA@4
- PUSH OFFSET STRN2
- CALL lstrlenA@4
- PUSH 0
- PUSH OFFSET LEN
- PUSH EAX
- PUSH OFFSET STRN
- PUSH DOUT
- CALL WriteConsoleA@20
- PUSH 0
- PUSH OFFSET LEN
- PUSH 400
- PUSH OFFSET FIR
- PUSH DIN
- CALL ReadConsoleA@20
- ;первое число
- MOV DI, 16
- MOV ECX, LEN
- MOV ESI, OFFSET FIR
- XOR BX,BX
- XOR AX,AX
- L1:
- MOV BX, [ESI]
- CMP BX, 40h
- JA Symbol
- SUB BX,'0'
- MUL DI
- ADD AX, BX
- INC ESI
- Symbol:
- SUB BX, 37h
- MUL DI
- ADD AX, BX
- INC ESI
- LOOP L1
- PUSH 0
- PUSH OFFSET LEN
- PUSH EAX
- PUSH OFFSET STRN2
- PUSH DOUT
- CALL WriteConsoleA@20
- PUSH 0
- PUSH OFFSET LEN
- PUSH 200
- PUSH OFFSET SEC
- PUSH DIN
- CALL ReadConsoleA@20
- MAIN ENDP
- END MAIN
Advertisement
Add Comment
Please, Sign In to add comment