2013-09-29 3 views
0

Я использую tasm. Вопрос довольно простой, но я не помню, как это сделать. Извиняюсь за это. Мой вопрос заключается в том, что предположим, что у меня есть два регистра с разными значениями, и я хочу объединить их (слияние) и сохранить значение в одну переменную. Как я могу это сделать? Предполагается, что ah=01 & al=04. Я хочу объединить их в одно значение 14, шестнадцатеричный эквивалент 0E. Есть идеи?Объединение значений двух регистров в одну переменную

+0

Вы можете использовать 'AAD' в этом случае – harold

ответ

0

Общая идея состоит в том, чтобы умножить ah на 10, а затем добавить в al. Не то, чтобы реализация в сборке x86 несколько утомительна, потому что инструкции умножения ограничены тем, над чем они могут работать. В качестве альтернативы можно разбить умножение на сдвиги и добавляет, как:

add ah, ah ; ah*2 
add al, ah ; al + 2*ah 
shl ah, 2 ; 8*ah 
add al, ah ; al + 10*ah 

Обратите внимание, что комментарии относятся к исходным значениям, и что это 8-битная версия.

+0

works..though shl не нужно .. thankyou :) – worriednacho

+0

Я пробовал его код и ваш код но не работает – Davide

0

Этот кодируется на языке ассемблера с использованием программного обеспечения Keil для ARM модели 16 регистров

main 
     LDR R1,#0x07 
     LDR R2,#0x12 
     LDR R3,#0x00 
     ADD R3,R1,R2 
    END 

, где добавлены и храниться в R3, т.е. содержимое переменных в R1 и R2, R3, < --R1 + R2. Значение, сохраненное в R3, будет отображаться после отладки всего кода

Смежные вопросы