Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 07.05.2018, 15:44   #1
dimkoss
Пользователь
 
Регистрация: 06.02.2016
Сообщений: 35
Репутация: 10
По умолчанию Копирования регистров разной размерности.

TASM
Нужно реализовать копирование из одного регистра в другой через стек, например m8->m16 или r16->r8 проблема, в том, что я не нашел команд, которые обрезают/ расширяют данные (например movzx).
Какие есть решения данной проблемы?
pushw/ pushb popw/popb tasm не знает.
dimkoss вне форума   Ответить с цитированием
Старый 07.05.2018, 15:47   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,534
Репутация: 1728
По умолчанию

Цитата:
Сообщение от dimkoss Посмотреть сообщение
Какие есть решения данной проблемы?
Обрезать лишнее и копировать регистр целиком.
И что значит "не нашел" movzx?
waleri вне форума   Ответить с цитированием
Старый 07.05.2018, 15:57   #3
dimkoss
Пользователь
 
Регистрация: 06.02.2016
Сообщений: 35
Репутация: 10
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Обрезать лишнее и копировать регистр целиком.
И что значит "не нашел" movzx?
movzx не работает из памяти в память. И как можно обрезать не использую хранение промежуточных результатов в регистрах?
dimkoss вне форума   Ответить с цитированием
Старый 07.05.2018, 16:16   #4
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,534
Репутация: 1728
По умолчанию

Из памяти в память в принципе нет инструкций, а загрузив что надо в регистр всегда можно добавить нужное/убрать лишнее. У вас же сказано "из одного регистра в другой, через стек".
; Пересылаем AL
push ax
pop bx
movzx bx, bl
waleri вне форума   Ответить с цитированием
Старый 07.05.2018, 16:28   #5
dimkoss
Пользователь
 
Регистрация: 06.02.2016
Сообщений: 35
Репутация: 10
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Из памяти в память в принципе нет инструкций, а загрузив что надо в регистр всегда можно добавить нужное/убрать лишнее. У вас же сказано "из одного регистра в другой, через стек".
; Пересылаем AL
push ax
pop bx
movzx bx, bl
Просто если загружать в регистр, то получится, что мы занимаем регистр, а если нужно перемещение именно в этот занятый регистр?
dimkoss вне форума   Ответить с цитированием
Старый 07.05.2018, 17:41   #6
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,534
Репутация: 1728
По умолчанию

Цитата:
Сообщение от dimkoss Посмотреть сообщение
а если нужно перемещение именно в этот занятый регистр?
Не понимаю проблемы - что значит "занят"?
У вас в условии написано "из регистра в регистр".
waleri вне форума   Ответить с цитированием
Старый 07.05.2018, 17:49   #7
dimkoss
Пользователь
 
Регистрация: 06.02.2016
Сообщений: 35
Репутация: 10
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Не понимаю проблемы - что значит "занят"?
У вас в условии написано "из регистра в регистр".
Из любого регистра в любой регистр.
dimkoss вне форума   Ответить с цитированием
Старый 07.05.2018, 18:08   #8
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,534
Репутация: 1728
По умолчанию

Цитата:
Сообщение от dimkoss Посмотреть сообщение
Из любого регистра в любой регистр.
Я в упор не понимаю в чем проблема.
Напишите псевдокод чего нужно добиться, а то так и будем ходить кругами...
waleri вне форума   Ответить с цитированием
Старый 08.05.2018, 17:23   #9
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 286
Репутация: 147
По умолчанию

al -> dx:
Код:

xor ah,ah
push ax
pop dx

или:
Код:

push ax
mov byte ptr [esp+1],0
pop dx

или:
Код:

push ax
pop dx
xor dh,dh

ax -> edx:
Код:

push word ptr 0
push ax
pop edx

__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Старый 08.05.2018, 17:27   #10
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 286
Репутация: 147
По умолчанию

ah -> dx:
для 32-битного кода:
Код:

push ax
inc esp
push word ptr 0
inc esp
pop dx

для 16-битного кода:
Код:

push ax
inc sp
push 0
inc sp
pop dx

__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить матрицу Р размерности m x n значениями элементов вектора Q размерности k = m x n Olevander Помощь студентам 0 23.11.2014 11:09
n - массивов, разной размерности, нужно найти min и max в этих массивах. Из полученных min найти наименьший элемент, из max наибол dmks Помощь студентам 5 09.10.2013 20:48
назначение регистров TotKtoNado Assembler 10 14.12.2011 18:30
Макрос для копирования значений из нескольких файлов в один общий с определенным условием копирования zenner Microsoft Office Excel 0 21.03.2011 15:48
Содержимое регистров maxwelldream Assembler 1 15.01.2011 10:28


08:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru