Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите пожалуйста на писать код на ассемблере

maks 3d3 Ученик (51), открыт 4 недели назад
В задании использовать минимум одно условие и один переход, использовать все варианты
возможных циклов в Assembler (LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ). В пункте
описывается то, что должно быть в цикле.
задание
Вычислить произведение введенных чисел пользователем.
5 ответов
- Знаток (370) 4 недели назад
так уточни для какой архитектуры и ос, мы не знаем делаешь ли ты прогу в для бутсектора, х16, х86 или х64 архитектуры, мб ты вообще под винду пишешь
maks 3d3Ученик (51) 4 недели назад
x64
- Знаток (370) maks 3d3, винда или в бутсектор?
maks 3d3Ученик (51) 4 недели назад
сможешь сделать одним кодом
- Знаток (370) maks 3d3, по другому не могу, а если ты хочешь одним сообщением то не могу тк ограничение по колву символов
maks 3d3Ученик (51) 4 недели назад
сможешь скрин сделать а то выдаёт ошибку почему то мне в компелятор
- Знаток (370) maks 3d3, попробуй через чат гпт сделать, но будут наверняка ошибки
etar125 Мыслитель (5460) 4 недели назад
 ; Ввод данных 
section .data
prompt db "Введите число: ", 0

section .bss
num resd 1
prod resd 1

section .text
global _start

_start:
mov eax, prompt
call print_string

; Вводим первое число
mov edx, num
mov ecx, 0
mov ebx, 1
int 0x80

mov [prod], eax

; Цикл для ввода остальных чисел
loop_input:
cmp eax, 0 ; Если число равно 0, то выходим из цикла
je loop_exit

imul [prod], eax ; Умножаем произведение на введенное число

; Вводим следующее число
mov edx, num
mov ecx, 0
mov ebx, 1
int 0x80

jmp loop_input

loop_exit:
; Вывод результата
mov eax, prod
call print_number

; Завершение программы
mov eax, 1
xor ebx, ebx
int 0x80

print_string:
push ebp
mov ebp, esp
push edx

mov edx, [ebp + 8]
mov esi, edx
lodsb

test al, al
jz done_printing

mov ah, 0x0E
int 0x10

inc edx
jmp short repeat

done_printing:
pop edx
leave
ret

print_number:
push ebp
mov ebp, esp
push edx

mov edx, [ebp + 8]

mov ecx, edx
shr ecx, 2
and ecx, 0xF

add edx, 48
mov bl, cl
mov bh, 0

mov ah, 0x02
int 0x21

dec edx
repeat:
mov cl, byte [edx]
sub cl, '0'
add edx, 1
push edx
mov ah, 0x02
int 0x21
pop edx
loop repeat

pop edx
leave
ret
maks 3d3Ученик (51) 4 недели назад
а какой это Assembler
etar125 Мыслитель (5460) maks 3d3, а мне откуда знать
etar125Мыслитель (5460) 4 недели назад
nasm наверно
maks 3d3 Ученик (51) etar125, а у тебя н работал?
Vov4ikМастер (2268) 3 недели назад
Ха-ха-ха-ха! Как это запустить?
Если что, половина программы под DOS, половина под Linux.
1 литр энеоавлдввлталчлвлы Гуру (4521) 4 недели назад
 section .data 
prompt db 'Введите количество чисел: ', 0
format db '%d', 0
product_msg db 'Произведение чисел: %d', 10, 0
number db 0

section .bss
count resb 1
product resd 1

section .text
extern printf, scanf
global main

main:
; Запросить у пользователя количество чисел
mov rdi, prompt
call printf

; Прочитать количество чисел
lea rsi, [count]
mov rdi, format
call scanf

; Устанавливаем начальное произведение в 1
mov dword [product], 1

; Устанавливаем счётчик
movzx rbx, byte [count] ; количество чисел в rbx

; Начало цикла
next_number:
cmp rbx, 0 ; Проверяем, не ноль ли счётчик
je done ; Если 0, переходим к завершению

; Считываем число
mov rdi, format
lea rsi, [number]
call scanf

; Умножаем на текущее число
mov eax, [product]
imul eax, [number]
mov [product], eax

; Уменьшаем счётчик
dec rbx
jmp next_number ; Переходим к следующему числу

done:
; Вывод произведения
mov rdi, product_msg
mov eax, [product]
call printf

ret
Vov4ik Мастер (2268) 3 недели назад
Читайте учебник и методичку и начинайте что-то делать самостоятельно, потом с конкретными вопросами сюда. Иначе на два балла насоветуют :)
Похожие вопросы