Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: ValaR4ik
Дата сообщения: 05.12.2007 02:04

Цитата:
Цитата:По адресу 0200h находится 12-ти байтное число.
по адресу 0210h второе 12-ти байтное число.
по адресу 0230h разместить их сумму.
по адресу 0240h разместить их разность.
по адресу 0250h разместить их разность, но при написании не использовать команды вычитания.
Все это должно быть организорвано в цикле.


решение если кому нужно:
Цитата:

mov si,200 ; инициализация указателя si;
mov di,240 ; ввод адреса массива-приёмника;
mov cl,10    ; инициализация счётчика цикла;
CYCLE:mov al,[si]    ; пересылка в МП байта из источника;
mov [di],al    ; пересылка байта из МП в приёмник;
inc si    ; вычисление адреса следующей ячейки источника;
inc di    ; продвижение указателя приёмника;
dec cl    ; модификация счётчика цикла;
jnz CYCLE ; проверка выхода из цикла;
hlt ; завершение пересылки массива.



2. Текст программы пересылки данных с использованием базовой адресации:
MOV BX,200 ; ввод адреса массива-источника;
     MOV BP,240 ; ввод адреса массива-приёмника;
     MOV CL,10 ; инициализация счётчика цикла;
CYCLE: MOV AL,[BX] ; пересылка в МП байта из источника;
    DS: MOV [BP],AL ; пересылка байта из МП в приёмник;
     INC BX ; продвижение указателей;
     INC BP ;
     DEC CL ; модификация счётчика цикла;
     JNZ CYCLE ; проверка выхода из цикла;
HLT ; завершение пересылки массива.

3. Текст программы пересылки данных с использованием смещения:

MOV DI,200 ; ввод адреса массива-источника;
     MOV CL,10 ; инициализация счётчика цикла;
CYCLE:MOV AL,[SI] ; пересылка в МП байта из источника;
     MOV [SI+0040],AL ; пересылка байта из МП в приёмник;
     INC DI ; продвижение указателей;
     DEC CL ; модификация счётчика цикла;
     JNZ CYCLE ; проверка выхода из цикла;
     HLT ; завершение пересылки массива.


4. Текст программы внутрисегментной пересылки данных без использования регистров DI, BX, BP:


     MOV SI,200 ; ввод адреса массива-источника;
     MOV DX,240 ; ввод адреса массива-приёмника;
     MOV CL,10 ; инициализация счётчика цикла;
CYCLE:MOV AL,[SI] ; пересылка в МП байта из источника;
     XCHG SI,DX ; в SI адрес массива-приёмника;
MOV [SI],AL ; пересылка байта из МП в приёмник;
XCHG SI,DX ; в SI снова адрес массива источника;
     INC DX ; продвижение указателей;
INC SI    ;
     DEC CL ; модификация счётчика цикла;
     JNZ CYCLE ; завершение пересылки массива.
     HLT ; завершение пересылки массива.





5. Текст программы пересылки данных с организацией счетчика цикла в памяти:

     MOV SI,0200
     MOV DI,0240
     MOV BYTE PTR [80],10
CYCLE: MOV AL,[SI]
     MOV [DI],AL
     INC SI
     INC DI
     DEC BYTE PTR [80]
     JNZ CYCLE
     HLT


6. Текст программы межсегментной пересылки данных с использованием индексной адресации:


     MOV SI,0200
     MOV DI,0240
     MOV CL,10
CYCLE:MOV AL,[SI]
     ES: MOV [DI],AL
     INC SI
     INC DI
     DEC CL
     JNZ CYCLE
     HLT
Автор: stsoldennis
Дата сообщения: 10.12.2007 16:22
Мне нужна помощь как новичку, а то в ассамблере я почти 0

Вот задача...

Создать файл ААА.TXT . Ввести с клавы 2 десятичных числа. Создать десятичную таблицу ASCII - кодов в пределах заданых чисел и записать её в файл. Выдать содержимое файла на экран...
Автор: akaGM
Дата сообщения: 10.12.2007 16:28
stsoldennis

Цитата:
Мне нужна помощь как новичку, а то в ассамблере я почти 0

как новичку в чём, в ассЕмблере?
а что ты сам сделал с этой задачей, что конкретно не получается или не понятно?
Автор: stsoldennis
Дата сообщения: 10.12.2007 16:31
у меня есть пример решения, но в этом примере есть только таблица ASCII, в принципе с ней всё ясно, мне не ясно как её создать и как заставить чтоб программа работала...
Да в асемблере
Автор: akaGM
Дата сообщения: 10.12.2007 17:11
stsoldennis
с нуля никто писать не будет, давай код...


Цитата:
Да в асемблере

ага, асCемблер
Автор: stsoldennis
Дата сообщения: 10.12.2007 17:31
Я ещё раз говорю что я 0 в ассемблере....попросил помощи начать.... если бы возникли трудности в середине я спросил бы и выложил код, не зря же прошу помощи...поможете или нет?
Могу показать рисунок..но здесь рисунок не прикрепишь..
Автор: akaGM
Дата сообщения: 10.12.2007 17:51
stsoldennis

Цитата:
что я 0 в ассемблере

а зачем тебе тогда это надо? лабораторная в обучении на программиста?
тогда лучше всего последовать совету eLLoco:

Цитата:
http://www.lib.ru/CTOTOR/IBMPC/abel.txt
изучай

а начать можно и так:
Код:
.386
.model flat, stdcall
.code
Автор: Pakell
Дата сообщения: 10.12.2007 20:53
Доброго времени суток! Очень прошу помочь решить 2 простые задачи на TASMe, так как здавать уже завтра, и не как не успеваю.
1. С клавиатуры вводится последовательность из n чисел. Найти max элемент последовательности.
2. С клавиатуры вводится одномерный массив чисел размерностью n. Заменить все 0 элементы, на число введенное с клавиатуры.
Буду ОЧЕНЬ признателен!
Автор: koc
Дата сообщения: 17.12.2007 15:19
помогите плизз
На masm под дос нужно:
1) ввести строку из 40 символов
2) найти самое короткое слово (слова пробелами разделены)
3) вывести количество слов, которые находятся справа от самого короткого.

например при вводе строки:
12345 123 12 123 12345 12345
должно вывести:
12
3
Автор: koc
Дата сообщения: 20.12.2007 16:06
ну найдите тогда хотя бы самое короткое слово, можно даже с уже определенной строкой.
Автор: grigorenko
Дата сообщения: 23.12.2007 17:56
Помогите пожалуйста.
Написать программу, окрашивающую оболочку Norton Commander в зеленый цвет
Автор: akaGM
Дата сообщения: 23.12.2007 18:52
вот уж вопрос, так вопрос...
НА ФИГА тебе?!

могу дать адреса экзешника...
а лучше пользуйся FAR'ом...
гы
Автор: grigorenko
Дата сообщения: 23.12.2007 20:11
контрольная akaGM
Автор: akaGM
Дата сообщения: 23.12.2007 20:14
нет слов...
даже точную формулировку задания и на кого так учат спрашивать не буду...
Автор: distance
Дата сообщения: 23.12.2007 21:06
akaGM
может, в школе для хакеров? :green:
Автор: akaGM
Дата сообщения: 23.12.2007 21:18
distance
не иначе...
я в своё время перебивал цвета в nc.exe и ne.exe (norton edit), т.к. конфигураторов у него своих не было...
но чтоб контрольную, да на асме... точно -- "школа им. Пети Нортонова"...
Автор: grigorenko
Дата сообщения: 23.12.2007 21:45
Контрольная работа по дисциплине «системное программное обеспечение» дословно задание:
Напишите программу, окрашивающую оболочку Norton Commander в зеленый цвет по заданию преподавателя.
Автор: akaGM
Дата сообщения: 23.12.2007 21:54
grigorenko

Цитата:
Напишите программу, окрашивающую оболочку Norton Commander в зеленый цвет по заданию преподавателя.

так и что здесь задаёт преподаватель?


Цитата:
«системное программное обеспечение»

не, парень, или сам или за тугрики... мы тебя на эту дисциплину не подписывали...
а вот с _твоим_ кодом разобраться поможем...
Автор: 0minous
Дата сообщения: 24.12.2007 20:52
Помогите решить задачку....

Записать в регистре DPTR наибольшее положительное число и его адрес из массива однобайтных чисел со знаком 30H-2FH РПД.

микропроцессор МК-51

вот мой набросок

Цитата:


MAX1 EQU 30H ;(директива ассемблера) MAX1 присвоить 30H
MAX2 EQU 31H ;(директива ассемблера) MAX2 присвоить 31H
MOV R0,#20H ;начальный адрес первого массива
MOV R1,#28H ;начальный адрес второго массива
MOV R2,#8 ;число элементов в массивах
MOV MAX1,#0 ;(MAX1) ← 0
MOV MAX2,#0 ;(MAX2) ← 0

;Поиск максимальных значений массивов

M1: MOV A,@R0 ;(А) ← ((R0)) пересылка в аккумулятор
;содержимого косвенноадресуемой ячейки
CJNE A,MAX1,M2 ;сравнение А с МАХ1 и переход если не равно MOV A,MAX1
M2: JC M3 ;если бит переноса С=1 то переход
MOV MAX1,A ;(МАХ1) ← (А)
M3: MOV A,@R1 ;(А) ← ((R1)) пересылка в аккумулятор
;содержимого косвенноадресуемой ячейки
CJNE A,MAX2,M4 ;сравнение А с МАХ2 и переход если не равно
MOV A,MAX2
M4: JC M5 ;если бит переноса С=1 то переход
MOV MAX2,A ;(МАХ2) ← (А)
M5: INC R1 ;инкремент R1
INC R0 ;инкремент R0
DJNZ R2,M1 ;декремент R2 и если не равно нулю, то переход


Автор: Lyrik
Дата сообщения: 24.12.2007 22:59
grigorenko
Есть два варианта решения:
1. резидент с обновлением видеобуфера (довольно сложно с правильным резидентом, и не факт, что будет работать, т.к. это только мысль, хотя мона еще и обработчик таймера переопределить)
2. заюзать порты видеоадаптера. минусы - окрасится в зеленый цвет не только Нортон, а все к чертям
akaGM
distance
задача вполне тривиальная и соответсвует курсу. помнится мы на лабах управляли разверткой экрана и баловались со слоями видеоадаптера было прикольно, но предмет оставил не лучшие воспоминания из-за препода думаю один человек тоже со мной согласится
Автор: akaGM
Дата сообщения: 25.12.2007 13:11
grigorenko

Цитата:
Есть два варианта решения:

есть три варианта решения...

третий:
находишь в экзешнике адрес, по которому расположен байт цвета,
пишешь программу замены этого байта в бинарном файле на нужный...
!
предварительно определяешь (путём проб и ошибок), что этот байт -- нужный!
!
искать нужно байт 1Ch -- стандартный цвет окон нортона (светлый циан на синем)
Автор: nonamekiss
Дата сообщения: 25.12.2007 17:45
Народ, плиз, помогите. Курсовик нужно сделать. Семетр балду пропинал, теперь сижу вот и ногти жру.
Задачка плевая:
Составить программу, вычисляющую простые числа в диапазоне от 2 до задаваемого с клавиатуры числа. результат вывести на экран.

Заранее спасибо.
Автор: Victor_Dobrov
Дата сообщения: 03.01.2008 04:32
Задача:
Установить курсор для другой программы (во многих играх смены курсора нет, а стандартный неудобен).

Кто-нибудь может привести пример в коде, который делает примерно это:
Меняем курсор по-умолчанию (OCR_NORMAL или сразу весь набор) на свой, играем в игру (в которой теперь наш курсор), по завершении программы восстанавливаем курсор (или весь набор) из ключа реестра 'HKCU\Control Panel\Cursors\Arrow' (при отсутствии из файла user32.dll)

    OldCursor:= LoadCursor(0, OCR_NORMAL)
    NewCursor:= LoadCursorFromFile('GameCursor.cur', OCR_NORMAL)
    SetSystemCursor(NewCursor, OCR_NORMAL)
        Execute('Game.exe', WaitUntilTerminated)
    SetSystemCursor(OldCursor, OCR_NORMAL)

Этот код условный, и почему-то не восстанавливает OldCursor, остаётся новый...
Автор: rain87
Дата сообщения: 03.01.2008 11:24
Victor_Dobrov
а причём тут ассемблер

nonamekiss
ты извини, но такое вряд ли кто напишет. задача плёвая в том смысле, что понятно как её писать. но она будет довольно таки длинная и нагромоджённая, поэтому её разве что по пьяни кто то сделает
Автор: zzz528
Дата сообщения: 07.01.2008 09:55
nonamekiss
решал такое. Оно не длинное совсем. по пьяне вот не помню.

создавать таблицу если брать 32 битное число то таблица будет 500 мб.
заполнять побитно (ставить бит 1) увеличиваемым умножением позиций где нулевые биты.... простоту числа определять по соотв. биту. Можно брать и байтную таблицу меньше вычислений но размер 4гб.

пример
2-2
2-2-2
....
2-3
2-3-2
2-3-2-2
....
2-3-2-2-2... макс
....
2-3-3-2-2... макс
...
2-3-3-3-3... макс
4 ужэ есть
2-5
...
2-3-5
...
Автор: Vakhalaa
Дата сообщения: 11.01.2008 23:24
Я начинающий.Почитав книги В.Пирогова загорелся не на шутку.Есть MASM32.Не могу врубиться как писать листинги для обучения и тестирования.В прошлом немного интересовался VB.
Совсем не то ,что я ожидал.Помогите советом.
Автор: miae
Дата сообщения: 15.01.2008 16:38
Здравствуйте.
Вопрос для Win32

Как в асме динамически загрузить библиотеку test.dll
Выполнить функцию proc1 из нее
Выгрузить библиотеку, чтобы места не жрало ...
Автор: koderr
Дата сообщения: 23.01.2008 14:50
miae
для MASM32:

Код: .data
szLibrary db "test.dll",0
szProcName db "proc1",0
.code
...
invoke LoadLibrary, offset szLibrary
push eax
invoke GetProcAddress, eax, offset szProcName
...
call FreeLibrary
...
Автор: Nino4ka
Дата сообщения: 24.01.2008 22:22
Народ,помогите срочно написать прогу плиз: Задан текст, в котором есть хотя бы одна точка. Преобразовать текст, удалив из него все запятые, предшествующие первой точке, и заменив все пробелы в тексте на символ «+».Как обычно - сессия пришла неожиданно...
Автор: Ravenice
Дата сообщения: 13.02.2008 07:51
Добрый день, есть задача:
"Даны два массива A и B различной размерности.
Сформировать третий массив С по правилу: сначала поместить в него элементы
Ci=MaxA-Bi, а затем поместить в массив C элементы Ck=MaxB-Ai"

Всё это сделать с помощью процедур Т__Т

Тест такой:
Пусть а имеет значение 1,4,8,3
Пусть b имеет значение 2,5,6
Результат:
с=(8-2),(8-5),(8-6),(6-1),(6-4),(6-8),(6-3), т.е. с=6,3,2,5,2,-2,3

Код двух массивов, размерность и элементы задаёт пользователь:
[more]include macro.lib
data segment
a db 100 dup (?)
b db 200 dup (?)
n1 db ?
n2 db ?
m1 db 'Введите кол-во элементов 1 массива: $'
m4 db 'Введите кол-во элементов 2 массива: $'
m2 db 'Введите эл-ты массива: $'
m3 db 'Вывод 1: $'
m5 db 'Вывод 2: $'
m6 db ' $'
t dw ?
d dw ?
data ends
sst segment stack
db 128 dup (?)
sst ends
code segment
assume cs:code, ds:data, ss:sst
vvod_mas proc ;------процедура, ввод
mov di,0
met21:
key_$2bin
crlf
mov [bx][di],al
inc di
loop met22
jmp met23
met22: jmp met21
met23: ret
vvod_mas endp ;------конец процедуры, ввод
vivod_mas proc ;------процедура, вывод
mov di,0
met31:
mov al,[bx][di]
cbw
print_number    ;вывод числа
message m6    ;пробелы между числами
inc di
loop met32
jmp met33
met32: jmp met31
met33: ret
vivod_mas endp ;------конец процедуры, вывод
J:    ;основная часть
mov ax,data
mov ds,ax
;начало
cls        ;очистка экрана
message m1    ;введите кол-во эл-тов в массиве 1
key_$2bin
crlf
mov n1,al
cbw
mov cl,al
lea bx,a
message m2    ;введите элементы массива
call vvod_mas ;-----ввод 1 массива
message m4    ;введите кол-во эл-тов в массиве 2
key_$2bin
crlf
mov n2,al
cbw
mov cx,ax
lea bx,b
message m2    ;введите эл-ты массива
call vvod_mas ;-----ввод 2 массива
mov cl,n1
lea bx,a
message m3    ;вывод 1
call vivod_mas ;-----вывод 1 массива
crlf
mov cl,n2
lea bx,b
message m5    ;вывод 2
call vivod_mas ;-----вывод 2 массива
    ;конец
mov ax,4c00h
int 21h
code ends
end J[/more]

А максимальное число из одного массива:
[more]
include macro.lib
data segment
m1 db 'Введите количество чисел:$'
m2 db 'Введите числа:$'
m3 db 'Максимальный элемент:$'
a dw ?
b dw ?
с dw 0
n dw ?
max dw ?
data ends
sst segment stack
db 128 dup (?)
sst ends
code segment
assume cs:code, ds:data, ss:sst
J:
mov dx,data
mov ds,dx
;начало
cls        ;очистка экрана
message m1 ;вывод кол-ва чисел(предложение)
key_$2bin
crlf
mov n,ax
message m2    ;вывод предложения 'Введите числа'
key_$2bin    ;ввод 1-го числа
crlf
mov max,ax
met2:
key_$2bin    ;ввод остальных чисел
crlf
mov b,ax
jmp met3
met8:jmp met2
met3:
mov ax,max
cmp b,ax
ja met5
jmp met9
met5:
mov ax,b
mov max,ax
met9:
dec n
cmp n,1
jne met8
met1:
message m3    ;вывод максимума(предложение)
crlf
print_number    ;вывод значения max (максимума,число)
    ;завершение
mov ax,4c00h
int 21h
code ends
end J
[/more]
Как код с определением максимума слить с предыдущим, для двух массивов, причём максимум должен непременно быть отдельной процедурой?
Я сначала думал подставить к процедуре ввода, но сказали неправильно
По идее сначала вводим данные, потом определяем максимум и заносим в отдельную переменную, после чего считается Ci и Ck, а потом вывод, но соображалки не хватает уже)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.