Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр - Assembler
Формулировка задачи:
Задача такая:
Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр.
Операции деления не использовать
Раньше я её писала на С++, теперь нужно с использованием ассемблерной вставки, придётся при делении не использовать частное.
Задача простая, но в ассемблере почти ничего не понимаю. Попыталась так:
Компилируется, выводит 100 и выдаёт "Integer overflow".
Помогите, пожалуйста, заранее спасибо.
#include <iostream> using namespace std; int main () { bool b=false; for (int a=100; a<1000; a++) { _asm { xor cl, cl xor eax, eax xor ebx, ebx xor ecx, ecx xor esi, esi xor edi, edi mov cl, 0 mov eax, a push eax mov ebx, 10 div ebx mov edi, edx pop eax push eax mov ebx, 100 div ebx sub edx, edi mov esi, edx pop eax sub eax, esi sub eax, edi mov edx, eax mov eax, edi mov ebx, 10 mul ebx cmp eax, esi je m1 mul ebx cmp eax, edx je m1 mov eax, esi mul ebx cmp eax, edx je m1 mov cl, 1 m1: mov b, cl } if (b=true) cout << a << " "; } system ("pause"); return 0; }
Решение задачи: «Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр»
textual
Листинг программы
#include <stdio.h> #include <conio.h> void main () { int i=100; char bf[4], *tpt="%d"; for (; i<1000; i++) { _asm { push i push tpt lea eax, bf push eax call sprintf //sprintf(bf,tpt,i); add esp,0xC lea esi,bf lodsw cmp ah,al // if((bf[0] != bf[1]) && jz next cmp ah,[esi]// (bf[0] != bf[2]) && jz next cmp al,[esi]// (bf[1] != bf[2])) jz next lea eax, bf push eax call puts //puts(bf) add esp,4 next: } } getch(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д