Arhn - архитектура программирования

Как я могу перемножить два регистра и сохранить их в другом регистре?

Итак, я пытаюсь и не могу создать программу GCD для языка ассемблера (Intel x86, используя NASM). Я продолжаю получать ошибки компилятора при попытке умножить два регистра. У меня есть значения пользователей, хранящиеся в регистрах ebx, ecx и edx. Я хочу умножить все 3 и сохранить произведение ebx и ecx в ebx, затем умножить ebx и edx, сохранить в ebx и отобразить результат. Я пытаюсь сделать это с помощью этого кода imul ebx, ebx, ecx imul ebx, ebx, edx Разве это не правильный способ умножения регистров?


  • Если просмотр всей моей программы поможет кому-то мне помочь, я буду более чем счастлив опубликовать ее! Я оставил его на данный момент, так как думаю, что это, скорее всего, простой вопрос, который может быть осложнен только моим неуклюжим уродливым кодом. 20.10.2015
  • Ой, это недействительно. 20.10.2015
  • В вашем заголовке написано два регистра, в вашем контенте - три регистра, что правда? Я давно программировал ассемблер, но процессоры IIRC просто не могут работать с тремя регистрами одновременно. Физически. Может быть, поэтому вы получаете ошибки, которые вы должны хотя бы добавить к вопросу. JMP BACK AND TRY AGAIN. :) 20.10.2015

Ответы:


1

Версия imul с тремя операндами принимает только непосредственный третий операнд. К счастью, вы можете использовать версию с двумя операндами, поскольку один из ваших операндов совпадает с местом назначения. Таким образом:

imul    ebx, ecx ; ebx *= ecx
imul    ebx, edx ; ebx *= edx

буду делать то, что ты хочешь.

19.10.2015
  • @JamieJackson - Возможно, было бы неплохо загрузить Справочные руководства Intel. Подобные проблемы описаны более подробно, чем где-либо еще. 20.10.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..