Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр - Assembler

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

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

Задача такая: Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр. Операции деления не использовать Раньше я её писала на С++, теперь нужно с использованием ассемблерной вставки, придётся при делении не использовать частное. Задача простая, но в ассемблере почти ничего не понимаю. Попыталась так:
#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;
}
Компилируется, выводит 100 и выдаёт "Integer overflow". Помогите, пожалуйста, заранее спасибо.

Решение задачи: «Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр»

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();
}

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

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