Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / вывести результат массива в ассемблере) / 17 сообщений из 17, страница 1 из 1
16.01.2009, 19:55:41
    #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
16.01.2009, 19:58:30
    #35762325
alex1989
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
и вообще правильно я сделал... кто может подскажите как доделать) задание было такое умножить каждый элемент массива из 15 чисел на на 5)
...
Рейтинг: 0 / 0
16.01.2009, 20:16:06
    #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
17.01.2009, 19:31:59
    #35763009
Куликов Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
вместо
Код: plaintext
imul bl;умножить
используй
Код: plaintext
1.
SHL AX,  2 
ADD AX, BL

Повысится и сильно быстродействие
...
Рейтинг: 0 / 0
18.01.2009, 03:05:02
    #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
18.01.2009, 03:35:43
    #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
18.01.2009, 15:11:04
    #35763428
Куликов Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
Ёш ты прав...

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


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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.01.2009, 12:13:07
    #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
24.01.2009, 21:42:49
    #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
24.01.2009, 23:00:56
    #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
25.01.2009, 02:40:46
    #35775738
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
кстати, вместо ret в конце проги лучше написать int 20h ))) Просто только-что заметил, что ret может выдавать ошибку (просто свою прогу щас пишу :) ).
...
Рейтинг: 0 / 0
25.01.2009, 13:50:53
    #35775935
alex1989
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
Программер Спасибо большое за ответ!!!
именно так... т.е есть число посчитать в нем кол-во нулей
прогу не юзал еще :)) вечером приду попробую)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.05.2010, 19:37:55
    #36616137
AnDrOiD73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
что то я совсем запутался что там и где исправлять в программе, в которой нужно умножить каждый элемент массива из 15 чисел на 5. не подскажите полный код ?
...
Рейтинг: 0 / 0
07.05.2010, 11:56:18
    #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
18.05.2010, 21:14:23
    #36634985
Matreshka1111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывести результат массива в ассемблере)
помогите сделать задание:
создать массив из 10 чисел
первое число запрашивается,а далее все четные элементы получаются суммированием первого числа с индексом элемента, все нечетные(начиная с третьего,т.к. первое уже вводится) получаются вычитанием из предыдущего элемента текущего индекса.

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

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


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