Хотя бы принцип, как это сделать.
Есть следуюющие команды:
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 и их старшие и младшие разряды.
Помогите с программированием на assembler #2
Есть такой сайт - http://www.wasm.ru . На нём, в частности, есть форум, на котором, в частности, есть тема http://www.wasm.ru/forum/viewtopic.php?id=17088 . Куда и имеет смысл постить вопросы о лабораторных работах по языку ассемблера. (Задача совершенно явно учебная, в реальной жизни встретиться не может, но для развития мозга вполне полезная. Если, конечно, решать самостоятельно.) А этот форум посвящён операционной системе Колибри.
Ушёл к умным, знающим и культурным людям.
Какая то извращенная учебная программа... Скорее всего у препода есть прикладное применение к это задаче, (ограниченный набор возможных опкодов, в устовиях попытки переполнения стека, вполне возможная задача) а самому решать не охота...
Gargo это уже не первая "странная" задачка от тебя, методичку отсканить можешь??? Просто интересно посмотреть на другие задания. И вообще, в каком ВУЗ`е это происходит????
Gargo это уже не первая "странная" задачка от тебя, методичку отсканить можешь??? Просто интересно посмотреть на другие задания. И вообще, в каком ВУЗ`е это происходит????
я могу выложить в инет старую методичку, но там сопадают только первые две лабы. 3ю взял с какого-то листика, 4я сказал, что одна на всех - бери у того, кто ее уже брал. Выкладывать ту методичку?
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,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.<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 ; выключаем ненужные биты, т.е. накладываем маску.
Главная сложность для меня - реализация стека и всяких там call ret
А кто советует мне отправиться на wasm.ru - тот пусть сначала попробует зарегиться там.
И еще одно, в этот раз я ветку разместил по адресу: "то что не вошло в другие категории". И хоть очень посредственно, но относится к колибри
У тебя нет в списке команды or.
Остальные задания решай сам.
call
----------
Остальные задания решай сам.
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
Вообще-то я "там" зарегистрирован и каких-либо сложностей при регистрации не помню. Естественно, с того момента что-то могло измениться, но страница регистрации выглядит вполне нормально.
Ghost
Угу, и ограничение 0/1/255 на второй операнд mov - потому что mov с прочими значениями работает нестабильно, а вовсе не для того, чтобы показать формирование числа по битам.
Ghost
Угу, и ограничение 0/1/255 на второй операнд mov - потому что mov с прочими значениями работает нестабильно, а вовсе не для того, чтобы показать формирование числа по битам.
Ушёл к умным, знающим и культурным людям.
diamond
Человек не врет, я даже свой старый пароль восстановить не смог, когда пару месяцев назад пытался это сделать. Заново региться пытался тоже. Как результат просто забил, хотя перед этим письмо отсылал администратору.
Человек не врет, я даже свой старый пароль восстановить не смог, когда пару месяцев назад пытался это сделать. Заново региться пытался тоже. Как результат просто забил, хотя перед этим письмо отсылал администратору.
ну так елки, x1 or x2 = not(not(x1) and not(x2))<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
а про wasm.ru - страница выглядит нормально, регистрируешься, на ящик письма не приходит с паролем, а когда пытаюсь отправить письмо по адресу администратора - пишет то ли ошибку в этом адресе, то ли что адрес не существует. Если кто может, разместите там копию задания
Кстати, а в коде, реализующем call, ругается, что ax и return разного размера
Сообщение удалено
Last edited by Rock_maniak_forever on Sun Nov 22, 2009 4:31 am, edited 1 time in total.
Такой код собирается 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
1)eax использовать нельзя
2)использую tasm
3)можно ли использовать следующее:
and ax, offset return
2)использую tasm
3)можно ли использовать следующее:
and ax, offset return
Who is online
Users browsing this forum: No registered users and 0 guests