pavel1978, ЛоЛ - это еще НЕ МКБ, понимаете? Указатель на первый МКБ еще нужно найти внутри ЛоЛ, о чем вам было подробно расписано на прошлой странице. И как найти следующий МКБ по текущему - тоже было сказано. И зачем вообще ФИЗИЧЕСКИЕ адреса? Программист ими не оперирует. Он логическими оперирует - сегментами и смещениями. Зайдите в аську, если все-таки хотите сделать задачу. Живое общение гораздо полезнее, проверено
» Assembler
Поздравляю с днём ПРОГРАММИСТА
Ась? Ааа... Ага. Спасибо еще бы работу найти... Без диплома...
а в этой стране всё через жопу: или программист без диплома или диплом без программиста...
Диплом без программиста... брр, как страшно... особенно на ночь...
MERCURY127
а ты во всякие "задачи по...", в кот. программисты делают дипломы для "без программистов" не ходи... особенно на ночь...
а ты во всякие "задачи по...", в кот. программисты делают дипломы для "без программистов" не ходи... особенно на ночь...
Всем доброго дня. Столкнулся с вопросом, почему программа которая должна выбирать самое большое число из массива делает это, но выдаёт вместо 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
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
Цитата:
mov ax,data
mov ds,ax
ds у тебя и так на сегмент даты установлен
Цитата:
assume ds:data,
Добавлено:
http://ziplib.com/emu8086/
вот эмулятор скачай, в него код засунь пошагово прогони и увидишь что у тебя все смешалось
ключ в инетенайдешь
Maksim_Avrorov
Цитата:
Если для выдачи результата используется функция 2 21 прерывания, то всё правильно она выдаёт.
'9'='0'+9=39. Функция-то символ ждёт. Перевести свой результат в символьную форму - это задача программиста, а не системы.
Цитата:
Столкнулся с вопросом, почему программа которая должна выбирать самое большое число из массива делает это, но выдаёт вместо 39 только 9
Если для выдачи результата используется функция 2 21 прерывания, то всё правильно она выдаёт.
'9'='0'+9=39. Функция-то символ ждёт. Перевести свой результат в символьную форму - это задача программиста, а не системы.
Кажется понял, число 39 это код символа '9'. Тогда очевидно надо другую функцию найти!
Спасибо.
На счёт сегментов то это я с книги брал там написано следующее:
code segment
assume cs:code, ds:data
mov ax, data
mov ds, ax
................................
Про сегменты не понял.......
Спасибо.
На счёт сегментов то это я с книги брал там написано следующее:
code segment
assume cs:code, ds:data
mov ax, data
mov ds, ax
................................
Про сегменты не понял.......
Maksim_Avrorov
Цитата:
Означает что это сегмент кода
Цитата:
ds получает адрес сегмента данных. Скорей всего сегмент данных определен так
Код:
data segment
какие-то переменные
data ends
Цитата:
code segment
Означает что это сегмент кода
Цитата:
mov ax, data
mov ds, ax
ds получает адрес сегмента данных. Скорей всего сегмент данных определен так
Код:
data segment
какие-то переменные
data ends
Цитата:
Не знаю как правильно и понятно объяснить. Кто нибудь кто знает, объясните пожалуйста.
"assume" - это указание компилятору, через какой сегментный регистр он должен адресовать соответствующий сегмент. Например, если в вышеприведённом коде указать не "assume ds:data", а "assume es:data", то и обращение к переменным в сегменте "data" будет идти не через ds, а через es. И оператор "mov dl, arr" будет оттранслирован в "mov dl, es:arr", с префиксом замены сегмента.
Задача программиста - обеспечить, чтобы в сегментных регистрах находились адреса именно тех сегментов, к которым они привязаны директивой "assume".
В этом куске кода лишнее есть или нет?
assume cs:code, ds:data
mov ax, data
mov ds, ax
assume cs:code, ds:data
mov ax, data
mov ds, ax
есть. гавару тебе возьми скачай эмулятор, наглядно увидишь как все работает сразу веселее ассемблер пойдет
Maksim_Avrorov
Цитата:
Нет. Все на своих местах.
Это, кстати, надо всегда писать.
Цитата:
В этом куске кода лишнее есть или нет?
assume cs:code, ds:data
mov ax, data
mov ds, ax
Нет. Все на своих местах.
Это, кстати, надо всегда писать.
извиняюсь. я просто екзешники никогда не писал надо так. тут как раз в эмуляторе болванка екзешника
http://s1.ipicture.ru/uploads/20121009/okNT4qcJ.gif
http://s1.ipicture.ru/uploads/20121009/okNT4qcJ.gif
Спасибо за столь наглядное пояснение. Эмулятор скачал. Теперь ищу функцию для вывода числа, а не символа из регистра.....
там в эммуляторе куча примеров. вот их разбирай
Maksim_Avrorov
Цитата:
Цитата:
Теперь ищу функцию для вывода числа, а не символа из регистра.....вообще-то с точностью наоборот: число выводится посимвольно, если в регистре сидит 25 (десятеричное), то вывести надо два символа '2' и '5'
Цитата:
ищу функцию для вывода числа
встроенной ни в ДОС, ни в БИОС нет (хорошо хоть вывод букв и строк есть ), пиши сам, или поищи чужую, благо вариантов выше крыши...
в эммуляторе есть примеры вывода и двоичного и десятичного и шестнадцатеричного числа
Добрый день! В институте начался курс микропроцессорных систем, и мы начали изучать Ассемблер. И первым заданием было сложить массив чисел в ячейках с 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
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
вычитание и сложение знаковых чисел осуществляется точно также как безнаковых, только при выводе результата надо учесть знак
Добавлено:
http://asmworld.ru/uchebnyj-kurs/008-chisla-so-znakom-i-bez/
вот тута вроде просто написано
Добавлено:
http://asmworld.ru/uchebnyj-kurs/008-chisla-so-znakom-i-bez/
вот тута вроде просто написано
вот то что у меня получилось. знаковые числа я начала суммировать с 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 - для проверки что во втором бате ничего нет
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 - для проверки что во втором бате ничего нет
синтаксис немного не такой к какому я привык. ну я тебе тоже советую скачать
http://ziplib.com/emu8086/
программа наглядно показывает как работает компьютер, содержит кучу простейших примеров. а когда один увидишь наглядно как заполняется стек, как процессор переходит к следующему коду, как заполняются регистры, как запись память приводит к выводу символа на экран и вызываются прерывания сразу сильно в галаве просветляется
http://rghost.ru/41006235 - вот тут не самая последняя версия, но почему то последующие версии сильно в размере начали уменьшатся - вдруг там функционал обрезан у триальных. этой я пользуюсь уже много лет. к тому же добавил найденный в инете переведенный на русский мануал к программе.
кроме всего этого это шикарный редактор 16 битных кодов, не только с подсветкой но и с наглядной отладкой. синтаксис TASM-а и FASM-а, для MASM-а немного надо переделывать код. а твой я даже не знаю че за асм
Добавлено:
он еще с виртуальной дискеты умеет грузится, можно писать свой пбр тут же отлаживать и дальше ось
http://ziplib.com/emu8086/
программа наглядно показывает как работает компьютер, содержит кучу простейших примеров. а когда один увидишь наглядно как заполняется стек, как процессор переходит к следующему коду, как заполняются регистры, как запись память приводит к выводу символа на экран и вызываются прерывания сразу сильно в галаве просветляется
http://rghost.ru/41006235 - вот тут не самая последняя версия, но почему то последующие версии сильно в размере начали уменьшатся - вдруг там функционал обрезан у триальных. этой я пользуюсь уже много лет. к тому же добавил найденный в инете переведенный на русский мануал к программе.
кроме всего этого это шикарный редактор 16 битных кодов, не только с подсветкой но и с наглядной отладкой. синтаксис TASM-а и FASM-а, для MASM-а немного надо переделывать код. а твой я даже не знаю че за асм
Добавлено:
он еще с виртуальной дискеты умеет грузится, можно писать свой пбр тут же отлаживать и дальше ось
bomzzz
ну вот зачем АРМщику советовать х86 ассемблер??? что он ему даст такого, что потом не придется забыть и поскорее?
ну вот зачем АРМщику советовать х86 ассемблер??? что он ему даст такого, что потом не придется забыть и поскорее?
а чего тут учить? после того как один раз увидишь как работает компьютер больше ничего учить не надо. я вот пишу программы редко и все равно всегда пишу со справочником в руках потому что от раза к разу все забываю
Добавлено:
компьютер тупой как пробка , даже до двух считать не умеет.
Добавлено:
компьютер тупой как пробка , даже до двух считать не умеет.
bomzzz
Цитата:
Охотно верю. Потому как главной деталью любого компьютера является голова его оператора.
Цитата:
компьютер тупой как пробка , даже до двух считать не умеет.
Охотно верю. Потому как главной деталью любого компьютера является голова его оператора.
как самонадеянно. знаю не мало людей умеющих только нажимать кнопку вкл и тем не менее их компьютеры до 2 так считать и не научились
Цитата:
синтаксис немного не такой к какому я привык.
Цитата:
ну вот зачем АРМщику советовать х86 ассемблер???
Сдается мне, это не ARM. Но синтакс действительно странный. ПодARM косящий, но для x86 16-bit real mode... Видимо, этот asm хочет казаться круче, чем он есть...
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
Предыдущая тема: .NET GUI компоненты
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.