Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- /*
- int rev = 0;
- int nn = n;
- while(n > 0){
- rev = rev* 10 + n%10;
- n/=10;
- }
- if(nn == rev){
- return 1;
- }
- return 0;
- */
- int palindrom(int n) {
- int retVal = 0;
- int zece = 10; //Mul si div suporta ca operanzi doar registrii sau adrese de memorie. Momentan vom folosi o variabila in loc de o valore "hardcodata".
- //Pe viitor vom vedea cum putem folosi memoria pentru a salva valoarea unui registru si pentru a o incarca inapoi.
- _asm {
- //Completati
- mov ebx, n //In ebx vom patra valorea lui n pe care o vom imparti repetat la 10.
- mov ecx, 0 //In ecx vom calcula numarul inversat.
- start_while:
- cmp ebx, 0
- je end_while
- //Inmultim ce avem calculat pana acum cu 10. (rev = rev * 10)
- mov eax, ecx
- xor edx, edx
- mul zece
- mov ecx, eax
- //Impartim numarul la 10. Restul il vom aduna la numarul inversat, iar catul il vom folosi pentru a actualiza valoarea lui ebx
- mov eax, ebx
- xor edx, edx // Pentru ca lucram cu registrii pe 32 bits, impartirea va fi de fapt (edx:eax)/10 => trebuie sa setam edx 0.
- div zece
- mov ebx, eax //Catul. n = n / 10;
- add ecx, edx //Restul. // rev += n % 10;
- jmp start_while
- end_while :
- cmp n, ecx
- jne diferite
- mov retVal, 1
- jmp end_if
- diferite :
- mov retVal, 0
- end_if :
- }
- return retVal;
- }
- int main()
- {
- int a;
- cout << "a= ";
- cin >> a;
- int retVal = palindrom(a);
- cout << retVal << '\n';
- if (retVal == 1) {
- cout << "Numarul este palindrom\n";
- }
- else {
- cout << "Numarul nu este palindrom\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement