Нужно подправить 1 строчку в программе

  • Автор темы paradOks
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

paradOks

#1

есть програма, работающая с числами. А нужно с символами. Как подправить?

Смысл программы - По массиву Х из 5 символов построить массив Z (Zi равно числу единиц в двоичном коде Хi)

Код(встроенный ассемблер):

int bindt(int a)
{
int n ;
asm
{
sub ebx, ebx
mov edx, a
mov eax, a
m0: shr eax,1
mov ecx, eax
shl ecx,1
sub edx,ecx
cmp edx, 1
jne m1
add ebx, 1
m1: mov edx, eax
cmp eax, 0
je m2
jmp m0
m2: mov n, ebx
}
return n;
}

Подскажите пожалуйста, очень прошу
:unsure: :(
 
A

alexsid

#2
Код:
int func(char a){
int n;
__asm {
xor ebx, ebx		
mov ecx, 8
mov al, a
m1:	 
shr al, 1
jnc m2
inc ebx
m2:
loop m1
mov n, ebx 
}
return n;
}
 
P

paradOks

#3
Я поняла, спасибо, НО только не получается у меня заменить так, чтобы не было ошибок.
Посмотрите, пожалуйста, а то у меня с универом совсем плохо будет(((((((( очень очень прошу :(
 

Вложения

A

alexsid

#4
Код работает 100%
Юзай тестовую прогу для проверки (MS VS 2003/2005/2008)

Код теста :
**********************
Код:
#include "stdafx.h"
#include <iostream>

// code
typedef union _bbyte {
struct {
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
} bits;
unsigned char byte;

void print(){
std::cout << "Bit fields: "
<< (bits.b7 == 1) << (bits.b6 == 1) 
<< (bits.b5 == 1) << (bits.b4 == 1)
<< (bits.b3 == 1) << (bits.b2 == 1)
<< (bits.b1 == 1) << (bits.b0 == 1) 
<< " " << std::endl;
}
}BitByte;

int func(char a){
int n;
__asm {
xor ebx, ebx
mov ecx, 8
mov al, a
m1:	 
shr al, 1
jnc m2
inc bl
m2:
loop m1
mov n, ebx 
}
return n;
}


void main(int argc, char* argv[])
{	  
BitByte bb;
bb.byte = 0xFF;
bb.print();

std::cout << std::endl
<< func(bb.byte) 
<< std::endl;

system("PAUSE");
}
 
Статус
Закрыто для дальнейших ответов.