شمردن یک های یک عدد باینری با استفاده از دستور asm
صورت سوال :
برنامه ای بنویسید که یک عدد را از ورودی بخواند و تعداد یک های آن عدد را در مبنای 2 حساب کند. (عدد 8 بیتی باشد و آن را داخل al قرار دهید )
من برنامه رو اینطوری نوشتم :
#include <iostream.h>
void main()
{
int a,b=0;
cout<<"Insert a number(0 to 255): ";
cin>>a;
for(int i=0;i<8;i++)
{
_asm{
mov ax,a
mov bx,1
and bx,ax
add b,bx
}
a/=2;
}
cout<<"Your number in Binary has "<<b<<" digit 1.";
}
الآن مشکلم اینجاست که نمی تونم عددم رو توی AL بریزم
کسی نظری نداره ؟
نقل قول: شمردن یک های یک عدد باینری با استفاده از دستور asm
باید از byte ptr استفاده میکردین راه آسونتر 8 بار شیفت میدادین بعد اگر کری 1 بود یکی به کانتر اضافه میکردین
#include <iostream>
using namespace std;
void main()
{
int a,b=0;
cout << "Insert a number(0 to 255): ";
cin >> a;
for(int i=0;i<8;i++)
{
_asm{
mov al,byte ptr a
mov bl,1
and bl,al
add byte ptr b, bl
}
a/=2;
}
cout<<"Your number in Binary has "<<b<<" digit 1.\n";
}
موفق باشی
نقل قول: شمردن یک های یک عدد باینری با استفاده از دستور asm
به شکل زیر بنویسید سریعتر هست ، حتما باید مقدار ثبات ها در برنامه های بزرگ ذخیره بشه که با تغییرشون ادامه برنامه با مشکل مواجه نشه
#include <iostream>
using namespace std;
void main()
{
int a,b=0;
cout << "Insert a number(0 to 255): \n";
cin >> a;
_asm{
push cx
push bx
push ax
mov al,byte ptr a
mov cl,1
xor ch,ch
xor bl,bl ;counter
again:
shr al,cl
jc add_counter
cmp ch,8
jae exit_count
inc ch
jmp again
add_counter:
inc bl
inc ch
jmp again
exit_count:
mov byte ptr b,bl
pop ax
pop bx
pop cx
}
cout<<"Your number in Binary has "<<b<<" digit 1.\n";
}