Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите пожалуйста  (Прочитано 12797 раз)
0 Пользователей и 1 Гость смотрят эту тему.
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« : 10-05-2007 00:45 » 

Люди пожалуйста выручайте. Врать не буду так что
тут блин такая фигня получилась что нам задали сделать элементарные задачки на Assmbler но все загвоздка в том что мы его никогда в глаза не видели... И дело не в том что не хотели видеть а в том что и не должны были. Ребята пожалуйсто помогите решить их когда я спросил у учителя сложние ли они она сказала нет что они такиеже как программа на Паскале которая вычисляет по формуле выражение. Если не сложно сделайте хоть некоторые 

(1)Составить программуна Асамблере
x - забрать из порта 0FH
y - с ячейки памяти P01BH
с = 5 + D
Если x > 0 (x+x) - с = z
Если x < 0 (x - y) - с = z


(2)Составить прогу
(x - 113) + y = z
Если Z != 0 то записать его в порт F9
z = 0 то чначала к x добавть 3 а потом вычеслить уравнение сново.

(3)Сосавить прогу
Получить код положительного числа который находится в порту ввода с номером F2
и сложить его с числом 351D определить значение 3-го бита младшего байта результата.

(4)Сост прогу
x+y
x находится в регитсре С а y находится в ячейке памяти 800AH результат сдвинуть на 2
розряда вправо и отнять 75.


(5)(x-1)+(y-1) = z
x нходится в порту ввода с номером 0H а Y в ячейке памяти с адресом 80C0H
если x > 0 и y < 0 то необходимо сначало получить дополнительный код этих чисел а потом
выпражение z=x*y-1 результат вывести в ячейку памяти.


Пожайлуйста помогите... Я не имею ни малейшего представления как это сделать я просматрел ваши сообщения вижу что вам расплюнуть сделать это... Помогите плззз.
Записан
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #1 : 11-05-2007 00:45 » 

Ну пожайлуста хоть что-нибуть. Дайте хоть ссылки на материал где я могу посмотреть как сдлеать такого рода задачки. Если что хоть посоветоваться смогу. но просто искав я наталкивался только на магазины книг а то что можно было скачать я скачал но там бред полный.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 11-05-2007 05:02 » 

TGrey[WoLf], давай ты для начала сам немного поработаешь )
составь алгоритмы для всего, что ты написал (просто в людских словах)
Записан

Tuborg
Модератор

ee
Offline Offline

« Ответ #3 : 11-05-2007 09:34 » 

ну немного помочь можно. Например для первой задачи:

(1)Составить программуна Асамблере
1) x - забрать из порта 0FH
2) y - с ячейки памяти P01BH
3) с = 5 + D
4) Если x > 0 (x+x) - с = z
5) Если x < 0 (x - y) - с = z



2) mov bx, [01BH]

D- что такое? ну скажем число в другом регистре, скажем в dx

3) add dx,5
3) mov cx, dx

1) in ax, 0fH
4) js label_b   - если результат последней операции имеет знак (если х < 0 ) перейти на метку label_b
label_a:
    add ax,ax    - x+x
    sub ax, cx    - (x+x) - c
    mov dx, ax   - z=(x+x)-c
    jmp end

label_b:
    sub ax, bx   - x-y
    sub ax, cx   - (x-y)-c
    mov dx, ax  - z=(x+x)-c

end:
   здесь конец

вперёд - дерзай  Флаг тебе в руки! дальше по аналогии
« Последнее редактирование: 11-05-2007 09:45 от Tuborg » Записан
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 12-05-2007 00:52 » 

Да я спокойно могу сделать алгоритмы... Я и сделал бы задачи сам но как я говорил проблема в том что я раньше Эссемблер ниразу в глаза не видел...

(1)Сначала выдираем х из нужного порта, затем берем у с я чейки памяти. Сразу применяем формулу для получения 3-го элемента и делаем проверку по х если х > 0 тогда выполняем (x+x) - с = z иначе (x - y) - с = z.

Туборг спасибо за это но вот я теперь пытаюсь разобраться и некак немогу...
in ax, 0fH - я так понял забираем х из порта?
2) mov bx, [P01BH] - берем у из памяти.
add dx,5 - непойму запись
mov cx, dx - а это что делает?

js label_b - я так понимаю что js само указывает что сравнение идет по знаку <

    add ax,ax    - x+x
    sub ax, cx    - (x+x) - c
    mov dx, ax   - z=(x+x)-c
Это оно сначало слаживает Х потом отнимает С потом приравнивает к Z. А что разве сразу вычисление не делается на эссемлере?

Кстати непойму это я непонимаю или вы с условием ошиблись?
Потому что получается что при x < 0 (x - y) - с = z а у вас z=(x+x)-c

(2)Я так понимаю что сперва нужно получить Х и У где их взять незнаю...
Как только они есть выполняем уравнение после чего берем ответ(z) и делаем на него проверку если Z != 0 то записуем результат в порт F9 иначе к Х добавляем тройку и выполняем уравнение сново.

(3)Вот эту задачу просто непредставляю алгоритм... Я думаю что в Ассм есть спец. команда для осуществл. этой задачи но я незнаю что за команда поэтому сперва проверяем порт F2 на наличие положительно  числа и как только получаем то слаживаем с  351D и из результата находим 3 бит младшего байта(не нравится мне это слово =)   ).


(4)Забираем Х из регистра С а У из памяти 800AH и результат сдвигаем на 2 разряда в право берем ответ и отнемаем от него 75.
Даже не представляю что значит сдвинуть на 2 разряда.


(5)Забираем из порта 0H Х а У забираем из памяти 80C0H делаем проверку если Х > 0 и y < 0 тогда получам дополнительный код этих чисел и выполняем выражение z=x*y-1 и этот результат вносим в ячейку памяти.

Если нужны еще алгоритмы я готов для меня нет большого труда поработать я люблю програмировать просто в моем случае я изучаю другой язык... А времени хоть немного подучить Ассм почти не осталось вся надежда на вас.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 12-05-2007 03:58 » 

TGrey[WoLf], всё ок, видим, что не лентяй Ага всё получится

>>in ax, 0fH - я так понял забираем х из порта?
  - вводим из порта 0fH два байта в регистр ax

>> mov bx, [01BH] - берем у из памяти.
 в dx загружается 2 байта , младший из ячейки с адресом 01BH, старший - из ячейки с адресом 01BH+1

>> add dx,5 - непойму запись
 dx = dx + 5

>> mov cx, dx - а это что делает?
  присвоение cx=dx

>> js label_b -
  проверка флага SF (знаковый бит результата предыдущей команды, менявщей флаг)

 если флаг SF установлен , делается переход на метку label_b

-------------------
сорри, уже убегать надо , всё не успею щас прокомментировать ...   
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 12-05-2007 08:06 » 

TGrey[WoLf],

    add ax,ax    - x+x
    sub ax, cx    - (x+x) - c
    mov dx, ax   - z=(x+x)-c
>>Это оно сначало слаживает Х потом отнимает С потом приравнивает к Z. А >>что разве сразу вычисление не делается на эссемлере?

нет, сразу не делается ) только "кусочками" , то есть по одной операции



>>Как только они есть выполняем уравнение
 тут уравнения не выполняются, выполняется сравнивание. Или взводятся флаги после последней операции , например
mov dx, ax
влияет на некоторые флаги. После команды проверяем состояние нужного флага



>>(3)Вот эту задачу просто непредставляю алгоритм... Я думаю что в Ассм есть спец. команда для осуществл. этой задачи ...сперва проверяем порт F2 на наличие положительно  числа и как только получаем то слаживаем с  351D и из результата находим 3 бит младшего байта

3-й бит младшего байта - наложить and-маску 0x08 == 0b00001000


>>Даже не представляю что значит сдвинуть на 2 разряда.

это значит следующее :
исходное число, скажем, ==
0b00000101
сдвинутое на 2 бита влево ==
0b00010100



>>Если нужны еще алгоритмы я готов для меня нет большого труда поработать

 - вперёд )) мы только за
Записан

TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #7 : 13-05-2007 00:42 » 

Спасибо конечно но так а что мне делать с задачами? Для тебя я понимаю это легко ты его изучаешь а я вот только 2 день. Допустим смотрю задачу думаю сделать по аналогии с той что сделал Туборг но даже с подстановкой команд тех что ты описал ничего не получается. Например регистры или сравнение я видел только на < . Действительно помогите пожалуйчта решить... Я ведь не просто так захожу чтоб вы мне сделали и я ушел я этот форум искал в целях обучения С++ а тут вот такая лажа с преподом... Яб эти задачи решил и на С++ или Паскале да вот чето я не припоминаю в своем арсенеали команд чтобы забирать числа из портов и регистров. Да и больше расчитывать ненакого...
Помогите ребята...
Записан
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 14-05-2007 00:17 » 

Пожалуйста помогите до четверга.. Прошу вас.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 14-05-2007 04:14 » 

первая задача примерно так
Код:
	;все числа в примере - 1-байтовые,
;переполнение и заём не учитываются
mov cl,05h ;cl = 5 + D
add cl,0dh

mov ah,byte ptr [01bh] ;y=ah = [01BH]

in al,0fh ;x=al=из порта 0FH

js x_y_c

;x>=0
add al,al
sub al,cl
jmp _z_

x_y_c:
;x<0
sub al,ah ; al=x-y
sub al,cl

_z_:
;результат: al = z

(правда не помню, влияет ли in на флаг SF )

ну а остальные аналогичны Улыбаюсь
« Последнее редактирование: 14-05-2007 04:16 от Алексей1153++ » Записан

TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 15-05-2007 01:40 » 

Алексей ну прошу вас помогите. Как я могу сделать то что совершенно не понимаю и что немаловажно не знаю. Пожалуйста помогите. Хоть чтонибуть чтобы было видно что задачи решины. Допустим упростите их или еще что. Прошу вас...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 15-05-2007 05:20 » 

Код:
	;2)

;все числа в примере - 1-байтовые,
;переполнение и заём не учитываются
mov al,03h ;x
mov bl,08h ;y
next:
mov cl,al ;
sub cl,113 ;x-113
add cl,bl ;+y
;cl == z

jnz to_port ;Если Z != 0 то идти to_port

add al,3
jmp next

to_port:
mov al,cl
out [0f9h],al


;3)

;все числа в примере - 1-байтовые,
;переполнение и заём не учитываются
in ax,[0f2h]
add ax,0351dh

mov bx,ax
rcl bx,3
and bx,1

;bx содержит значение бита



;4)

;все числа в примере - 1-байтовые,
;переполнение и заём не учитываются
mov cl,23h ;x

mov al,cl
add al,byte ptr[0800ah]
rcl al,2
sub al,75




;5)

;все числа в примере - 1-байтовые,
;переполнение и заём не учитываются
in al,[0] ;x
mov bl,byte ptr [080c0h] ;y

mov cl,al
add cl,bl
;cl == (x-1)+(y-1)

add al,0
js m1
add bl,0
jns m1
;тут x > 0 и y < 0
not al
inc al
not bl
inc bl

mul bl; ax=bl*al= x*y
mov cl,al

dec cl
jmp m2

m1:
;тут не(x > 0 и y < 0)

m2:
mov [???],cl ; z==cl


так потянет ? )
« Последнее редактирование: 15-05-2007 11:33 от Алексей1153++ » Записан

TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #12 : 16-05-2007 01:17 » 

Спасибо!!!!!!! Спасибо спасибо спасибо!!!!!! С.П.А.С.И.Б.О СПАСИБО!
Извеняюсь за флуд!
Сдам хоть это пусть сама решает дальше.... Еще  раз спс.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines