Page 1 of 2

Помогите с программированием на assembler #2

Posted: Mon Nov 16, 2009 7:12 pm
by Gargo
Хотя бы принцип, как это сделать.

Есть следуюющие команды:
shl (CF)
shr (CF)
and (ZF)
not
mov xx, 0
mov xx, 1
mov xx, 255
jc
jz
jmp

Используя эти команды требуется реализовать:
mov al, bl
mov ax, bx
cmp xx, yy (ZF, CF)
inc (CF)
dec (CF)
add (ZF, CF)
sub (ZF, CF)
or (ZF)
mul bl
div bl
call
ret

Во всем задании запрещается использовать стандартный стек, нужно создать собственный стек: две переменные - для адреса вершины стека и то, куда будут помещаться значения. В реализации остальных операций запрещается использовать переменные, можно только регистры ax, bx, cx dx и их старшие и младшие разряды.

Re: Помогите с программированием на assembler #2

Posted: Mon Nov 16, 2009 8:00 pm
by diamond
Есть такой сайт - http://www.wasm.ru . На нём, в частности, есть форум, на котором, в частности, есть тема http://www.wasm.ru/forum/viewtopic.php?id=17088 . Куда и имеет смысл постить вопросы о лабораторных работах по языку ассемблера. (Задача совершенно явно учебная, в реальной жизни встретиться не может, но для развития мозга вполне полезная. Если, конечно, решать самостоятельно.) А этот форум посвящён операционной системе Колибри.

Re: Помогите с программированием на assembler #2

Posted: Mon Nov 16, 2009 8:50 pm
by Ghost
Какая то извращенная учебная программа... Скорее всего у препода есть прикладное применение к это задаче, (ограниченный набор возможных опкодов, в устовиях попытки переполнения стека, вполне возможная задача) а самому решать не охота...

Gargo это уже не первая "странная" задачка от тебя, методичку отсканить можешь??? Просто интересно посмотреть на другие задания. И вообще, в каком ВУЗ`е это происходит????

Re: Помогите с программированием на assembler #2

Posted: Mon Nov 16, 2009 11:20 pm
by Gargo
я могу выложить в инет старую методичку, но там сопадают только первые две лабы. 3ю взял с какого-то листика, 4я сказал, что одна на всех - бери у того, кто ее уже брал. Выкладывать ту методичку?

Re: Помогите с программированием на assembler #2

Posted: Tue Nov 17, 2009 11:31 am
by <Lrz>
mov al,bl
----------
mov al,255 ; включаем все биты в al
and al,bl ; выключаем ненужные биты, т.е. накладываем маску, или присваиваем значение которое в bl.

mov ax, bx
----------
mov al,255 ; включаем все биты в al
shl ax,8 ; перемещаем значение в ah
mov al,255 ; включаем все биты в al
; все в ax у нас 0xffff или -1
and ax,bx ; выключаем ненужные биты, т.е. накладываем маску.

Re: Помогите с программированием на assembler #2

Posted: Tue Nov 17, 2009 2:28 pm
by Leency
Можно перефразировать одну извесную цитату:

ххх: это форум о Колибри?
ууу: да
ххх: как мне решить задание на ассемблере?

Re: Помогите с программированием на assembler #2

Posted: Tue Nov 17, 2009 11:22 pm
by Gargo
<Lrz> wrote:mov al,bl
----------
mov al,255 ; включаем все биты в al
and al,bl ; выключаем ненужные биты, т.е. накладываем маску, или присваиваем значение которое в bl.

mov ax, bx
----------
mov al,255 ; включаем все биты в al
shl ax,8 ; перемещаем значение в ah
mov al,255 ; включаем все биты в al
; все в ax у нас 0xffff или -1
and ax,bx ; выключаем ненужные биты, т.е. накладываем маску.
Пасиб, правда до mov al, bl я уже додумался, равно как и до or al,bl.
Главная сложность для меня - реализация стека и всяких там call ret


А кто советует мне отправиться на wasm.ru - тот пусть сначала попробует зарегиться там.

И еще одно, в этот раз я ветку разместил по адресу: "то что не вошло в другие категории". И хоть очень посредственно, но относится к колибри

Re: Помогите с программированием на assembler #2

Posted: Wed Nov 18, 2009 5:20 am
by <Lrz>
У тебя нет в списке команды or.
Остальные задания решай сам.
call
----------

Code: Select all

mov al,255 ; включаем все биты в al
shl ax,8 ; перемещаем значение в ah
mov al,255 ; включаем все биты в al
and ax,return ; в ax адрес возврата
jmp subr      ; прыгаем на нашу подпрограмму
return:       ; это куда мы вернемся
;любая последовательность команд
subr:         ; начала подпрограммы
; тут может располагаться любая последовательность команд, которая не приведет к изменению регистра ax
jmp ax        ; вернемся на адрес который у нас в ax

Re: Помогите с программированием на assembler #2

Posted: Wed Nov 18, 2009 5:48 pm
by diamond
Вообще-то я "там" зарегистрирован и каких-либо сложностей при регистрации не помню. Естественно, с того момента что-то могло измениться, но страница регистрации выглядит вполне нормально.
Ghost
Угу, и ограничение 0/1/255 на второй операнд mov - потому что mov с прочими значениями работает нестабильно, а вовсе не для того, чтобы показать формирование числа по битам.

Re: Помогите с программированием на assembler #2

Posted: Wed Nov 18, 2009 5:59 pm
by Mario
diamond
Человек не врет, я даже свой старый пароль восстановить не смог, когда пару месяцев назад пытался это сделать. Заново региться пытался тоже. Как результат просто забил, хотя перед этим письмо отсылал администратору.

Re: Помогите с программированием на assembler #2

Posted: Wed Nov 18, 2009 9:39 pm
by Gargo
<Lrz> wrote:У тебя нет в списке команды or.
Остальные задания решай сам.
call
----------

Code: Select all

mov al,255 ; включаем все биты в al
shl ax,8 ; перемещаем значение в ah
mov al,255 ; включаем все биты в al
and ax,return ; в ax адрес возврата
jmp subr      ; прыгаем на нашу подпрограмму
return:       ; это куда мы вернемся
;любая последовательность команд
subr:         ; начала подпрограммы
; тут может располагаться любая последовательность команд, которая не приведет к изменению регистра ax
jmp ax        ; вернемся на адрес который у нас в ax
ну так елки, x1 or x2 = not(not(x1) and not(x2))

а про wasm.ru - страница выглядит нормально, регистрируешься, на ящик письма не приходит с паролем, а когда пытаюсь отправить письмо по адресу администратора - пишет то ли ошибку в этом адресе, то ли что адрес не существует. Если кто может, разместите там копию задания

Re: Помогите с программированием на assembler #2

Posted: Thu Nov 19, 2009 10:02 pm
by Gargo
Кстати, а в коде, реализующем call, ругается, что ax и return разного размера

Re: Помогите с программированием на assembler #2

Posted: Fri Nov 20, 2009 12:56 am
by Rock_maniak_forever
Сообщение удалено

Re: Помогите с программированием на assembler #2

Posted: Fri Nov 20, 2009 4:56 am
by <Lrz>
Такой код собирается fasm 1.69.07 или 1.69.10. Если сделать jmp eax можно перейти неизвестно куда.

Code: Select all

use32 ;/ use16 если use16 то код получается на 3 байта короче.
start:

mov al,255 ; включаем все биты в al
shl ax,8 ; перемещаем значение в ah
mov al,255 ; включаем все биты в al
and ax,return ; в ax адрес возврата
jmp subr      ; прыгаем на нашу подпрограмму
return:       ; это куда мы вернемся
;любая последовательность команд
subr:         ; начала подпрограммы
; тут может располагаться любая последовательность команд, которая не приведет к изменению регистра ax
jmp ax        ; вернемся на адрес который у нас в ax

Re: Помогите с программированием на assembler #2

Posted: Fri Nov 20, 2009 8:54 pm
by Gargo
1)eax использовать нельзя
2)использую tasm
3)можно ли использовать следующее:
and ax, offset return