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

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

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

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

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

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

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

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

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

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

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

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

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

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

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/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 08.05.2018, 16:27   #10
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

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/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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