Для вызова данной функции мы помещаем значение передаваемого регистра в стек и функцией call вызываем созданную функцию. После вызова функции мы корректируем значение регистра указателя стека. Для вывода названия регистра, мы устанавливаем значение используемого в нашей функции указателя строки с названием равное указателю заранее определенной строки с названием конкретного регистра.
Текст программы
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
char *name;
void print(int what)
{
char *arr;
arr = new char[35];
__asm
{
mov edx, what;
mov esi, arr;
mov ecx, 32;
m1: shl edx, 1;
mov eax, 0;
adc eax, 48;
mov [esi], eax;
add esi, 1;
loop m1;
mov [esi],0;
}
cout <<setw(5) <<name <<" = " <<setw(5) <<what <<": " <<arr <<endl;
delete [] arr;
}
int main()
{
char *ecs="CS"; char *ess="SS";
char *eds="DS"; char *ees="ES";
char *efs="FS"; char *egs="GS";
char *flg="Flags";
__asm
{
xor eax, eax;
mov esi, ecs
mov name, esi
mov ax, cs
push eax;
call print;
add esp, 4;
mov esi, ess
mov name, esi
mov ax, ss
push eax;
call print;
add esp, 4;
mov esi, eds
mov name, esi
mov ax, ds
push eax;
call print;
add esp, 4;
mov esi, ees
mov name, esi
mov ax, es
push eax;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.