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

» Assembler

Автор: MERCURY127
Дата сообщения: 05.09.2012 10:17
pavel1978, ЛоЛ - это еще НЕ МКБ, понимаете? Указатель на первый МКБ еще нужно найти внутри ЛоЛ, о чем вам было подробно расписано на прошлой странице. И как найти следующий МКБ по текущему - тоже было сказано. И зачем вообще ФИЗИЧЕСКИЕ адреса? Программист ими не оперирует. Он логическими оперирует - сегментами и смещениями. Зайдите в аську, если все-таки хотите сделать задачу. Живое общение гораздо полезнее, проверено
Автор: delover
Дата сообщения: 12.09.2012 17:30
Поздравляю с днём ПРОГРАММИСТА
Автор: MERCURY127
Дата сообщения: 12.09.2012 17:57
Ась? Ааа... Ага. Спасибо еще бы работу найти... Без диплома...
Автор: akaGM
Дата сообщения: 12.09.2012 18:02
а в этой стране всё через жопу: или программист без диплома или диплом без программиста...
Автор: MERCURY127
Дата сообщения: 12.09.2012 20:23
Диплом без программиста... брр, как страшно... особенно на ночь...
Автор: akaGM
Дата сообщения: 13.09.2012 15:54
MERCURY127
а ты во всякие "задачи по...", в кот. программисты делают дипломы для "без программистов" не ходи... особенно на ночь...
Автор: Maksim_Avrorov
Дата сообщения: 09.10.2012 16:33
Всем доброго дня. Столкнулся с вопросом, почему программа которая должна выбирать самое большое число из массива делает это, но выдаёт вместо 39 только 9. Может кто то знает ответ?

data segment
arr db 1,2,5,30,57,8,6,4;
data ends

code segment
assume ds:data, cs:code
start:
mov ax,data
mov ds,ax
mov dl, arr
mov cx,7
mov bx,1
cnt:
cmp dl, arr[bx]
jg next
mov dl, arr[bx]
next:
inc bx
loop cnt
mov ah, 02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
Автор: bomzzz
Дата сообщения: 09.10.2012 17:44

Цитата:
mov ax,data
mov ds,ax

ds у тебя и так на сегмент даты установлен

Цитата:
assume ds:data,



Добавлено:
http://ziplib.com/emu8086/
вот эмулятор скачай, в него код засунь пошагово прогони и увидишь что у тебя все смешалось
ключ в инетенайдешь
Автор: Abs62
Дата сообщения: 09.10.2012 18:07
Maksim_Avrorov

Цитата:
Столкнулся с вопросом, почему программа которая должна выбирать самое большое число из массива делает это, но выдаёт вместо 39 только 9

Если для выдачи результата используется функция 2 21 прерывания, то всё правильно она выдаёт.
'9'='0'+9=39. Функция-то символ ждёт. Перевести свой результат в символьную форму - это задача программиста, а не системы.

Автор: Maksim_Avrorov
Дата сообщения: 09.10.2012 18:51
Кажется понял, число 39 это код символа '9'. Тогда очевидно надо другую функцию найти!
Спасибо.
На счёт сегментов то это я с книги брал там написано следующее:

code segment
assume cs:code, ds:data
mov ax, data
mov ds, ax
................................
Про сегменты не понял.......
Автор: blaro
Дата сообщения: 09.10.2012 20:20
Maksim_Avrorov

Цитата:
code segment

Означает что это сегмент кода


Цитата:
mov ax, data
mov ds, ax

ds получает адрес сегмента данных. Скорей всего сегмент данных определен так

Код:
data segment
какие-то переменные
data ends
Автор: Abs62
Дата сообщения: 09.10.2012 20:39

Цитата:
Не знаю как правильно и понятно объяснить. Кто нибудь кто знает, объясните пожалуйста.

"assume" - это указание компилятору, через какой сегментный регистр он должен адресовать соответствующий сегмент. Например, если в вышеприведённом коде указать не "assume ds:data", а "assume es:data", то и обращение к переменным в сегменте "data" будет идти не через ds, а через es. И оператор "mov dl, arr" будет оттранслирован в "mov dl, es:arr", с префиксом замены сегмента.
Задача программиста - обеспечить, чтобы в сегментных регистрах находились адреса именно тех сегментов, к которым они привязаны директивой "assume".
Автор: Maksim_Avrorov
Дата сообщения: 09.10.2012 21:26
В этом куске кода лишнее есть или нет?

assume cs:code, ds:data
mov ax, data
mov ds, ax
Автор: bomzzz
Дата сообщения: 09.10.2012 21:37
есть. гавару тебе возьми скачай эмулятор, наглядно увидишь как все работает сразу веселее ассемблер пойдет
Автор: blaro
Дата сообщения: 09.10.2012 21:38
Maksim_Avrorov

Цитата:
В этом куске кода лишнее есть или нет?

assume cs:code, ds:data
mov ax, data
mov ds, ax

Нет. Все на своих местах.
Это, кстати, надо всегда писать.
Автор: bomzzz
Дата сообщения: 09.10.2012 21:48
извиняюсь. я просто екзешники никогда не писал надо так. тут как раз в эмуляторе болванка екзешника

http://s1.ipicture.ru/uploads/20121009/okNT4qcJ.gif
Автор: Maksim_Avrorov
Дата сообщения: 09.10.2012 22:29
Спасибо за столь наглядное пояснение. Эмулятор скачал. Теперь ищу функцию для вывода числа, а не символа из регистра.....
Автор: bomzzz
Дата сообщения: 09.10.2012 22:32
там в эммуляторе куча примеров. вот их разбирай
Автор: akaGM
Дата сообщения: 10.10.2012 08:37
Maksim_Avrorov

