Другие языки программирования и технологии
Программирование на Ассемблере
Нужен код, где юзер вводит одинарное число, а программа определяет чётное оно или нет. Сообщает юзеру сообщением "О" - для нечётного или "Е" - для чётного. Заранее спасибо. :-* p.s.: Если не трудно, можете подписать коменты на то как работает ассемблер. Если не хотите, ничего страшного, я сама попробую разобраться.
.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
.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
М П
Спасибо большое, но мне нужно на LC3... он немного отличается от того что вы написали.
Похожие вопросы
- Программирование на ассемблер
- программирование на ассемблере. Возможно ли без употребления тяжёлых наркотиков?
- Здравствуйте помогите в программирование на ассемблере. Нужно зеркально отобразить массив из 256 байт
- Вопрос по изучению языка Ассемблера под MS DOS. (Нужны советы по программному обеспечению/программированию)
- Ассемблер и программирование.
- Почему здесь нет языка программирования ассемблер?
- нужны ли ассемблер и C/C++ в современном программировании ?
- Ассемблер. В чем главная фишка ассемблера? Почему его так часто упоминают в книгах по программированию.
- Почему в наше время не изучают ассемблер? Ведь это и есть настоящее могущество в программировании, не?
- Что может ассемблер?