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

Программирование на Ассемблере

Нужен код, где юзер вводит одинарное число, а программа определяет чётное оно или нет. Сообщает юзеру сообщением "О" - для нечётного или "Е" - для чётного. Заранее спасибо. :-* p.s.: Если не трудно, можете подписать коменты на то как работает ассемблер. Если не хотите, ничего страшного, я сама попробую разобраться.
М П
М П
7 674
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.code
messdb "Enter: "
hin dd 0
hout dd 0
buf db 256 dup (0)
cWrR dd 0
chet db "E"
nochet db "O"
start:
invokeAllocConsole;резервируем консоль
invoke GetStdHandle,STD_OUTPUT_HANDLE;получаем хендл вывода
mov hout,eax;сохраняем его
invoke GetStdHandle,STD_INPUT_HANDLE;получаем хендл ввода
mov hin,eax;сохраняем его

invoke WriteConsole,hout,addr mess,sizeof mess,addr cWrR,0;выводим в консоли сообщение "Enter"
invoke ReadConsole,hin,addr buf,sizeof buf,addr cWrR,0;читаем вводимые символы и сохраняем в массиве buf
;цифры там или буквы естесственно никто проверять не будет :)

lea edi,buf;в регистр еди - адрес начала массива с принятыми данными
mov al,13;в регистр ал - 13d или 0dh(символ перевода каретки)
xor ecx,ecx;делаем счетчик ецх
dec ecx;равным 0FFFFFFFFh
cld;идти будем вверх по адресам
repnz scasb;идем вверх по адресам в поисках символа перевода каретки
not ecx;проверяем, а вводили ли вообще что-то
dec ecx
jz endprog;если нет, то прыгаем сразу на выход
lea esi,[edi-2];иначе ставим регистр адреса источника (еси) на последнюю цифру введенную с клавиатуры
lodsb;"скачиваем" эту цифру в ал
shr eax,1;смещаем все биты вправо, младший бит уходит во флаг переполнения cf
jc no_chet;ну вот собственно и все. если флаг равен нулю - число четное, если 1, то нечетное
invoke WriteConsole,hout,addr chet,sizeof chet,addr cWrR,0
jmp endprog
no_chet:
invoke WriteConsole,hout,addr nochet,sizeof nochet,addr cWrR,0
endprog:
invoke Sleep,3000
invokeExitProcess,0
end start
Александр Кравцов
Александр Кравцов
554
Лучший ответ
М П Спасибо большое, но мне нужно на LC3... он немного отличается от того что вы написали.