powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / вывести результат массива в ассемблере)
17 сообщений из 17, страница 1 из 1
вывести результат массива в ассемблере)
    #35762320
alex1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.model small
.data
massiv dw 2,3,1,4,5,9,3,3,1,3,4,2,9,1,7
.code
Start:
mov ax, @data
mov ds,ax
mov bl,5
lea si,massiv[14]
@ymn:
mov al,[si]
imul bl
mov [si],al
dec si
jns @ymn
mov ah, 9h
int 21h
mov ax,4C00h
END Start
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35762325
alex1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и вообще правильно я сделал... кто может подскажите как доделать) задание было такое умножить каждый элемент массива из 15 чисел на на 5)
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35762342
alex1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.model small
.data
massiv dw 2,3,1,4,5,9,3,3,1,3,4,2,9,1,7
.code
Start: ;точка входа в программу
mov ax, @data ;инициализация сегмента данных
mov ds,ax
mov bl,5 ;множитель
lea si,massiv[14];адрес последнего элемента массива
@ymn:
mov al,[si];взять элемент массива
imul bl;умножить
mov [si],al; сохранить в массиве результат
dec si;перейти к следующему элементу
jns @ymn
mov ax, 9h
int 21h
mov ax,4C00h ;завершить программу
int 21h
END Start
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35763009
Фотография Куликов Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо
Код: plaintext
imul bl;умножить
используй
Код: plaintext
1.
SHL AX,  2 
ADD AX, BL

Повысится и сильно быстродействие
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35763231
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex1989
...
massiv dw 2,3,1,4,5,9,3,3,1,3,4,2,9,1,7
...
dec si;перейти к следующему элементу
...


думаю это неправильно. Нелогично приелементе размерностю в слово (2 байта) уменьшать адрес на 1. В данном случае код работать будет (ведь старший байт равен 0, а значит и при умножении на 5 будет 0), но вот с числами побольше (скажем больше 15 :) ) результат будет неправильный.
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35763235
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куликов Алексейвместо
Код: plaintext
imul bl;умножить
используй
Код: plaintext
1.
SHL AX,  2 
ADD AX, BL
в BL у него 5, а в AH - часть сегментного адреса, тогда уж
Код: plaintext
1.
2.
3.
XOR AH, AH
MOV BL, AL
SHL AX,  2 
ADD AX, BL
?
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35763428
Фотография Куликов Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш ты прав...

Давненько за асмом не сидел...
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35764941
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле я тоже скорее всего накосячил, потому что насколько я сейчас вспомнил, смешивать регистры разного размера в одной команде
Код: plaintext
ADD AX, BL
нельзя.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35764956
Алексей Морозов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADD AL, BL
ADC AH, 0


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35775204
alex1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы все уже сделал... Вот еще задача такая типа подсчета количества двоичных нулей в двухбайтовой
переменной. помогите доделать программу... я тут не очень понимаю... зарание спасибо!

;входные параметры
mov bx,Number;выводимое число
mov di,offset string;выводимая строка
mov cx,16;количество бит
xor dx,dx;счетчик нулевых бит
;сама процедура
;в цикле сдвигаем через флаг CF
isLoop:
shl bx,1;сохраняем флаги
pushf;переводим в символ и записываем в выводимую строку
mov al,30h
adc al,0
stosb;востанавливаем флаг
popf;проверяем флаг переноса если переноса нет, то считаем как ноль-бит
jc isNoZero
inc dx
isNoZero:;повторяем 16-ть раз
loop isLoop;записываем маркер конца строки
mov al,'$'
stosb
;все
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35775601
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex1989Спасибо за советы все уже сделал... Вот еще задача такая типа подсчета количества двоичных нулей в двухбайтовой
переменной. помогите доделать программу... я тут не очень понимаю... зарание спасибо!

