Хорошо, что вы привели *.inc, только забыли сообщить, для какого ассемблера (предположительно MASM) и какого пакета (явно не Masm32, так как эти заголовочные файлы нашлись только у JWasm, а макрос TEXTOEM вообще не нашёлся нигде) написана эта программа. Пакет, очень похоже, самодельный.
Программа для пакета Masm32 SDK, часть подпрограмм пришлось написать заново, фрагмент, вызвавший у вас затруднение, выделен жирным шрифтом:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib
StdOut proto stdcall :dword
StdIn proto stdcall :dword, :dword
InputDecimal proto stdcall :dword, :dword, :dword
.data
ConsoleTitle db "Организация операций ввода и вывода",0
PromptA db "Число в десятичной системе счисления A = ",0
PromptB db "Число в десятичной системе счисления B = ",0
Error db "Ошибка! Это не десятичное число. Повторите ввод. ",13,10,0
Result db "A * B равно",13,10
db "в десятичной системе счисления: ",0
PromptQ db 13,10,"Нажать Enter для завершения... ",0
.code
start:
call Main
invoke ExitProcess,0
Main proc
local Buffer[128]:byte
invoke AllocConsole
invoke SetConsoleTitle, addr ConsoleTitle
lea esi,Buffer
invoke InputDecimal,addr PromptA,esi,128
mov ebx,eax
invoke InputDecimal,addr PromptB,esi,128
mul ebx
mov ebx,eax
invoke StdOut,addr Result
mov edi,esi
mov eax,ebx
call uBinToDecASCII
invoke StdOut,edi
invoke StdOut,addr PromptQ
invoke StdIn, addr Buffer, lengthof Buffer
ret
Main endp
StdOut proc uses eax ecx edx,lpMessage:dword
invoke crt_printf,lpMessage
ret
StdOut endp
StdIn proc uses eax ebx,lpBuff:dword,BuffLen:dword
local Len:dword
invoke GetStdHandle,STD_INPUT_HANDLE
lea ebx,Len
invoke ReadConsole,eax,lpBuff,BuffLen,ebx,0
ret
StdIn endp
InputDecimal proc uses esi edi,lpMess:dword,lpBuff:dword,BuffLen:dword
RepInput:
invoke StdOut,lpMess
mov edi,lpBuff
invoke StdIn,edi,BuffLen
mov al,0Dh
mov ecx,BuffLen
repne scasb
mov word ptr [edi-1],0
@@: lodsb
.if al == 0
jmp @F
.elseif al >= '0' && al <= '9'
jmp @B
.else
invoke StdOut,addr Error
jmp RepInput
.endif
@@:
mov esi,lpBuff
call uDecASCIIToBin
ret
InputDecimal endp
uDecASCIIToBin proc uses esi ebx edx
;Вход: ESI - адрес ASCIIZ-строки
;Выход: EAX - число
xor ebx,ebx
@@: lodsb
or al,al
jz @F
and eax,0Fh
xchg eax,ebx
mov edx,10
mul edx
add ebx,eax
jmp @B
@@: mov eax,ebx
ret
uDecASCIIToBin endp
uBinToDecASCII proc uses esi edi ebx
;Вход: EAX - число, EDI - адрес буфера не меньше 10 байт
mov esi,edi
mov ebx,10
@@: xor edx,edx
div ebx
or dl,30h
mov byte ptr [esi],dl
inc esi
or eax,eax
jnz @B
mov byte ptr [esi],0
@@: dec esi
mov al,byte ptr [esi]
xchg byte ptr [edi],al
mov byte ptr [esi],al
inc edi
cmp edi,esi
jb @B
ret
uBinToDecASCII endp
end start
http://pastebin.com/z8K6C3PG
+файл инк) вдруг кто захочет попробовать запустить программный код)
http://pastebin.com/nhVfhTeh