Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2015, 19:08   #1
noob322
 
Регистрация: 11.10.2015
Сообщений: 7
По умолчанию Перевести с С++ на Ассемблер

Доброго времени суток) Помогите пожалуйста на ассемблер перевести(Дан массив из 10 байт.Посчитать кол-во байт с числом единиц
равным 3
) :
Код:
#include<iostream>
using namespace std;
int main()
{
    int a[10]={7,2,3,7,5,6,7,8,9,10};
    int count=0;
    for( int i=0; i<10; i++) // символы анализируем
    {
        int bits=0; // сколько единичек
        for( int b=0; b<8; b++) // все биты проверяем
            if( a[i]&(1<<b) ) bits++; // о, единичка!
        if( bits==3 ) count++; // 3 штуки -> нужный символ!
    }
    cout<<count;
}
noob322 вне форума Ответить с цитированием
Старый 17.11.2015, 19:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
format PE console
entry start
;http://www.programmersforum.ru/showthread.php?t=285254
include 'D:\fasmw16726\INCLUDE\win32w.inc'

section '.data' data readable writeable
a dd 1,2,3,4,5,6,7,8,9
max dd 0
message db 'Count=%d',0
section '.code' code readable executable

start:

mov ecx,9
mov esi,a
for:
 mov eax, [esi+ecx*4]
 call bits
 cmp ebx,3
 jnz next
 inc [max]

next:
loop for
 cinvoke printf,message,[max]
 cinvoke getch
ret

;Вычисляет кол-во единичек в DWORD.
;Возвращает их в ebx
proc bits
 push ecx
 mov ecx,32
 xor ebx,ebx
 awhile:
  test eax,1
  jz nope
  inc ebx
 nope:
 shr eax,1
 cmp eax,0
 jnz awhile
 pop ecx
 ret
endp

section '.idata' import data readable
library msvcrt,'msvcrt.dll'

import msvcrt,\
       printf,'printf',\
       getch,'_getch'
В качестве идеи годится?

P.S. Я тебе даже Сишный вывод туда прикрутил.
I'm learning to live...

Последний раз редактировалось Stilet; 17.11.2015 в 19:37.
Stilet вне форума Ответить с цитированием
Старый 17.11.2015, 19:59   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

идея

Код:

MOV r8d, 10

XOR ecx, ecx

LEA rdx, [a]
MOV eax, [rdx]

XOR r9d, r9d

count_loop:
    SBB r9d, 0
    SHR eax, 1
    JNZ count_loop

    SBB r9d, -3
    ADC ecx, 0

    NEG r9d
    SAR r9d, 31
    ADD ecx, r9d   

    ADD rdx, 4
    MOV eax, [rdx]

    XOR r9d, r9d

DEC r8d
JNZ count_loop
результат в ecx

Последний раз редактировалось f.hump; 17.11.2015 в 23:07.
f.hump вне форума Ответить с цитированием
Старый 18.11.2015, 11:49   #4
noob322
 
Регистрация: 11.10.2015
Сообщений: 7
По умолчанию

что-то везде ошибки при компиляции(
noob322 вне форума Ответить с цитированием
Старый 18.11.2015, 12:11   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что-то везде ошибки при компиляции(
Ну не везет тее, братюнь
Не расстраивайся. Накроешь преподу поляну и все ошибки как рукой сметет

P.S. Если что я свой код проверял, он рабочий.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести Си-шный код в Ассемблер-овский? DimanSemm Помощь студентам 4 15.12.2014 10:16
Перевести код С++ на ассемблер mizini Помощь студентам 1 23.11.2014 14:07
перевести из C в ассемблер. Подскажите AirC Помощь студентам 4 28.04.2014 14:49
Перевести в код на Ассемблер dimon305 Помощь студентам 0 18.05.2010 20:07
ассемблер перевести на С++ rudolfe Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 10.03.2009 20:10