Что делают операнды в этом коде - Assembler

Узнай цену своей работы

Формулировка задачи:

Суть проблемы: учусь на Информатике, первый год. На втором семестре у нас появился предмет "Кпьютерная Архитектура" где нужно писать на Ассемблере, с замечательным преподавателем, который на лабораторных просто сидит и молчит, а на каждый вопрос отвечает -- погуглите, я не могу знать всего. Но разобраться всетаки хочеться. Нашел решенные задания с прошлого года, но никак не могу разобраться в коде. Прошу, если есть люди которым не лень разжевать мне материал, прокоментировать строчки кода ассемблера, что там собственно происходит, чтобы я мог разобраться в операторах и что они делают. P.S. Не обращайте внимание на Польский язык Лист заданий прилагаю: 1) Замена 4ох заглавных букв на малые. 2) Замена метами двух 4ехбуквенных слов. 3) Переплетение букв по очереди с двух слов. пример ABCD QWER -> AQBWCEDR 4) Суммирующая все элементы 3ех элементовой таблицы 7) Придающая переменной типа "байт" значение 1, если переменная типа "слово" делиться на 16 и значение 0 если не делиться. 8) Добавляющая переменную D типа байт к первому элементу таблицы состоящей их 4ох элементов, если D делиться на 2, и к четвертому элементу, если D не делиться на два. 9) Поднесение к девятой степени остаток с деления переменной типа "байт" на 8.
// Zadanie1
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 unsigned char a,b,c,d;
 cin >> a;
 cin >> b;
 cin >> c;
 cin >> d;
 
    _asm
 {
 
        mov AL, a;
        add AL, 32;
        mov a, AL;
 
        mov AL, b;
        add AL, 32;
        mov b, AL;
 
        mov AL, c;
        add AL, 32;
        mov c, AL;
 
        mov AL, d;
        add AL, 32;
        mov d, AL;
 }
 cout << a << b << c << d;
    _getch();
    return 0;
}

//Zadanie2
 
#include "stdafx.h"
#include <iostream>
#include<conio.h>
using namespace std;
 
char napis[4], napis2[4];
int i = 4;
__int32 adr1, adr2, adr3;
 
int _tmain(int argc, _TCHAR* argv[])
{
 cout << "Napis 1: ";
 cin >> napis;
 
 cout << "Napis 2: ";
 cin >> napis2;
 
    __asm
 {
        mov AL, napis[0];
        mov BL, napis[1];
        mov CL, napis[2];
        mov DL, napis[3];
        mov AH, napis2[0];
        mov BH, napis2[1];
        mov CH, napis2[2];
        mov DH, napis2[3];
        mov napis2[0], AL;
        mov napis2[1], BL;
        mov napis2[2], CL;
        mov napis2[3], DL;
        mov napis[0], AH;
        mov napis[1], BH;
        mov napis[2], CH;
        mov napis[3], DH;
 }
 cout << endl << napis << endl;
 cin.get();
    _getch();
 return 0;
}

//Zadanie3
 
#include "stdafx.h"
#include<iostream>
#include<conio.h.>
using namespace std;
 
char napis[3];
char slowo[3];
char wyraz[6];
 
int _tmain(int argc, _TCHAR* argv[])
 
{
 cin >> napis;
 cin >> slowo;
 
    _asm
 {
        mov AL, napis[0]
        mov wyraz[0], AL
 
            mov AL, slowo[0]
            mov wyraz[1], AL
 
            mov AL, napis[1]
            mov wyraz[2], AL
 
            mov AL, slowo[1]
            mov wyraz[3], AL
 
            mov AL, napis[2]
            mov wyraz[4], AL
 
            mov AL, slowo[2]
            mov wyraz[5], AL

 }
 
 cout << wyraz;
 
    _getch();
 return 0;
}

//Zadanie4
 
cout « "Write 1st element: "; 
cin » tab[0]; 
cout « "Write 2nd element: "; 
cin » tab[1]; 
cout « "Write 3rd element: "; 
cin » tab[2]; 
 
int result = 0; 
 
__asm 
{ 
mov EAX, offset tab; 
xor EBX, EBX; 
 
add BX, [EAX]; 
add BX, [EAX + 2]; 
add BX, [EAX + 4]; 
 
mov result, EBX; 
} 
 
cout « "The result is = " « result; 
_getch(); 

//zadanie 7
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
 
using namespace std;
 
int main()
{
 short numer;
 cout << "Napisz swoj numer: ";
 cin >> numer;
 short result = 0;
    __asm {
        mov AX, numer;
        mov BX, 16;
        xor DX, DX;
 div bx;
        mul bx;
 
        mov bx, numer;
 div bx;
 
        mov result, AX;
 }
 cout << "Odpowiedz:" << result;
    _getch();
}

//zadanie 8
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
 
using namespace std;
 
int main()
{
 char tab1[3];
 short int tab[4] = { 1, 2, 3, 4 };
    __int8 input;
 
 cout << "Napisz swoj numer: " << endl;
 cin >> input;
 cout << "The tab is: " << tab1[0] << ";" << tab1[1] << ";" << tab1[2] << ";" << tab1[3] << endl;
 
    __asm
 {
        xor EAX, EAX;
        mov AL, input;
        mov EBX, offset tab1;
        add EBX, 6;
        and AL, 1;
        mov CL, 6;
        mul CL;
        sub EBX, EAX;
        xor ECX, ECX;
        mov CL, input;
        add[EBX], ECX;
 }
 cout << "Odpowiedz: " << tab1[0] << " tab 1 = " << tab1[1] << "tab 2 = " << tab1[2] << "Tab 3 = " << tab1[3];
    _getch();
 
 return 0;
}

//Zadanie9
 
#include "stdafx.h"
#include<iostream>
#include<conio.h.>
using namespace std;

int main()
{
    __int8 number;
 cout << "Napish symbol: " << endl;
 cin >> number;
 cout >> "Nomer symbolu: " << int(number) << endl;
 int result;
 
    __asm
 {
        mov EAX, 0;
        mov AL, number;
        and AL, 7;
 
        mov EBX, EAX;
        mul EBX;
        mul EBX;
 
        mov EBX, EAX;
        mul EBX;
        mul EBX;

        mov result, EAX;
 }
 cout << "Rezultat: " << result;
    _getch();
}

Решение задачи: «Что делают операнды в этом коде»

textual
Листинг программы
//zadanie 7
 
//#include "stdafx.h"
#include<iostream>
#include<conio.h>
 
using namespace std;
 
int main()
{
 short numer;
 cout << "Введите число: ";
 cin >> numer;
 short result = 0;
    __asm {
        mov AX, numer;
        db  0xD4, 16    //aam   16 - делим AX на 16
        setz    result      // выставляем result
        // в соответствии с остатком от деления
 }
 cout << "Ответ:" << result;
    _getch();
};

Объяснение кода листинга программы

  1. В программе имеется переменная типа short - numer, в которую считывается число с помощью функции cin.
  2. Также имеется переменная типа short - result, которая инициализируется нулем.
  3. Далее следует блок кода на ассемблере, который выполняет следующие действия:
    • Делит переменную numer на 16, используя инструкцию aam (деление с остатком).
    • Использует инструкцию setz для выставления значения result в соответствии с остатком от деления.
  4. Результат выводится на экран с помощью функции cout.
  5. В конце программы используется функция _getch для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы