Перейти к содержанию
СофтФорум - всё о компьютерах и не только

возведение в степень на асемблере


Рекомендуемые сообщения

помогите пожалуйста написать прогу на асемблере.

прога должна вычислять вункцию:

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: ага, именно в этом и была проблема, я уже и сам понял, а сейчас вот и ты подтвердил

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

новую тему открывать не стал, потому что вопрос тоже по ассемблеру

В преддверии экзамена, возникли кое какие вопросы по коду, хотелось бы что бы кто нибуть меня просвятил, прокоментируете пожалуйста те участки кода которые я пометил:

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

заранее спасибо

Изменено пользователем Maikl Korleone
Ссылка на комментарий
Поделиться на другие сайты

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, эта функция воспринимет знак доллара как ограничитель выводимой строки.
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...