;входные параметры
mov bx,Number;выводимое число
mov di,offset string;выводимая строка
mov cx,16;количество бит
xor dx,dx;счетчик нулевых бит
;сама процедура
;в цикле сдвигаем через флаг CF
isLoop:
shl bx,1;сохраняем флаги
pushf;переводим в символ и записываем в выводимую строку
mov al,30h
adc al,0
stosb;востанавливаем флаг
popf;проверяем флаг переноса если переноса нет, то считаем как ноль-бит
jc isNoZero
inc dx
isNoZero:;повторяем 16-ть раз
loop isLoop;записываем маркер конца строки
mov al,'$'
stosb
;все

если я правильно понял задачу, то данный код немного сложный для её решения, потому решил уточнить, правильно ли я всё понял:
Значит так, насколько я понимаю задача заключается в том, что есть некая переменная типа word, и надо посчитать количество нулей в двоичной записи данного числа?
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35775643
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
.model tiny
.code
org 100h
start:
 jmp begin ; перепрыгиваем на начало ИСПОЛНЯЕМОГО кода
  number dw 5h
  res dw  0 ,'$'
 begin: ; начало
 mov ax, word ptr number ; пишем чсило в ах
 xor bx, bx
 mov cx, 16d ; количество повторов
 loop1: 
  dec cx
  test ax,  1  ; тестируем нулевой бит ах
  jnz not_zero
   inc bx ; если он равен  0 , добавляем  1  к вх
  not_zero:
  shr ax,  1  ; сдвигаем ах на один бит ВПРАВО
 cmp cx,  0 
 ja loop1 ; если СХ больше нуля - повторяем цикл
 mov ax, bx
 mov bl, 10d 
 div bl ; делим число на  10 , получаем десятки в al, а остаток (единицы) в ah
 add al, 48d ; переводим число в символ
 add ah, 48d ; переводим число в символ
 mov res, ax ; сохраняем результат (десятки попадут на меньший адрес, единицы на старший)
 push ds
 pop es
 mov dx, offset res
 mov ah, 9h
 int 21h ; выводим это всё чудо на экран :)
 ret ; выходим с проги
end start

Вот накатал в MASM (юзал tiny модель ;) ).
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35775738
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, вместо ret в конце проги лучше написать int 20h ))) Просто только-что заметил, что ret может выдавать ошибку (просто свою прогу щас пишу :) ).
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #35775935
alex1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программер Спасибо большое за ответ!!!
именно так... т.е есть число посчитать в нем кол-во нулей
прогу не юзал еще :)) вечером приду попробую)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
вывести результат массива в ассемблере)
    #36616137
AnDrOiD73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что то я совсем запутался что там и где исправлять в программе, в которой нужно умножить каждый элемент массива из 15 чисел на 5. не подскажите полный код ?
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #36617035
AnDrOiD73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
типа так должно быть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
.model small
.data
massiv dw  2 , 3 , 1 , 4 , 5 , 9 , 3 , 3 , 1 , 3 , 4 , 2 , 9 , 1 , 7 
.code
Start: ;точка входа в программу
mov ax, @data ;инициализация сегмента данных
mov ds,ax
mov bl, 5  ;множитель
lea si,massiv[ 14 ];адрес последнего элемента массива
@ymn:
mov al,[si];взять элемент массива
XOR AH, AH
MOV BL, AL
SHL AX,  2 
ADD AL, BL
ADC AH,  0  
mov [si],al; сохранить в массиве результат
dec si;перейти к следующему элементу
jns @ymn
mov ax, 9h
int 21h
mov ax,4C00h ;завершить программу
int 21h
END Start

??
...
Рейтинг: 0 / 0
вывести результат массива в ассемблере)
    #36634985
Matreshka1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите сделать задание:
создать массив из 10 чисел
первое число запрашивается,а далее все четные элементы получаются суммированием первого числа с индексом элемента, все нечетные(начиная с третьего,т.к. первое уже вводится) получаются вычитанием из предыдущего элемента текущего индекса.

надо в фар-менеджере

помогите пожааааалуйста
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / вывести результат массива в ассемблере)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]