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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2013, 02:10   #1
Dennyzpg
 
Регистрация: 05.12.2013
Сообщений: 3
По умолчанию Легкая задачка.

Помогите, пожалуйста. Вот дали такую задачку. Вроде понял сам принцип, но воплотить не получается. Говорят не правильно.

Задание: "Измените программу таким образом, чтобы из некоторой ячейки, содержащей число, рав-ное Вашему номеру по списку, переслать это число в регистр АХ, в стек, затем восстановить вершину стека в другую ячейку."

title Использование операторов PUSH/POP ;имя программы
MODEL small
STACK 256
DATASEG
ExCode DB 0
CODESEG
Start:
mov ax,@data ;Пересылка в ds адреса
mov ds,ax ;сегмента данных

push ax ;Сохранение значений ax в стеке и
push bx ;Сохранение значений bx в стеке в стеке

mov ax,1 ;Эти 4 команды mov устанавливают
mov bx,2 ;тестовые значения регистров
mov cx,0 ;ax,bx,cx,dx
mov dx,0

push ax ;Запись значения ax в стек
push bx ;Запись значения bx в стек

pop cx ;Запись в cx значения из стека (bx)
pop dx ;Запись в dx значения из стека (ax)
pop bx ;Восстановить из стека первоначальные
pop ax ;значения bx и ax

Exit:
mov ah,04ch ;Функция завершения программы
mov al,[exCode]
int 21h ;Вызов прерывания 21h для выхода в MS DOS
end Start ;Определение адреса начала программы
Dennyzpg вне форума Ответить с цитированием
Старый 05.12.2013, 02:26   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Идём от обратного. Вытаскиваем из обоймы (стека)
Код:
push ax ;Сохранение значений ax в стеке и 
 push bx ;Сохранение значений bx в стеке в стеке

 mov ax,1 ;Эти 4 команды mov устанавливают
 mov bx,2 ;тестовые значения регистров
 mov cx,0 ;ax,bx,cx,dx
 mov dx,0

 push ax ;Запись значения ax в стек
 push bx ;Запись значения bx в стек

 pop cx ;Запись в cx значения из стека (bx)
 pop dx ;Запись в dx значения из стека (ax)
 pop bx ;Восстановить из стека первоначальные
 pop ax ;значения bx и ax
Отмеченное красным делать можно, но нужно чётко понимать, что значениестека нельзя изменить произвольно.
Правило стека: - первым вошёл, последним вышел...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.12.2013, 12:21   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

как все загадочно

Код:
MODEL small
 STACK 256
 DATASEG
    nomer_po_spisku DW 666
    drugoj_nomer DW 0

     ExCode DB 0
 CODESEG
 Start:
 mov ax,@data ;Пересылка в ds адреса
 mov ds,ax ;сегмента данных

    MOV ax, [nomer_po_spisku]
    PUSH ax
    POP [drugoj_nomer]


Exit:
 mov ah,04ch ;Функция завершения программы
 mov al,[exCode]
 int 21h ;Вызов прерывания 21h для выхода в MS DOS
 end Start ;Определение адреса начала программы
f.hump вне форума Ответить с цитированием
Старый 05.12.2013, 20:49   #4
Dennyzpg
 
Регистрация: 05.12.2013
Сообщений: 3
По умолчанию

Спасибо большое!
Dennyzpg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка легкая, но дойти не может) MsJane Фриланс 3 19.12.2009 14:46
Легкая задачка на паскале! Naruto63 Помощь студентам 8 21.11.2009 23:01
Легкая задачка в C# OnlySergio Помощь студентам 5 21.11.2009 15:02
Легкая задачка для асов Паскаль Турбо Suslik-LICHNOST Помощь студентам 26 21.05.2009 23:59
Легкая задачка Васька Паскаль, Turbo Pascal, PascalABC.NET 1 29.11.2008 14:55