Assembler длинная арифметика

Узнай цену своей работы

Формулировка задачи:

Пишу прогу для лабы(студент 1 курс). Задача: Пользователь вводит два знаковых числа X и Y. Вычислить частное и остаток от их деления. Вычислить их сумму и разность, а если они выходят за допустимый диапазон (-0x80000000...0x7FFFFFFF), вывести на экран сообщение об ошибке. Проверить следующие случаи: X=-2004318072 Y=2 X=-2004318072 Y=100 X=0x7FFFFFFF Y=1 X=0 Y=-0x80000000 Вот пишу начало проги:
#include <stdio.h>
#include <conio.h>
int pain(int arg1, int y)
{
__asm
    {
    mov y, 0
    mov eax, 48
    _1:
        cmp arg1, 10
        je _0
        sub arg1, eax
        inc y
        jmp _1
    _0:
    }
}
int main()
{
int x=0,r1=0,s[30],s1[30],*p,y;
p=s;
while((*p++=getchar()) != '\n');
*p='\0';
p=s1;
while((*p++=getchar()) != '\n');
*p='\0';
for (x=0;s[x]!=10;x++) s[x]=s[x]-48;
for (x=0;s1[x]!=10;x++) s1[x]=s1[x]-48;
p=s;
*p=pain(*p,r1);
_asm
{
}
for (x=0;s[x]!=10;x++) printf("%d",s[x]); 
getch();
for (x=0;s1[x]!=10;x++) printf("%d",s1[x]); 
getch();
return 0;
}
при компиляции после ввода 2-х строк она зависает. ну т.е. работает но ничего не делает хоть убей. компилировал пошагово - зависает строке *p=pain(*p,r1); точнее не просто зависает, а выскакивает окно консоли будто мне надо еще что-то ввести и всё, больше он ничего делать не хочет. Подскажите в чем проблема? Я только начинаю изучение асс-а так что ошибки могут быть совсем глупые или по незнанию каких-то принципов работы кода/компа/асс-а. Подскажите в чем суть что-бы я потом не ошибся.

Решение задачи: «Assembler длинная арифметика»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>

Оцени полезность:

15   голосов , оценка 4.333 из 5
Похожие ответы