люди помогите еще написать прогу на ассемблере.я в нем туп как дуб , а сдавать все еще надо. Надо подсчитать кол-во согласных во введенной строке ? может кто нить поможет ?
ну хоть намекните как сделать
Реализовать можно разными способами, одно лишь останется неизменным: какие символы считать согласными, следует определять по таблице.
Child of Bodom, тебе самостоятельную программу или вставку в Паскаль?
Ну тогда почитай, разберись, а когда появятся конкретные вопросы - задашь, постараемся ответить.
И массивов, кстати, как таковых в Ассемблере нет. Доступ осуществляется по адресам. В случае "массивов" обычно через сумму базы и смещения. Но смещение, в отличие от массивов, задается не в длинах элементов, а в байтах. Ну а в код таблица включается через db.
Мимо проходил..
комментировать работу этой хреновины....
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data
str1 db "string=", 0
bufferforstring db 10 dup(0)
str2 db "AmountAgree=", 0
agree db 230 ; согласные..кудаж без них..
$1 db 170
$2 db 173
$3 db 163
$4 db 232
$5 db 233
$6 db 167
$7 db 229
$8 db 228
$9 db 162
$10 db 175
$11 db 224
$12 db 171
$13 db 164
$14 db 166
$17 db 231
$18 db 225
$19 db 172
$20 db 226
$21 db 161 ; last.. в смысле последний символ с чем сравнивается проверка на конец
tittle db "RatYear`s",0
szformat db "%u", 0
.data?
hOutput dd ?
hInput dd ?
n dd ?
num dd ?
buf db 255 dup(?)
.code
programma:
invoke FreeConsole
invoke AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOutput,eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov hInput, eax
invoke SetConsoleTitle, addr tittle
invoke SetConsoleTextAttribute, hOutput, 9
push offset str1
call lstrlen
invoke WriteConsole, hOutput, addr str1, eax, addr n, NULL
invoke ReadConsole, hInput, addr buf, 255, addr num, NULL
push offset buf
call lstrlen
mov ecx, eax
mov byte ptr [str1], 0
sub ecx, 2 ; проверка на crlf и избавление от сего
cmp ecx, 0
jz next
lea esi, buf
; банально грузим в al символ введенный с клав. и крутим на сравнение до совпадения, с согласными из
;секции данных а именно согласныХ(конечно там может быть что угодно) инкрементируя байт в памяти
sycle1:
lodsb
mov edx, offset agree
mov ah, byte ptr 0
sycle2:
cmp ah, 161 ;проверка на последний символ согласный буковки
jz gotosycle1
mov ah, byte ptr [edx]
cmp al, ah
jz count
inc edx
jmp sycle2
count:
inc [str1]
gotosycle1:
loop sycle1
next:
xor eax, eax
mov al, byte ptr [str1]
invoke wsprintf,addr buf,addr szformat, eax ;форматируем значение счетчика
push offset str2
call lstrlen
invoke WriteConsole, hOutput, addr str2, eax, addr n, NULL
push offset buf
call lstrlen
invoke WriteConsole, hOutput, addr buf, eax, addr n, NULL ;выводим
push 5000
call Sleep
push 0
call ExitProcess
end programma
ОГО это круто.спасибо!!! тока почему то в отдельной консольке открывается. я обычно в cmd прописываю и у меня там работает. а ща как отдельный открывается. странно почему exe получился а не com
Интересно будет на защите преподу рассказывать как я эту прогу писал