Консультация № 175398
18.12.2009, 00:29
35.00 руб.
0 11 1
Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста!
Как на Ассемблере будет выглядеть вот эта подпрограммка, написанная на языке Си:?

main ()
{int a,b; int c;
b=0
while (b<5)
{b=b+c;
c++;
}
b++;
}

Обсуждение

Неизвестный
18.12.2009, 05:04
общий
Alena De Lon:
а какой ассемблер нужен?
а почему после b=0 нет ';' ?
почему переменная с не инициализирована?
она локального типа и создается в стеке, инициализирована "мусором" от работы предыдущих подпрограмм
Неизвестный
18.12.2009, 05:08
общий
Alena De Lon:
давайте вы еще хорошенечко проверите подпрограмму на С
расскажете что она делает
уточните ассемблер и среду
и вам сразу ответят
давно
Посетитель
7438
7205
18.12.2009, 09:38
общий
Вас интересует, как будет выглядеть код , созданный компилятором С или как это можно сделать на Ассемблере?
И еще, неопределено значение переменной С Проверьте-ка, действительно, код...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
18.12.2009, 12:30
общий
Интересует именно как это можно сделать на ассемблере?
Язык си я не знаю, поэтому и немогу перевести его на ассемблер...
Мне приближенно надо это все на ассемблере, а эту программу на си я и не запускала, у меня и языка си нету.
Вот так вот!
Неизвестный
18.12.2009, 12:35
общий
Alena De Lon:
понятно
а что должна делать программа?
Неизвестный
18.12.2009, 12:46
общий
Прога на ассемблере должна делать то, что делает вот эта подпрограмма на си!
Неизвестный
18.12.2009, 13:23
общий
Alena De Lon:
отлично
а что делает эта прога на си?
Неизвестный
18.12.2009, 13:34
общий
чего-то считает
давно
Посетитель
7438
7205
18.12.2009, 14:20
общий
это ответ
Здравствуйте, Alena De Lon.
Не сказана разрядность int, считаем, что int - это слово.
Пусть переменные будут регистровые.
Пусть начальное значение переменной c=0
Смотрите программу в приложении.

А программа считает сумму первых натуральных чисел до тех пор, пока сумма не превысит 5 и к результату добавляет 1
Значение b по шагам будет: 0, 1, 3, 6, 7. В итоге b=7

Приложение:
assume cs:code
code segment 'code'
start:
xor ax,ax ;b
xor cx,cx ;c
MLoop:
cmp ax,5 ;if (b<5)
jge Finish
add ax,cx ;b=b+c
inc cx ;c++
jmp MLoop
Finish:
inc ax ;b++

mov ax,4c00h
int 21h
code ends

end start
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
18.12.2009, 14:58
общий
Что и было нужно! Спасибо Вам ОГРОМНОЕ, Игорь Витальевич!
Удачи Вам!!!!!!!!
Неизвестный
24.12.2009, 10:39
общий
Alena De Lon:
data segment word public 'DATA'
data ends

stk segment stack 'STACK'
db 128 dup(0)
stk ends

code segment word public 'CODE'
ASSUME cs:code,ds:data,ss:stk
main:
mov AX, data
mov DS, AX

xor ax,ax ;b=0
xor cx, cx ; c=0

metka:

cmp ax,5
jge fin
add ax, cx ; b+=c
inc cx ;c++
jmp metka
fin:

inc ax ; b++
mov ax,4c00h
int 21h

end main
Форма ответа