Цитата:
Теперь ищу функцию для вывода числа, а не символа из регистра.....
вообще-то с точностью наоборот: число выводится посимвольно, если в регистре сидит 25 (десятеричное), то вывести надо два символа '2' и '5'
Автор: MERCURY127
Дата сообщения: 10.10.2012 14:20

Цитата:
ищу функцию для вывода числа

встроенной ни в ДОС, ни в БИОС нет (хорошо хоть вывод букв и строк есть ), пиши сам, или поищи чужую, благо вариантов выше крыши...
Автор: bomzzz
Дата сообщения: 10.10.2012 14:27
в эммуляторе есть примеры вывода и двоичного и десятичного и шестнадцатеричного числа
Автор: Nastya19kiss
Дата сообщения: 17.10.2012 15:02
Добрый день! В институте начался курс микропроцессорных систем, и мы начали изучать Ассемблер. И первым заданием было сложить массив чисел в ячейках с 39-ой по 40-ую(шестнадцатеричная) с сохранением результата в двух байтах. Проделать это со знаковыми и без знаковыми числами. Вот программа, которую я написала для без знаковых. А вот со знаковыми туплю что то. Подскажите пожалуйста.

mov R0,#039h
mov R1,0h
Summa:
mov A,@R0
add A,R1
mov R1,A
jnc summ2
inc R2
jmp summ2
Summ2:
inc R0
cjne R0,#041h,summ
jmp _end
Автор: bomzzz
Дата сообщения: 17.10.2012 19:35
вычитание и сложение знаковых чисел осуществляется точно также как безнаковых, только при выводе результата надо учесть знак

Добавлено:
http://asmworld.ru/uchebnyj-kurs/008-chisla-so-znakom-i-bez/
вот тута вроде просто написано
Автор: Nastya19kiss
Дата сообщения: 18.10.2012 10:39
вот то что у меня получилось. знаковые числа я начала суммировать с 21 ячейки а не как в задании сказано

mov R0,#21h
mov R2,#00000000b
Summ:
mov A,R2
mov R3,#11111111b
anl A,R3
jnz div1
jb R1.7,summ1
div1:
jb A.7,summ1
summ1:
jb R0.7,summ11
add A,R0
jnc summ12
запись во второй байт, т.к переполнение
summ12:
add R1,A
summ 11:
add A,Ro
jnc summ21
запись во второй байт, т.к переполнение
summ 21:
add R1,A
jb R0.7, summ22
add A,R0
jnc summ3
add R1,A
summ3:
запись во второй байт т.к переполнение
summ22:
add A,R0
jnc summ4
запись во второй байт
summ4:
add R1,A
cjne R0,#31h,Summ
jmp _end

мне кажется что можно проще сделать
r2 - второй байт суммы
r3 - для проверки что во втором бате ничего нет
Автор: bomzzz
Дата сообщения: 18.10.2012 13:19
синтаксис немного не такой к какому я привык. ну я тебе тоже советую скачать
http://ziplib.com/emu8086/
программа наглядно показывает как работает компьютер, содержит кучу простейших примеров. а когда один увидишь наглядно как заполняется стек, как процессор переходит к следующему коду, как заполняются регистры, как запись память приводит к выводу символа на экран и вызываются прерывания сразу сильно в галаве просветляется

http://rghost.ru/41006235 - вот тут не самая последняя версия, но почему то последующие версии сильно в размере начали уменьшатся - вдруг там функционал обрезан у триальных. этой я пользуюсь уже много лет. к тому же добавил найденный в инете переведенный на русский мануал к программе.

кроме всего этого это шикарный редактор 16 битных кодов, не только с подсветкой но и с наглядной отладкой. синтаксис TASM-а и FASM-а, для MASM-а немного надо переделывать код. а твой я даже не знаю че за асм

Добавлено:
он еще с виртуальной дискеты умеет грузится, можно писать свой пбр тут же отлаживать и дальше ось
Автор: MERCURY127
Дата сообщения: 18.10.2012 18:32
bomzzz
ну вот зачем АРМщику советовать х86 ассемблер??? что он ему даст такого, что потом не придется забыть и поскорее?
Автор: bomzzz
Дата сообщения: 18.10.2012 20:11
а чего тут учить? после того как один раз увидишь как работает компьютер больше ничего учить не надо. я вот пишу программы редко и все равно всегда пишу со справочником в руках потому что от раза к разу все забываю

Добавлено:
компьютер тупой как пробка , даже до двух считать не умеет.
Автор: Abs62
Дата сообщения: 18.10.2012 20:53
bomzzz

Цитата:
компьютер тупой как пробка , даже до двух считать не умеет.

Охотно верю. Потому как главной деталью любого компьютера является голова его оператора.
Автор: bomzzz
Дата сообщения: 19.10.2012 01:49
как самонадеянно. знаю не мало людей умеющих только нажимать кнопку вкл и тем не менее их компьютеры до 2 так считать и не научились
Автор: ItsJustMe
Дата сообщения: 19.10.2012 11:23

Цитата:
синтаксис немного не такой к какому я привык.


Цитата:
ну вот зачем АРМщику советовать х86 ассемблер???

Сдается мне, это не ARM. Но синтакс действительно странный. ПодARM косящий, но для x86 16-bit real mode... Видимо, этот asm хочет казаться круче, чем он есть...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

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


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