169 похожих чатов

Я снова с вопросом и макросами У меня есть макрос ввода

массива, и туда почему-то не передается размер массива (хотя вводится верно)
Код:

.386
.model flat, stdcall
option casemap :none
include includes\masm32rt.inc

;макросы

.data
A dd 30 dup(0); память под массив А
ASize dd ?; размер массива А
HS dd ?; вспомогательная перем.
B dd 6 dup(0); память под массив В

.code

inps macro; макрос ввода размера массива
local lbl;
lbl:
ccout "Enter array size:\n";
mov HS, input(); в HS ввод
mov ASize, sval(HS);размер - число
cmp ASize, 1;
jl lbl; если размер <= 0, то повторим ввод
endm

inpa macro s; макрос ввода начальнго массива А
local cycl;
ccout "Input array\n";
mov ecx, s; в счетчик размер массива
mov esi, 0;
cycl:
ccout "Input element: ";
mov HS, input();
mov A[esi], sval(HS);
add esi, 4;
dec ecx;
cmp ecx, 0;
ja cycl;
endm

outarr macro aname, s; макрос вывода массива
local cycl, mout1, mout2, lbl;
jmp lbl;
mout1 db 10, 13, "arr [";
mout2 db 10, 13, "] = ";
lbl:
ccout "Output array &aname\n";
mov ecx, s;
mov esi, 0;
cycl:
invoke StdOut, ADDR mout1;
mov HS, sstr$(esi);
invoke StdOut, HS;
invoke StdOut, ADDR mout2;
mov HS, sstr$(aname[esi]);
invoke StdOut, HS;
loop cycl;
endm

inpb macro s; макрос для формирования массива В, s - размер массива А
local lbl, cycl, zr, odd, evn, nxt;
mov ecx, s; счетчик в ecx
mov esi, 0; индекс в esi
cycl:
mov edi, 0; устанавливаем на 0 элемент B
mov eax, A[esi];
cmp eax, 0;
jnz zr; если A[i]=0, переходим на метку zr
add edi, 8; иначе устанавливаем на 2 элемент В
test eax, 1;
jnz odd; если элемент четный, то на метку odd
add edi, 8; иначе устанавливаем на 4 элемент В
jz evn; и переход на метку evn
zr:
mov ebx, B[edi];
inc ebx;
mov B[edi], ebx; B[0]+1
jmp nxt;
odd:
mov ebx, B[edi];
inc ebx;
mov B[edi], ebx; B[2]+1
add edi, 4;
mov ebx, B[edi];
add eax, ebx; B[3]+A[i];
mov eax, B[edi];
jmp nxt;
evn:
mov ebx, B[edi];
inc ebx;
mov B[edi], ebx; B[4]+1
add edi, 4;
mov ebx, B[edi];
add eax, ebx; B[5]+A[i];
mov eax, B[edi];
jmp nxt;
nxt:
add esi, 4;
loop cycl;
endm;

start:
cls; очищаем консоль
SetConsoleCaption "Shelest LW5 PI01"; задаем заголовок окна
inps; вводим размер А
inpa ASize; вводим массив А
outarr A, ASize;печатаем массив А
inpb ASize; формируем массив В
outarr B, 6; печатаем массив В
inkey "Any key to exit..."; ждем нажатие клавиши для выхода
exit; завершаем работу
end start

2 ответов

15 просмотров

ccount "... ...." ты уверена что этот макрос не портит регистры которые ты в цикле используешь дальше?

secret argent- Автор вопроса
Aiwan \ (•◡•) / _bot
ccount "... ...." ты уверена что этот макрос не ...

Не уверена, но уже переписала прогу по-другому, работает Просто разнесла вывод текста и массива в разные макросы

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта