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

Сделать программу на ассемблере

Никита Науменко Знаток (353), на голосовании 11 месяцев назад
Разработать алгоритм и реализовать программу на Ассемблере:
Заполнить ячейки ОЗУ начиная с адреса 120 до адреса 209 числами, равными произведению номера столбца таблицы ОЗУ на номер строки. Номер строки ячейки 120 принять равной 2
Голосование за лучший ответ
Безумный Тапок Мастер (2386) 1 год назад
ORG 100h

START:
MOV BX, 120
MOV AX, 2

MOV CX, 90
MOV DX, 0

FILL_LOOP:
IMUL DX, AX
MOV [BX], DX
ADD BX, 2
INC AX
LOOP FILL_LOOP

END START
Безумный ТапокМастер (2386) 1 год назад
Так сойдёт?
Nickie Просветленный (28397) 1 год назад
 section .data 
; данные не требуются для этой программы

section .text
global _start

_start:
mov ecx, 2 ; начальное значение номера строки
mov esi, 120 ; начальный адрес в ОЗУ

fill_loop:
mov ebx, 1 ; начальное значение номера столбца

col_loop:
; вычисляем произведение номера строки на номер столбца
mov eax, ecx
imul eax, ebx

; сохраняем результат в памяти по текущему адресу
mov [esi], eax

; увеличиваем номер столбца
inc ebx

; увеличиваем адрес в памяти
add esi, 4 ; предполагаем, что каждое число занимает 4 байта

; проверяем, достигли ли конечного адреса
cmp esi, 210 ; 210 = 209 + 1
jle col_loop

; увеличиваем номер строки
inc ecx

; проверяем, достигли ли конечного номера строки
cmp ecx, 10 ; предполагаем, что таблица 10x10
jle fill_loop

; завершаем программу
mov eax, 1 ; системный вызов для выхода
xor ebx, ebx ; код возврата 0
int 0x80
Этот код предназначен для архитектуры x86 и может не работать на других архитектурах. Кроме того, он предполагает, что размер каждого числа в таблице - 4 байта. Если у тебя другой размер, нужно будет соответствующим образом изменить инструкции add esi, 4 и mov [esi], eax.
MIKHAIL TSYBIN Знаток (394) 1 год назад
MOV CX, 120
MOV AX, 2

LOOP_START:
MOV BX, AX
MUL CX
MOV [CX], BX
INC CX
CMP CX, 210
JNE LOOP_START
Похожие вопросы