Другие языки программирования и технологии

Ассемблер. Дан массив из 6 байт. Посчитать кол-во нулей.

Oleg Litvinov
Oleg Litvinov
60
> массив полюбе не нужен
O_o

Если вам не нравится 64-разрядная программа с синтаксисом AT&T, вот вам 32-разрядная с синтаксисом Intel, даже с выводом результата в консоль.
А подсчитать количество каких нулей требуется? Если двоичных во всех элементах массива, то:

.386
.model flat, stdcall
option casemap:none

include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib

.stack 100h

.data
txtRes db 'Кол-во нулей = %d',0
Array db -97, 24, 39, 75, 0, -123
Len equ $ - Array

.code
N74748424:
lea esi,Array
mov ecx,Len
xor ebx,ebx
;-------------------
Loop1:
push ecx
mov ecx,8
lodsb
not al
Loop2:
ror al,1
adc ebx,0
loop Loop2
pop ecx
loop Loop1
;-------------------
invoke crt_printf, addr txtRes, ebx
invoke ExitProcess,0
end N74748424

А если нужно считать количество нулевых элементов массива (нулевых байтов) , то замените выделенный жирным шрифтом фрагмент на:

mov edx,ebx
DoLoop:
lodsb
or al,al
setz dl
add ebx,edx
loop DoLoop
Сережа Тимофеев
Сережа Тимофеев
51 590
Лучший ответ
> Дан массив из 6 байт.

>массив полюбе не нужен,

_
что у тебя с головой?
VZ
Viktor Z (Зайцев)
7 948
Ассемблер-то какой?

# GAS for amd64
.code64
.text
.global zeroNumbers

zeroNumbers:
mov $6, %rcx
mov $array, %rdx
xor %rax, %rax

for_each:
lea 1(%rax), %rbx
cmp $0, -4(%rdx, %rcx, 4)
cmove %rbx, %rax
dec %rcx
jnz for_each

ret

.data
array: .long 3,2,0,4,0,5
Serikov Erasyl
Serikov Erasyl
5 079
двести рэ

Похожие вопросы