Assembler длинная арифметика
Формулировка задачи:
Пишу прогу для лабы(студент 1 курс).
Задача:
Пользователь вводит два знаковых числа X и Y.
Вычислить частное и остаток от их деления. Вычислить их сумму и разность, а если
они выходят за допустимый диапазон (-0x80000000...0x7FFFFFFF), вывести на экран
сообщение об ошибке.
Проверить следующие случаи:
X=-2004318072 Y=2
X=-2004318072 Y=100
X=0x7FFFFFFF Y=1
X=0 Y=-0x80000000
Вот пишу начало проги:
при компиляции после ввода 2-х строк она зависает. ну т.е. работает но ничего не делает хоть убей.
компилировал пошагово - зависает строке *p=pain(*p,r1); точнее не просто зависает, а выскакивает окно консоли будто мне надо еще что-то ввести и всё, больше он ничего делать не хочет.
Подскажите в чем проблема?
Я только начинаю изучение асс-а так что ошибки могут быть совсем глупые или по незнанию каких-то принципов работы кода/компа/асс-а. Подскажите в чем суть что-бы я потом не ошибся.
#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; }
Решение задачи: «Assembler длинная арифметика»
textual
Листинг программы
#include <stdio.h> #include <conio.h>