Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2018, 21:30   #1
АлексТет
Новичок
Джуниор
 
Регистрация: 22.01.2018
Сообщений: 1
По умолчанию Задача инфиксные, префиксные выражения на языке Ассемблер

Есть задача:
Написать процедуру translate, которая переводит выражение (исходную строку), записанную в обычной (инфиксной) форме в постфиксную форму. Исходную строку ввести с клавиатуры, результат вывести на экран. Для решения использовать стек.

Есть программа, написанная на языке ассемблера с синтаксисом AT&T:
.text
.globl getPriotiry
#В %eax находится код символа для которого нужно получить приоритет
.type getPriority, @function
getPriority:
pushl %ebp
movl %esp, %ebp

movl 8(%esp), %eax

cmpl $42, %eax # *
je priority3
cmpl $47, %eax # /
je priority3
cmpl $43, %eax # +
je priority2
cmpl $45, %eax # -
je priority2
cmpl $40, %eax # (
je priority1
cmpl $41, %eax # )
je priority5

#в остальных случаях приоритет символа -- 0
movl $0, %eax
jmp exit
priority3: # * and /
movl $3, %eax
jmp exit
priority2: # + and -
movl $2, %eax
jmp exit
priority1: # (
movl $1, %eax
jmp exit
priority5: # )
movl $5, %eax
jmp exit
exit:
leave
ret
.size getPriority, .-getPriority
#Положить элемент в стэк
.text
.globl stack_push
.type stack_push, @function
stack_push:
pushl %ebp
movl %esp, %ebp

#первый параметр -- адрес стека, второй -- что класть
movl 8(%ebp), %eax
cmp $50, %eax #небольшой костыль. если второй параметр -- адрес, то обрабатываем его соответствующим образом, иначе как просто число -- код символа
jg address
movl %eax, %edx
jmp number
address:
movzbl (%eax), %ebx
number:
movzbl 12(%ebp), %edx
movl %edx, (%eax, %ebx, 1)

#увеличиваем счетчик стека
movl 8(%ebp), %eax
addl $1, (%eax)

leave
ret
.size stack_push, .-stack_push
#-------------------------------------------------------------------
#Взять верхний элемент и вернуть его значение
.text
.globl stack_pop
.type stack_pop, @function
stack_pop:
pushl %ebp
movl %esp, %ebp

#уменьшить значение счетчика стека
movl 8(%ebp), %eax
subl $1, (%eax)
movzbl (%eax), %ebx

#взять верхний элемент
movzbl (%eax, %ebx, 1), %eax
# movzbl %edx, %eax

leave
ret
.size stack_pop, .-stack_pop
#-------------------------------------------------------------------
#Возвращает 0 если стек не пустой. Иначе 1
.text
.globl stack_isEmpty
.type stack_isEmpty, @function

stack_isEmpty:
pushl %ebp
mov %esp, %ebp

movl 8(%esp), %eax
movzbl (%eax), %eax
cmpl $1, %eax

movl $0, %eax
jg exit
movl $1, %eax

exit:
leave
ret
.size stack_isEmpty, .-stack_pop
#-------------------------------------------------------------------
# Возвращает размер стека
.text
.globl stack_size
.type stack_size, @function

stack_size:
pushl %ebp
movl %esp, %ebp

movl 8(%esp), %eax
movzbl (%eax), %eax
subl $1, %eax

leave
ret
.size stack_size, .-stack_size
#-------------------------------------------------------------------
# Возвращает просто значение верхнего элемента
.text
.globl stack_top
.type stack_top, @function

stack_top:
pushl %ebp
movl %esp, %ebp

movl 8(%esp), %eax
movzbl (%eax), %ebx
subl $1, %ebx
movzbl (%eax, %ebx, 1), %eax

leave
ret
.size stack_top, .-stack_size

Нужна помощь, переписать программу на языке ассемблера с синтаксисом Intel !!!
АлексТет вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде ассемблер (вычислить значение выражения)! Tobisom Помощь студентам 0 29.03.2016 20:25
Нужно найти значение выражения на языке си (С) Ginks111 Помощь студентам 3 27.11.2014 11:02
Представить математическую запись выражения на языке С ++ geostroy1 Помощь студентам 4 09.11.2014 15:40
Вычислить значение выражения на языке паскаль Black Panther Помощь студентам 5 04.12.2012 15:59
Вычисление выражения (найти сумму ряда) (Ассемблер) RikkiTan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 25.03.2012 12:53