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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
ValidolX

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Chezara
 
 SETP/SETPE - Set if Parity / Set if Parity Even  (386+). . . . . .  
  SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+). . . . .  

Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 23:13 06-05-2011
SERIOUS2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такая вот для меня задача.  
 
Задан одномерный массив. Вывести на экран элементы массива, которые больше 5 и их количество. Массив задать в сегменте данных или ввести с клавиатуры.
 
Вроде бы всё правильно сделал, только что-то не то.
тут кусок кода

Всего записей: 168 | Зарегистр. 07-06-2006 | Отправлено: 20:35 08-05-2011
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SERIOUS2
Подобные вещи легко делаются в Visual C++. Пишется код на С и компилируется в ассемблер. Потом надо почистить выход, для преподавателя.
 
Пролог-эпилог процедур не забыть выкинуть.
 
Для 16-ти битного надо старый Visual C++ 1.5. Думаю, найти не проблема.

----------
Женщина - это такая баба, с которой хочется заняться сексом немедленно... (с) 2006

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 20:43 08-05-2011
SERIOUS2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OldGopher
Переслать строку произвольной длины, включив ее в состав другой,  более длинной строки. Вывести полученную строку на экран. Строки описать в сегменте данных.  
 
А вот это не знаешь даже как делать?
Просто мне дали такое задание, а фраза переслать смущает.
 
 
Мне не обязательно 16 бит, т.е. я могу в чём-нибудь по новее сделать?

Всего записей: 168 | Зарегистр. 07-06-2006 | Отправлено: 20:46 08-05-2011 | Исправлено: SERIOUS2, 20:49 08-05-2011
SERIOUS2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне нужно три задачи было сделать, я не уверен в правильности этих задач, помогите люди пожалуйста
 
Программа вызывает процедуру, которая выводит символы. Параметры передаются через регистр. Тип процедуры дальняя. Процедура, вызывается 5 раз.
 
первый кусок кода
 
Программа вызывает процедуру, которая выводит строку. Параметры передаются через стек. Тип процедуры дальняя.
 
второй кусок кода
 
 
второй кусок кода альтернатива
 
Программа вызывает процедуру, которая выводит числа. Параметры передаются через глобальную переменную. Тип процедуры ближняя.
 
третий кусок кода

Всего записей: 168 | Зарегистр. 07-06-2006 | Отправлено: 07:45 13-05-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SERIOUS2
в первой всё ок, за исключением того, что "дальнюю" по-дальнему и вызывать надо...
при такой-то модели
 
.model small
...
call far ptr show
 
с третьей всё в порядке
будет время, гляну вторую...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 13:30 13-05-2011 | Исправлено: akaGM, 18:29 13-05-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
---
а ведь это не ты писал?
с такими комментариями, не должно быть никаких проблем в написании таких простых задач...
сам разбирайся...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 16:07 13-05-2011
SERIOUS2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Уже зачли эти кр, и я их сдирал с лекций, на удивление прокатило

Всего записей: 168 | Зарегистр. 07-06-2006 | Отправлено: 19:45 13-05-2011
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Мне интересно было, что подразумевается под "переслать"?
По сети переслать, моделируя некий протокол?
 
Сорри, что давно не был на форуме, личные проблемы.

----------
Женщина - это такая баба, с которой хочется заняться сексом немедленно... (с) 2006

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 13:38 16-05-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Помогите пожалуйста...
 
Model small
Stack 256
dataseg
mas db 1,2,3,4,5,6,7,8,9
codeseg
Start:
mov dl,mas
mov cx,8
mov bx,1
cont: cmp dl,mas[bx]
jg next
mov dl,mas[bx]
next: inc bx
loop cont
mov ax,4c00h
mov ah, mas
Mov ah, 09h
int 21h
end start
 
Не хочет выводить минимальный элемент массива, в чём проблема?

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 18:39 16-05-2011 | Исправлено: praidik, 18:40 16-05-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
praidik
mov ax,4c00h
mov ah, mas
Mov ah, 09h  
 
ну для начала что ты этим хотел сказать, выйти? вывести? что?

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 02:11 17-05-2011
tsknv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я в ступоре, где-то что-то не по глазам?  
Решил вспомнить ассемблер, FASM 1.69.31  
простейший код :  
 
use16  
org 100h  
mov eax,12345678h  
mov ebx,07654321h  
add eax,ebx  
int 20h  
 
выполняю под ms-dos 6.22 в отладчике CodeView 4.01  
открываю com файл в отладчике  
жму f10  
смотрю eax=12345678, ok  
жму f10 второй раз  
смотрю eax=60005678 ??!! Какого спрашивается х.. старшие 2 байта eax стали 6000?  
c ebx все в порядке ebx=07654321  
 
Вчера полдня на эти три строчки кода смотрел, ничего не понимаю, почему когда выполняется иструкция mov ebx,07654321h изменяется регистр eax !!?? Чудеса прямо какие-то, или у меня с головой чего-то не того ?

Всего записей: 2 | Зарегистр. 05-05-2011 | Отправлено: 05:11 19-05-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tsknv
Цитата:
CodeView 4.01

а это не очень протухший отладчик?

Цитата:
mov eax,12345678h  
mov ebx,07654321h

я не проверял, честно скажу, но это два (чего-то там 2^32-1) гигабайта не превышает?
и потом...
FASM
альтруисты пишут, чё б им не ошибиться...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 22:29 21-05-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хм. А откуда вообще eax и ebx в 16-битном коде?

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:39 21-05-2011
Ekaterina666

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите пожалуйста с поиском ошибки в программе
 
условие:
Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, посчитать количество пар единиц в окружении нулей. Конец последовательности рассматривать как нуль
 
 
 
data segment  
tick1 dw ?
tick2 dw ?
mass db 10101010b,11111111b,010000000b, 10110001b, 01101100b, 01101101b, 11110101b, 10110000b
data ends
code segment  
assume cs:code,ds:data
start:        
       mov ax,data
       mov ds,ax
       mov dx,2
       mov tick1,dx
       lea bx, mass
       mov cx, 3
beg:   mov al,[bx]
       
M3:    
       test al,00000001b ; проверяем установлен ли 0-й бит
       jnz M1 ; если нет то к М1
       inc tick1  ;да увеличиваем счетчик для 0
       shr al,1 ;сдвигаем биты
       inc tick2; увеличиваем счетчик битов
       cmp tick2,8 ;если он равен 8-ми загружаем след байт
       je m4
       jmp M3
M1:    cmp tick1,1 ;  
       jne M2 ; если счетчик не подходит то к М2
       mov tick1,0 ;подходит обнуляем его
       inc si ; увеличиваем счетчик совпадений 010
M2:    mov tick1,0
       shr al,1
       inc tick2
       cmp tick2,8
       je m4
      jmp M3
M4:   mov tick2,0
add bx,1
 
loop beg  
 
     mov ax,4c00h
       int 21h
  code ends
  end start

Всего записей: 1 | Зарегистр. 22-05-2011 | Отправлено: 22:03 22-05-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ekaterina666
первая ошибка скорее логическая:
 
tick2 dw ?
...
       inc tick2; увеличиваем счетчик битов
 
не инициализируешь переменную перед использованием, т.е. tick2 перед входом в цикл имеет "мусорное значение"...
пиши уж тогда всегда хоть так:
tick2 dw 0
и почему, кстати, в начале tick1 = 2?
 
и вот здесь тоже логика страдает

Код:
M1:    cmp tick1,1 ;  
       jne M2 ; если счетчик не подходит то к М2 ;зачем этот отскок на M2
       mov tick1,0 ;подходит обнуляем его           ;если здесь стоит тот же самый mov tick1,0 ?
       inc si ; увеличиваем счетчик совпадений 010
M2:    mov tick1,0

 
и почему loop должен крутиться три раза?
 
ты на бумажке алгоритм рисовал?
советую...
 


 inc si ; увеличиваем счетчик совпадений 010  
 
оказывается тут ещё один счётчик, и тоже неинициализированный и больше нигде не используемый...
 
полный сумбур...
сам писал программу-то?

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 02:27 23-05-2011 | Исправлено: akaGM, 02:48 23-05-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дайте пожалуйста не большой пример задачи которая переходит на какую либо метку при нажатии клавиши "1" Мне дали делать лабораторную... но даже не подумали объяснить что и как делается  
Буду очень благодарен! Я по примеру доделаю свою задачу...

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 17:27 24-05-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
praidik
читать клаву можно тремя способами: при помощи 60-ого порта, 9-bios-функции или 21-ого дос прерывания, (что проще всего)

Код:
mov ah, 1
int 21h
cmp al, '1'
je __1
cmp al, '2'
je __2
 
...
 
_1:
что-то делаем...
jmp __exit
 
_2:
что-то делаем...
jmp __exit
 
 
__exit:
завершение...


Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 18:24 24-05-2011
praidik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Спасибо, очень помогло!

Всего записей: 39 | Зарегистр. 15-11-2010 | Отправлено: 14:44 25-05-2011 | Исправлено: praidik, 14:45 25-05-2011
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ого!!! и как я эту тему проглядел... добавил в закладки...
bomzzz
а тут ещё и старые знакомые сидят!
 
Добавлено:
akaGM

Цитата:
читать клаву можно тремя способами: при помощи 60-ого порта, 9-bios-функции или 21-ого дос прерывания, (что проще всего)

int 16h ah=10h ещё вроде есть

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 16:29 25-05-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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