TGrey[WoLf]
|
|
« : 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]
|
|
« Ответ #1 : 11-05-2007 00:45 » |
|
Ну пожайлуста хоть что-нибуть. Дайте хоть ссылки на материал где я могу посмотреть как сдлеать такого рода задачки. Если что хоть посоветоваться смогу. но просто искав я наталкивался только на магазины книг а то что можно было скачать я скачал но там бред полный.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 11-05-2007 05:02 » |
|
TGrey[WoLf], давай ты для начала сам немного поработаешь ) составь алгоритмы для всего, что ты написал (просто в людских словах)
|
|
|
Записан
|
|
|
|
Tuborg
Модератор
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]
|
|
« Ответ #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 и этот результат вносим в ячейку памяти.
Если нужны еще алгоритмы я готов для меня нет большого труда поработать я люблю програмировать просто в моем случае я изучаю другой язык... А времени хоть немного подучить Ассм почти не осталось вся надежда на вас.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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 ------------------- сорри, уже убегать надо , всё не успею щас прокомментировать ...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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]
|
|
« Ответ #7 : 13-05-2007 00:42 » |
|
Спасибо конечно но так а что мне делать с задачами? Для тебя я понимаю это легко ты его изучаешь а я вот только 2 день. Допустим смотрю задачу думаю сделать по аналогии с той что сделал Туборг но даже с подстановкой команд тех что ты описал ничего не получается. Например регистры или сравнение я видел только на < . Действительно помогите пожалуйчта решить... Я ведь не просто так захожу чтоб вы мне сделали и я ушел я этот форум искал в целях обучения С++ а тут вот такая лажа с преподом... Яб эти задачи решил и на С++ или Паскале да вот чето я не припоминаю в своем арсенеали команд чтобы забирать числа из портов и регистров. Да и больше расчитывать ненакого... Помогите ребята...
|
|
|
Записан
|
|
|
|
TGrey[WoLf]
|
|
« Ответ #8 : 14-05-2007 00:17 » |
|
Пожалуйста помогите до четверга.. Прошу вас.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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]
|
|
« Ответ #10 : 15-05-2007 01:40 » |
|
Алексей ну прошу вас помогите. Как я могу сделать то что совершенно не понимаю и что немаловажно не знаю. Пожалуйста помогите. Хоть чтонибуть чтобы было видно что задачи решины. Допустим упростите их или еще что. Прошу вас...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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]
|
|
« Ответ #12 : 16-05-2007 01:17 » |
|
Спасибо!!!!!!! Спасибо спасибо спасибо!!!!!! С.П.А.С.И.Б.О СПАСИБО! Извеняюсь за флуд! Сдам хоть это пусть сама решает дальше.... Еще раз спс.
|
|
|
Записан
|
|
|
|
|