Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Ickorka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
to aridtree. Спасибо вам за ответ. Только я не совсем разберу то, что вы написали. как-то мы не так эти програмки пишем. Я сама написала, только не могу найти ошибку...не работает она у меня..если не сложно , посмотрите, только для немного другого условия Z=(X+Y)*J J=1,2...5 :
 DATAS   SEGMENT ;  
X DW 3
Y DW 6
J DW ?
I DW 0,0,0,0,0,0,0,0,0,0
DATAS ENDS
CODES    SEGMENT
    ASSUME CS:CODES,DS:DATAS
PROGRAM:
  MOV AX,DATAS
  MOV DS,AX
  MOV CX,10
  MOV AX,0
  JCXZ K
A: INC AX
  LOOP A
  MOV CX,5
  MOV J,5
  MOV BX,OFFSET I
B: MOV AX,X
  ADD X,Y
  MUL J
  MOV [BX],AX
  ADD BX,2
  DEC J
  MOV DX,J
  CMP J,DX
  LOOPZ B
  JMP K
K:
mov I,ax
MOV AX,4C00H
INT 21H
CODES ENDS
END PROGRAM

Всего записей: 7 | Зарегистр. 06-05-2009 | Отправлено: 00:20 09-05-2009 | Исправлено: Ickorka, 00:25 09-05-2009
aridtree



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
;;Z=(X+Y)*J J=1,2...5 :
DATAS SEGMENT 'data'        ;;'classOfSegment'-пишем класс сегмента
X DW 3  
Y DW 6  
J DW ?  
I DW 0,0,0,0,0,0,0,0,0,0  
DATAS ENDS  
CODES     SEGMENT 'code'    ;;'classOfSegment'
    ASSUME CS:CODES,DS:DATAS  
PROGRAM:  
;;здесь верно - загрузка прог сегментов
  MOV AX,DATAS                  
  MOV DS,AX  
  ;;неясно зачем дальнейший код, немного повергает в шок...
  MOV CX,10  
  MOV AX,0  
  ;;следующая команда значит "если СХ ==0 переходим на метку К." Причём СХ при любом раскладе =10.
  JCXZ K
;;вообще  зачем?)))
A: INC AX  
  LOOP A  
  ;;вот до сюда
  ;;эквивалент всему этому add AX,10
   
   
  ;; всё это уже больше похоже на правду
  MOV CX,5  
  MOV J,5  
  MOV BX,OFFSET I  
B: MOV AX,X  
;;складываете два операнда памяти - нельзя
  ADD X,Y  
  MUL J  
  MOV [BX],AX  
  ADD BX,2  
  DEC J  
  MOV DX,J  
  CMP J,DX  
  LOOPZ B  
  JMP K  
K:  
mov I,ax  
MOV AX,4C00H  
INT 21H  
CODES ENDS  
END PROGRAM
 

В общем оч сложно код подкорректировать.
Видимо Вы имели ввиду под
Цитата:
мы не так эти програмки пишем
использовать полные наименования программных сегментов циклов Loop...
Полупереписал)
 

Цитата:
;;Z=(x+y)*J J=1...5
 
DATAS SEGMENT 'data'
X DW 3
Y DW 6  
J DB ?
I DW 0,0,0,0,0,0,0,0
DATAS ENDS  
CODES     SEGMENT 'code'
    ASSUME CS:CODES,DS:DATAS
PROGRAM:  
  MOV AX,DATAS            ;;загрузка адресса сегмента данных в сегментный регистр
  mov DS,AX
   
  mov AX,X                ;; пихаем Х в АХ             AX=X
  add AX,Y                ;;прибавляем к Х в АХ У          AX=X+Y
   
  mov CX,5                ;;готовимся к циклу - в СХ кол-во итераций
  mov BX,offset I        ;; в ВХ пишем адресс памяти куда ответ писать
  mov J,1                ;;J=1()не на всех машинах вроде грузится - мб mov DX,1 mov J,DX
  mov [BX],AX            ;; пишем ответ при J=1  
 
next:
  mov DX,AX                ;;сохраняем в резерве DX наше значение
  inc J                    ;;берём очередное J  
  mul J                    ;;умножаем наше X+Y на число J    AX=(X+Y)*J
  add BX,2                ;;берём след ячейку памяти
  mov [BX],AX            ;;и пишем в неё ответ  
  mov AX,DX                ;;восстанавливаем AX
  loop next                ;;идём к следующему J.
;;на самом деле алгоритм несколько хромает
;;логичнее было бы на каждое увеличение J просто прибавлять  
;; группу X+Y, так оно быстрее. Не переделывал, дабы решать по примеру и подобию
 
MOV AX,4C00H
INT 21H  
CODES ENDS  
END PROGRAM
 


Всего записей: 33 | Зарегистр. 04-09-2008 | Отправлено: 02:15 09-05-2009
Ickorka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ааааа)класс, спасибо)даже работает ^_^
Сейчас попробую для своего примера сделать z=(x+6)*J/(13-Y) при J=1,2,..7 :
Правильно или нет...?) А где-то показывает масив который получился.....?
DATAS SEGMENT 'data'  
X DW 3  
Y DW 6  
J DB ?  
I DW 0,0,0,0,0,0,0,0  
DATAS ENDS  
CODES     SEGMENT 'code'  
    ASSUME CS:CODES,DS:DATAS  
PROGRAM:  
  MOV AX,DATAS          
  mov DS,AX  
  mov ax,x
  add ax,6
  mov bx,13
  sub bx,y
  idiv bx
  mov CX,7                  
  mov BX,offset I        
  mov J,1                
  mov [BX],AX            
next:  
  mov DX,AX                
  inc J                    
  mul J                    
  add BX,2                
  mov [BX],AX            
  mov AX,DX                
  loop next                
MOV AX,4C00H  
INT 21H  
CODES ENDS  
END PROGRAM
   
А если услове тоже самое  (z=(x+6)*J/(13-Y)) , но нужно найти в цикле смещение элемента массива в котором записано число 0 а сам масим записать как I DB 4,0,5,6,7,8,9,10....что изменится и гед будет указываться то смещение?)
Зарание, спасибо )

Всего записей: 7 | Зарегистр. 06-05-2009 | Отправлено: 16:20 10-05-2009 | Исправлено: Ickorka, 16:43 10-05-2009
aridtree



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ickorka
перезагружаться в винду лень)))
но вижу как минимум одну ошибку/полуошибку так:

Цитата:
idiv bx

при делении делимое должно находиться в AX,DX:AX если не подключена директива .386 и EAX, если подключена.
И всё бы хорошо, но делимое должно быть вдвое больше делителя, а частное по размерности равно делителю.
Таким образом, раз вы пишете idiv BX, то вы должны гарантировать, что DX=0. Т.е. крайне желательно перед делением xor DX,DX.
Дальше так же как и в примере (А+Б )*Джи, потому врят ли там ошибки))
 
Массив смотреть в дебаге... он(дебаг) вещь крайне полезная, практически жизненно необходимая.
Я, если честно, не понял, что Вы имелли ввиду под
Цитата:
 
А если услове тоже самое  (z=(x+6)*J/(13-Y)) , но нужно найти в цикле смещение элемента массива в котором записано число 0 а сам масим записать как I DB 4,0,5,6,7,8,9,10....что изменится и гед будет указываться то смещение?)


Всего записей: 33 | Зарегистр. 04-09-2008 | Отправлено: 00:50 11-05-2009
Ickorka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А если услове тоже самое  (z=(x+6)*J/(13-Y)) , но нужно найти в цикле смещение элемента массива в котором записано число 0 а сам масим записать как I DB 4,0,5,6,7,8,9,10....что изменится и гед будет указываться то смещение?)

ну походу вместое этого  I DW 0,0,0,0,0,0,0,0 записать это DB 4,0,5,6,7,8,9,10..и найти нолик...)наверное так)П.С. Бороды у меня нету

Всего записей: 7 | Зарегистр. 06-05-2009 | Отправлено: 10:50 11-05-2009
aridtree



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ickorka
 

Цитата:
 
data SEGMENT 'data'
Iscorka db 1,3,84,13,0,13,2,6
Len equ $-Iscorka
data ENDS
code SEGMENT 'code'
assume CS:code,DS:data
start:
    mov AX,data
    mov ES,AX
    lea DI,Iscorka
    xor AL,AL
    mov CX,Len
 
    repne scasb
    jcxz net_nolia
    mov AX,Len
    sub AX,CX            ;AX - shift
    dec AX                ;-1, after scas pointer on next
net_nolia:
    mov AX,4c00h
    int 21h
code ENDS
END start
 

Типа того наверное...
(Искать-ищет, вот только то ли Вам надо?)))

Всего записей: 33 | Зарегистр. 04-09-2008 | Отправлено: 19:59 11-05-2009
Ickorka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Некоторые строчик не знаю, что означают...)

Цитата:
data SEGMENT 'data'  
Iscorka db 1,3,84,13,0,13,2,6  
Len equ $-Iscorka _______________________эта
data ENDS  
code SEGMENT 'code'  
assume CS:code,DS:data  
start:  
    mov AX,data  
    mov ES,AX ____________________________почему ES , ане DS
    lea DI,Iscorka ______________эта
    xor AL,AL ___________что за AL?
    mov CX,Len _______опять таки, что за Len*
 
    repne scasb _______это
    jcxz net_nolia  
    mov AX,Len ___________*
    sub AX,CX            ;AX - shift  
    dec AX                ;-1, after scas pointer on next  
net_nolia:  
    mov AX,4c00h  
    int 21h  
code ENDS  
END start

Спасибо
А такое можете посмотреть? :
Установить, сбросить в регистре AX:
биты в 1          тетрады            AX
2,9,12,13                4                 6317h

Всего записей: 7 | Зарегистр. 06-05-2009 | Отправлено: 20:31 11-05-2009
aridtree



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
    mov ES,AX ____________________________почему ES , ане DS

строчная комманда scasb требует, чтобы сравниваемая строка находилась в ES:DI
 

Цитата:
Len equ $-Iscorka _______________________эта

а-ля константа ассемблера, дословно значит "из текущего положения указателя на память вычесть метку"
дабы получить размер массива.(Чтобы ежели нужда будет добавить ещё элемент прога работала)

Цитата:
 lea DI,Iscorka ______________эта

загрузка эффективного адреса в DI, опять же для скаса

Цитата:
  xor AL,AL ___________что за AL?

AL- это младшая часть регистра AX.

Цитата:
mov CX,Len _______опять таки, что за Len*

-"-

Цитата:
repne scasb _______это

волшебная команда "Искать в ES:DI AL", когда найдёт - соскакивает на следуйщий элемент.
 
 
 
 
 
 
Добавлено:

Цитата:
Установить, сбросить в регистре AX:  
биты в 1          тетрады            AX  
2,9,12,13                4                 6317h

биты

Цитата:
 
xor AX,AX
or AX,0011001000000100b

 
тетрады

Цитата:
 
xor AX,AX
or AX,0f000h
 


Цитата:
 
mov AX,6317h
 

 
 
 

Всего записей: 33 | Зарегистр. 04-09-2008 | Отправлено: 21:17 11-05-2009
kavidi

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите исправить ошибки в программе (решение квадратного уравнения) :
 
Подробнее...

Всего записей: 1 | Зарегистр. 12-05-2009 | Отправлено: 18:06 12-05-2009 | Исправлено: kavidi, 18:22 12-05-2009
Prober

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kavidi
Где-то я это уже видел...
Нашел: http://liloisproj.narod.ru/res_kv.htm

Всего записей: 680 | Зарегистр. 01-11-2006 | Отправлено: 19:26 12-05-2009
Ickorka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
xor AX,AX  
or AX,0011001000000100b  
     **
тетрады  
xor AX,AX  
or AX,0f000h  
   ***
mov AX,6317h

Спасибо...))))только а как его в  программу....

Всего записей: 7 | Зарегистр. 06-05-2009 | Отправлено: 20:24 12-05-2009
Liven200590

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалста,,,, одну задачу на ассемблере.... очень срочно.... 1.    Дан массив из 9 байт. Рассматривая его как массив из 72 бит, посчитать число переходов между нулями и единицами.    

Всего записей: 1 | Зарегистр. 14-05-2009 | Отправлено: 15:53 14-05-2009
aridtree



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Liven200590

Код:
 
.model tiny
.code
org 100h
start:
    mov AX,CS
    mov DS,AX
 
    mov DI,offset mas
    mov SI,DI
    add SI,9
    mov AL,byte ptr [DI]
    mov cflag,AL
    xor BX,BX
 
nextByte:
    mov AL,[DI]
    mov AH,cflag
    ror AH,1
    xor AH,AL
    test AH,10000000b
    jz ctbIkO
    inc BX
ctbIkO:
    mov DL,AL
 
    shr DL,1
    jc Scfl
    mov cflag,byte ptr 0
    jmp tuda
  Scfl:
    mov cflag,byte ptr 1
 tuda:
 
    xor AL,DL
    mov CL,1
  vse:
    test AL,CL
    jz nextEl
    inc BX
nextEl:
    shl CL,1
    jnc vse
 
    inc DI
    cmp DI,SI
    jne nextByte
 
    mov AX,4c00h
    int 21h
mas db "asdfghjkl"
cflag db 0
end start
 
 


Всего записей: 33 | Зарегистр. 04-09-2008 | Отправлено: 19:18 14-05-2009 | Исправлено: aridtree, 19:20 14-05-2009
Firemanser



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если у кого будет время и желание, помогите исправить баг с этой программой - проигрывателем CD дисков. Баг в том, что нажатие кнопки "|<" всегда ставит на первый трек, а нажатие ">|" всегда на второй. Мне кажется, собака порылась тут: 004031DB, инструкция seek cdaudio to
_http://tim-soft.narod.ru/download/CD-Player.exe

Всего записей: 476 | Зарегистр. 01-04-2008 | Отправлено: 20:17 14-05-2009 | Исправлено: Firemanser, 20:21 14-05-2009
Katenok0711



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, пожалуйста, помогите!!!!!задачи вроде не очень сложные...но я на занятия ходила чаще препода=) но задачки сдать нужно...
Вот они:
1. Работа со строками(строки вводятся пользователем с клавиатуры)
а)вычисление длины строки
б)конкатенация двух строк(склеивание)
в)реверс строки
г)поиск подстроки в заданной строке
д)преобразование всех символов в строке в верхний/нижний регистр
 
2.Преобразование типов данных
а)перевод целых чисел со знаком в строку
б) перевод строки в число. Реализовать обработку некорректного ввода данных
в)Перевод числа из исходной системы счисления в требуемую(основания исходной и требуемой системы счисления от 2 до 16; все исходные данные вводятся с экрана)
г) вычисление n-ого члена последовательности Фибоначчи
 
Пожалуйста!!!!помогите!!!!!очень нужно=) Заранее огромное СПАСИБО!!!

Всего записей: 1 | Зарегистр. 17-05-2009 | Отправлено: 17:28 17-05-2009
Aisha_Dare



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
очень нужна ваша помощ!!
не могу написать на асемблере((
ход выполнения:
*создать масив чисел случайного порядка(не больше 20 элементов)
*вывести его на экран
*отсортировать  
метод:
Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При проходе алгоритма, элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма.
http://ru.wikipedia.org/wiki/Сортировка_пузырьком  здесь описание и примеры на разных языках
*вывести результат
очень на вас надеюсь, на С или Паскале не проблема, но асемблер никак не получается
заранее благодарю!!!

Всего записей: 3 | Зарегистр. 16-03-2009 | Отправлено: 18:03 19-05-2009
aridtree



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aisha_Dare
_http://liloisproj.narod.ru/asm_bul.htm
 
PS: уж что-что, а сортировки то мог бы и поискать в инете, ибо дело это высокотрадиционное, часто задаваемое)))

Всего записей: 33 | Зарегистр. 04-09-2008 | Отправлено: 00:32 20-05-2009
molko



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите решить задачу. Дано предложение.Определить сколько раз два соседних слова начинаются на одну букву. Предложение вводить с клавы не нужно, задается в программе

Всего записей: 4 | Зарегистр. 05-05-2009 | Отправлено: 15:07 23-05-2009
FSAV10

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста! Очень надо, горю((( написать программу обеспечивающую пропорционально-интегральное регулирование температуры путём изменения длительности импульса. Датчик температуры имеет выходное напряжение от 0.5 до 5в. Ширина импульса изменяется от 1 - 100мс.
Заранее спасибо!)

Всего записей: 1 | Зарегистр. 25-05-2009 | Отправлено: 15:19 25-05-2009
adator

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, пожалуйста!
Задача такого типа: имеем 10 элементов типа байт. нужно найти максимальное количество одинаковых элементов.
Очень нужно,  уже сегодня сдавать, а кроме этого ещё курсовик по станкам доделывать надо...

Всего записей: 1 | Зарегистр. 30-05-2009 | Отправлено: 01:07 30-05-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru