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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья,помогите доработать программу!!!  
Имеется программа на Assembler которая ищет целое слово, введенное с клавиатуры в файле "wesna.dat". как сделать так, чтобы поиск осуществлялся не в одном файле, а в нескольких-например, в четырех.
Подробнее...




Читаем шапку!

Всего записей: 162 | Зарегистр. 04-11-2006 | Отправлено: 21:02 08-12-2006 | Исправлено: ShIvADeSt, 02:04 11-12-2006
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
HRyk
с кодом - рабочий или нет - не разбирался
Подробнее...

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 22:54 08-12-2006 | Исправлено: ShIvADeSt, 02:05 11-12-2006
HRyk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, нужна помощь в решении. Написал две программки, 1-я заполняет файл "константными записями", заданными в самой программе,  
2-я осуществляет буферезированный ввод строки.
Как теперь осуществить буферезированное заполнение файла?
 
код 1-ой программы:
         ;        заполнение  
    ;    файла 'wesna.dat'
 
        sega    segment
            assume    cs:sega,ds:sega
            org    100h
        beg:    mov    ah,3dh        ;открытие файла
            mov    al,1        ;атрибут 0-чт 1-з 2-чт-з
            lea    dx,fname
            int    21h
            mov    handle,ax
            mov    si,0
            mov    di,0
         m1:     mov    ah,42h        ;установка указ
            mov    al,0        ;код метода смещ 0-абс смещ
            mov    bx,handle     ;1-от нач ф с текущ позиции
                        ;2- от конца ф с текущ поз
            mov    cx,0        ;старш часть смещ
            mov    dx,t        ;младш часть смещ
            int    21h
            mov    ah,40h        ;чтение ф
            mov    bx,handle
            mov    cx,5        ;сколько читать
            lea     dx,buf[di]        ;куда читать
            int    21H
            add    di,5
            add    t,5
            inc    si
            cmp    si,5
            jne    m1
            
            
            int    20h
        t    dw    0                
        fname    db    'wesna.dat',0
        handle    dw    ?
        buf    db    'a111k'
            db    'b222l'
            db    'c333k'
            db    'd444l'
                db      'e555k'  
 
 
код 2-ой программы:
                          art    segment
                 assume    cs:art,ds:art
                org    100h
            m1:    mov    ah,0ah
                lea    dx,buf
                int    21h
                mov    ah,09h    
                lea    dx,t3
                int    21h
                mov    bl,t1
                mov    di,0
            m2:    mov    al,t2[di]
                mov    t4[di],al
                inc    di
                cmp    di,bx
                jne    m2
                mov    t4[di],'$'
                mov    ah,09h
                lea    dx,t4
                int    21h
                mov    ah,08h
                int    21h
                int    20h
        ;    fname    db    'leto.dat',0
            handle    dw    ?
            buf    db    10
            t1    db    ?
            t2    db    9 dup (' '),'$'
            t3    db    10,13,'$'
            t4    db    9 dup (' '),'$'
                art    ends
                end    m1        
 

Всего записей: 162 | Зарегистр. 04-11-2006 | Отправлено: 15:28 16-12-2006 | Исправлено: HRyk, 18:06 16-12-2006
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
блин. и что понимать под
Цитата:
буферезированное заполнение файла
?
 
зы. оформь всё в more, ShIvADeSt'у скоро надоест исправлять

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 21:29 16-12-2006
HRyk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет проблем. Специально для ShIvADeSt'а готов на любые трудности. Буферезированное заполнение файла означает заполнение его любыми словами, вводимыми с клавиатуры. (Сейчас я умею заполнять файл "пробитыми константами" вида: a111k,b222l,c333k, как в программке 1) (Во второй программке я осилил буферезированный ввод строки) теперь нужно "совместить" эти программы, тоесть заполнять файл словами произвольной длины, вводимыми с клавиатуры, до тех пор, пока в файле не окажется некоторое количество символов. Не могу осилить уже несколько дней. Rain87, на тебя вся надежда

Всего записей: 162 | Зарегистр. 04-11-2006 | Отправлено: 21:43 16-12-2006
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt конечно будет безумно рад, узнав что такое буферизированное заполнение файла но я имел в виду то что написано в первом посте -
Цитата:
все большие листинги оформлять тегом more.

по поводу задач щас посмотрю
 
Добавлено:
HRyk
в общем, ни одна из прог работать не хочет, глючат и вылетают. разбираться почему - как бы влом, вылетают даже после фикса очевидных багов (вроде неинициализации DS и т.п.). может у меня компилер несовместим с твоим? у меня tasm5.0
 
по поводу задачи - ну а в чём проблема то? если умеешь вводить строку буферизовано вводи её (столько символов, сколько надо), а потом пиши в файл всё что ввёл
 
зы. по-моему разумно пользовать функции расширенного чтения и записи -
DOS Fn 3fH: Читать файл через описатель
DOS Fn 40H: Писать в файл через описатель

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 22:28 16-12-2006
HRyk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ОК, Rain87, подскажи такую штукенцию: я прогу написал, она файл заполняет словами, вводимыми с клавы, но эти слова (в файле) если они меньше 9 символов, забиваются "значками" случайными, как это исправить?  

Всего записей: 162 | Зарегистр. 04-11-2006 | Отправлено: 14:38 17-12-2006 | Исправлено: HRyk, 17:06 17-12-2006
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
HRyk
когда ты читаешь 21 интом 10 функцией, то она тебе возвращает количество реально считанных символов. вот ты когда пишешь в файл, СХ ставь не 9, а вот это число, которое вернула 10 функция инт 21

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 20:04 17-12-2006
Morpy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня две нерешённых задачи по ассемблеру. Интересует вариант решения нижеприведённых заданий за деньги.
 
1)Шестнадцатеричное число представлено в виде строки ASCII. Преобразовать данную строку во внутреннее представление. Предусмотреть возможность многобайтного результата.
 
2)Заданы массивы A[N], B[N] из элементов типа word(целое 16-ти разрядное со знаком). Составить программу, формирующую массив C[N] из разности элементов массивов А и В.
(с[i]=a[i]-b[i]). Размерность элементов массива с[n] должна обеспечивать корректное вычитание(если результат не умещается в 16-ти разрядах)
 
 
Надеюсь на Вашу помощь.

Всего записей: 3 | Зарегистр. 18-12-2006 | Отправлено: 20:36 18-12-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для
Цитата:
Интересует вариант решения нижеприведённых заданий за деньги

сюда

Всего записей: 24104 | Зарегистр. 06-12-2002 | Отправлено: 20:48 18-12-2006
Morpy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Перенёс. Извините, просмотрел не все разделы :о

Всего записей: 3 | Зарегистр. 18-12-2006 | Отправлено: 23:12 18-12-2006
AHuTA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Объясните пож. как запустить TASM.exe в windowsXP?
или дайте ссылку. Спасибо!

Всего записей: 4 | Зарегистр. 15-12-2006 | Отправлено: 22:33 25-12-2006 | Исправлено: AHuTA, 22:36 25-12-2006
TaHIOIIIkA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят помогите пожалуйста решить пару задач?
времени обс. не хватает!
1  Ввести с клавиатуры строку. Посчитать в ней количество запятых.
Вывести результаты на экран.
 
2  Разработать две подпрограммы, одна из которых сравнивает  
две строки по лексикографическому порядку,
а другая обменивает значения двух строк. Разработать программу,
которая вводит с клавиатуры несколь-ко строк (конец ввода пустая строка)
и сортирует их в лексикографическом порядке.(способ передачи параметров  
в процедуру выбирать произвольно. Зациклить программу по вводу строки,  
а признаком окончания работы считать ввод пустой строки.)

Всего записей: 6 | Зарегистр. 25-12-2006 | Отправлено: 22:58 25-12-2006
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TaHIOIIIkA
1. Подробнее...

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 18:06 26-12-2006
Qwezar



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Люди, помогите плиз, эта прога ищет все полиндромы до 5000 нужно их вывести на экран и в файл, с экраном все ОК, а вот с файлом проблема, создается пкстой txt и все.
 

Код:
 
MODEL TINY
.486
.CODE
 assume cs:@code,ds:@code,es:@code,ss:@code
org 100h
 
begin:
 
 mov ah,3ch          ;Создание файла
 mov cx,0            ;Для записи и чтения  
 mov dx,offset fn  
 mov bx,fnd
 int 21h
 mov fnd,ax
 
 mov word ptr count,0
;до 10  
 mov eax,-1
p1:
 inc eax
 push eax
 inc count
 call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0
 mov ah,2h
 mov dl,32
 int 21h
 
 pop eax
 
 cmp eax,9
 jb p1
 
;двузначные
 mov eax,-1
 mov ebx,0
p2:
 
t1: inc eax
    jmp t3  
 
t2: inc ebx
    jmp t3  
   
t3:  
 cmp eax,ebx
 jnz nm1
 
 push eax
 push ebx
 inc count
 call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0
 call print_n pascal,ebx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0
 mov ah,2h
 mov dl,32
 int 21h
 
 pop ebx
 pop eax
 
nm1:
 cmp ebx,9  
 jz nm2
 
 jmp t2
 
nm2:
 mov ebx,0
 cmp eax,9
 jz p3
 
 jmp t1
;трехзначные
 
p3:
 mov eax,0
 mov ebx,0
 mov ecx,0
 jmp r4
 
r1: inc eax
    jmp r4
 
r2: inc ebx
    jmp r4  
   
r3: inc ecx
    jmp r4  
 
r4:  
 cmp eax,ecx
 jnz mn1
 
 push eax
 push ebx
 push ecx
 inc count
 call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0
 call print_n pascal,ebx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0
 call print_n pascal,ecx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0
 mov ah,2h
 mov dl,32
 int 21h
 
 pop ecx
 pop ebx
 pop eax
mn1:
 cmp ecx,9  
 jz mn2
 
 jmp r3
 
mn2:  
 mov ecx,0
 cmp ebx,9  
 jz mn3
 jmp r2
mn3:
 mov ebx,0
 cmp eax,9
 jz p4
 
 jmp r1
 
p4:
;четырехзначные  
 mov eax,0
 mov ebx,0
 mov ecx,0
 mov edx,0
 jmp m5
 
m1: inc eax
    jmp m5  
 
m2: inc ebx
    jmp m5    
 
m3: inc ecx
    jmp m5  
 
m4: inc edx
    jmp m5  
 
m5:  
 cmp eax,edx
 jnz n1
 cmp ebx,ecx  
 jz m7
n1:
 cmp edx,9  
 jz n2
 
 jmp m4
 
n2:
 mov edx,0
 cmp ecx,9
 jz n3
 
 jmp m3
 
n3:
 mov ecx,0
 cmp ebx,9
 jz n4
 
 jmp m2
 
n4:
 mov ebx,0
 cmp eax,4
 jz exit
 
 jmp m1
 
m7:
 inc count
 
 push eax
 push ebx
 push ecx
 push edx
 
 call print_n pascal,eax,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0  
 call print_n pascal,ebx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0  
 call print_n pascal,ecx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0  
 call print_n pascal,edx,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0  
 
 mov ah,2h
 mov dl,32
 int 21h
 
 pop edx  
 pop ecx
 pop ebx
 pop eax
 
 jmp n1
 
exit:
 call print_n pascal,word ptr count,word ptr 0,word ptr 1,word ptr 1,word ptr 0,word ptr 0  
 mov ah,4ch
 int 21h
 
 
print_n proc near ;Процедура вывода десятичного числа на экран и в файл  
 locals @@  
 arg beg,zero,f_handle,pp0,num_off:word,numb:dword=arg_size  
 
 ;Аргументы процедуры:  
 ;numb: число(dword)
 ;num_off: смещение строки, где содержится число(word)
 ;pp0: 0-не печатать, 1-на экран, 2-в файл(word)
 ;f_handle: дескриптор файла(word)
 ;zero: 0-не печатать ведущие нули(word)
 ;beg: отступ в знаках от начала печатаемого числа(<=9)(word)
 
 push bp    
 mov bp,sp
 push eax
 push ebx  
 push cx
 push edx  
 push si
 
 mov cx,10    ;Max длина выводимого числа
 mov si,num_off
 push cx
 
@p:
 mov byte ptr [si],'0'    ;Заполняем символами '0'
 inc si            
loop @p  
 pop cx
 mov eax,numb        ;Представляемое число
 mov si,num_off        ;Адрес результата для печати
 add si,9
 mov ebx,10        ;Делитель для выделения цифры
 
@@pr:  
 mov edx,0
 div ebx
 add dl,'0'        ;Переводим символ в цифру
 mov byte ptr [si],dl
 or eax,eax        ;eax=0?
 jz short @@pr2
 dec si
loop @@pr
 
@@pr2:            ;В si фдрес первой ведущей ненулевой цифры
 cmp pp0,0        ;Признак печати=0? Да-
 je @@e6        ;Выход без печати
 mov ah,40h        ;Нет-печать числа  
 
 mov cx,10        ;Max длина числа
 mov dx,offset num_off    
 mov bx,1        ;Дескриптор экрана
 cmp pp0,2
 je @@e1
 jmp short @@e2
 
@@e1:
 mov bx,f_handle     ;Дескриптор файла
 
@@e2:
 cmp zero,0
 jne short @@e3  
 add cx,dx         ;Помещаем в cx адрес первой ненулевой цифры
 sub cx,si
 mov dx,si
 jmp short @@e4
 
@@e3:
 sub cx,beg        ;Ведущие нули
 add dx,beg
 
@@e4:
 int 21h
 
@@e6:
 pop si
 pop edx
 pop cx  
 pop ebx
 pop eax
 mov sp,bp        ;Восстанавливаем указатель стека к моменту выхода
 pop bp
 ret arg_size
 
print_n endp    
 count dw ?
 ent db ' '
 fn db 'asm.txt',0
 fnd dw ?
end begin
 

Всего записей: 360 | Зарегистр. 31-12-2006 | Отправлено: 17:07 04-01-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Qwezar
лень код смотреть, вопрос навскидку - файл не забываете закрывать?

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 19:05 04-01-2007
TaHIOIIIkA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rain87
большое спасибо!
Поможешь со второй, plzzzz?=)

Всего записей: 6 | Зарегистр. 25-12-2006 | Отправлено: 16:20 08-01-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TaHIOIIIkA
щас помогу
 
Добавлено:
блин. слушай, а обязательно делать перестановку строк? имхо проще сделать массив индексов, т.е. 1й элемент обозначает, какая строка стоит на 1м месте, 2й - какая на 2м и т.д.
 
т.е. если надо обменять строки 3 и 5 местами, то я в массиве индексов обменяю 3 и 5 элемент, а сами строки останутся на месте. а при выводе я выведу сначала строку, номер которой записан в 3 ячейке индексного массива - т.е. 5ю строку, а потом - то что в 5й ячейке - т.е. 3ю строку
 
если же надо обязательно перемещать строки (хоть это и тупость), то надо делать строки фиксированной длины - т.е. не любой, а жёстко заданной. иначе перемещение строк будет сущим кошмаром
 
Добавлено:
если надо всё-таки делать с перемещением строк, то скажи, какой длины они должны быть

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 16:40 08-01-2007
TaHIOIIIkA

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rain87
 
Делай как тебе удобней!!
Надеюсь, препод оценит рациональный подход...=)

Всего записей: 6 | Зарегистр. 25-12-2006 | Отправлено: 11:55 10-01-2007
Открыть новую тему     Написать ответ в эту тему

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