Maikl Korleone Опубликовано 12 мая, 2006 Жалоба Поделиться Опубликовано 12 мая, 2006 помогите пожалуйста написать прогу на асемблере. прога должна вычислять вункцию: Y=X^Z^N + M^Q^P + L^O^(N/2) то есть сначала Z возводится в степень N, а потом уже X возводится в получившеюсю степень вот что я написал: prg segment para public 'code'assume cs:prg,ds:prg,es:prg,ss:prgorg 100hbeg:jmp startmesx db 0ah,0dh,'Vvedite X:$'mesz db 0ah,0dh,'Vvedite Z:$'mesn db 0ah,0dh,'Vvedite N:$'mesm db 0ah,0dh,'Vvedite M:$'mesq db 0ah,0dh,'Vvedite Q:$'mesp db 0ah,0dh,'Vvedite P:$'mesl db 0ah,0dh,'Vvedite L:$'meso db 0ah,0dh,'Vvedite O:$'messres db 0ah,0dh,'Rezultat: $'X dw ?Z dw ?N dw ?M dw ?Q dw ?P dw ?L dw ?O dw ?IN_BUF DB 06,00,5 DUP(?)ou_buf db 7 dup(?),'$'include str2bin.asminclude bin2str.asmstepen procmov ax,1cicl: imul bxloop ciclretstepen endpvvodch procmov ah,09hint 21hlea dx,in_bufmov ah,0ahint 21hmov bx,dxinc bxcall str2binretvvodch endpstart: lea dx,mesxcall vvodchmov x,axlea dx,meszcall vvodchmov z,axlea dx,mesncall vvodchmov n,axlea dx,mesmcall vvodchmov m,axlea dx,mesqcall vvodchmov q,axlea dx,mespcall vvodchmov p,axlea dx,meslcall vvodchmov l,axlea dx,mesocall vvodchmov O,axmov bx,Qmov cx,Ncall stepenmov cx,axmov bx,Xcall stepenmov x,axmov bx,Qmov cx,Pcall stepenmov cx,axmov bx,Mcall stepenmov M,axmov ax,Nmov bx,2cwdidiv bxmov cx,axmov bx,Ocall stepenmov cx,axmov bx,Lcall stepenadd ax,Xadd ax,Mlea bx,ou_bufcall bin2strlea bx,messresmov ah,09hint 21hlea dx,ou_buf+1mov ah,09hint 21hint 20hprg endsend beg запускаю на выполнение, ввожу исходные данные, прога пишет какието бессвязные символы и все, что делать не знаю, и вобще как ее можно отладить? помогите плиз Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 12 мая, 2006 Жалоба Поделиться Опубликовано 12 мая, 2006 lea bx,messresmov ah,09hint 21h замени на lea dx,messresmov ah,09hint 21h Ссылка на комментарий Поделиться на другие сайты Поделиться
Maikl Korleone Опубликовано 12 мая, 2006 Автор Жалоба Поделиться Опубликовано 12 мая, 2006 yuriks: ага, именно в этом и была проблема, я уже и сам понял, а сейчас вот и ты подтвердил Ссылка на комментарий Поделиться на другие сайты Поделиться
Maikl Korleone Опубликовано 22 июня, 2006 Автор Жалоба Поделиться Опубликовано 22 июня, 2006 (изменено) новую тему открывать не стал, потому что вопрос тоже по ассемблеру В преддверии экзамена, возникли кое какие вопросы по коду, хотелось бы что бы кто нибуть меня просвятил, прокоментируете пожалуйста те участки кода которые я пометил: prg segment para public 'code'assume cs:prg,ds:prg,es:prg,ss:prg – почитав теорию, я понял что это вроде деректива сегментации, тока вот че она делает?org 100hbeg: jmp startmess1 db 0ah,0dh,'Введите значение N:$' что значит 0ah ?, и что значит 0dh - ? mess3 db 0dh,0ah,'Сформированный массив:$'MA db 32 dup(?)N dw ?in_buf db 06,00,5 dup(?) – это буфер для ввода, хотелось бы знать что значат 06,00,5 ?ou_buf db 7 dup(?),'$' – это буфер для вывода, аналогично, что значит 7 ? include bin2str.asminclude str2bin.asmstart: …prg endsend beg заранее спасибо Изменено 22 июня, 2006 пользователем Maikl Korleone Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 22 июня, 2006 Жалоба Поделиться Опубликовано 22 июня, 2006 assume cs:prg,ds:prg,es:prg,ss:prg – почитав теорию, я понял что это вроде деректива сегментации, тока вот че она делает?Ты обьясняешь компилятору на какой сегмент указывают соответствующие сегментные регистры. Это может помочь избежать ошибок, когда ты обращаешься к переменной, забыв указать корректный сегментный регистр.mess1 db 0ah,0dh,'Введите значение N:$' что значит 0ah ?, и что значит 0dh - ? 0ah - перевод строки0dh - возврат каретки Т.о. При выводе 0ah,0dh на экран каретка будет возвращена на 1-ю позицию в строке и переведена на следующую строку. Эффект такой же, как когда ты в текстовом редакторе нажимаешь Enter. in_buf db 06,00,5 dup(?) – это буфер для ввода, хотелось бы знать что значат 06,00,5 ?Выделение буффера размером в семь байт (2 + 5). Буффер инициализируется байтами 06, 00, затем пять байт по 00. Почему первые два байта инициализируются именно так - надо смотреть в программе.ou_buf db 7 dup(?),'$' – это буфер для вывода, аналогично, что значит 7 ? Значение аналогично. Выделение буффера размером в восемь байт (7 + 1) и его инициализация. Первые семь байт забиваются нулевыми значениями. Последний байт инициализируется значением символа '$' - значит вывод значения буффера производится при помощи int 09h, эта функция воспринимет знак доллара как ограничитель выводимой строки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Maikl Korleone Опубликовано 23 июня, 2006 Автор Жалоба Поделиться Опубликовано 23 июня, 2006 Shurr: спасибо, очень помог Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти