Skip to content

Commit

Permalink
Additional registers view has been added
Browse files Browse the repository at this point in the history
  • Loading branch information
Dman95 committed Jul 24, 2014
1 parent e088ac8 commit 2979da5
Show file tree
Hide file tree
Showing 9 changed files with 199 additions and 85 deletions.
38 changes: 34 additions & 4 deletions debugger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -428,11 +428,30 @@ void Debugger::processAction(QString output, QString error)
registersInfo info;
QSettings settings("SASM Project", "SASM");
if (settings.value("mode", QString("x86")).toString() == "x86") {
for (int i = 0; i < 16; i++) {
if (i == 8 || i == 9) {
int count = 16;
if (settings.value("allregisters", false).toBool())
count += 33;
for (int i = 0; i < count; i++) {
if (i == 8 || i == 9 || (i >= 16 && i <= 23) || i == 40) {
registersStream >> info.name >> info.hexValue;
registersStream.skipWhiteSpace();
info.decValue = registersStream.readLine();
} else if (i >= 32 && i <= 39) {
registersStream >> info.name;
QRegExp r("uint128 = 0x[0-9a-fA-F]+");
QString s = registersStream.readLine();
while (r.indexIn(s) == -1)
s = registersStream.readLine();
info.decValue = r.capturedTexts().at(0).mid(QString("uint128 = ").length());
info.hexValue = "";
} else if (i >= 41) {
registersStream >> info.name;
QRegExp r("v8_int8 = \\{[^\\{\\}]+\\}{1}");
QString s = registersStream.readLine();
while (r.indexIn(s) == -1)
s = registersStream.readLine();
info.decValue = r.capturedTexts().at(0).mid(QString("v8_int8 = ").length());
info.hexValue = "";
} else {
registersStream >> info.name >> info.hexValue >> info.decValue;
}
Expand All @@ -444,8 +463,11 @@ void Debugger::processAction(QString output, QString error)
}
}
} else { //x64
for (int i = 0; i < 24; i++) {
if (i == 17) {
int count = 24;
if (settings.value("allregisters", false).toBool())
count += 33;
for (int i = 0; i < count; i++) {
if (i == 17 || (i >= 24 && i <= 31) || i == 56) {
registersStream >> info.name >> info.hexValue;
registersStream.skipWhiteSpace();
info.decValue = registersStream.readLine();
Expand All @@ -457,6 +479,14 @@ void Debugger::processAction(QString output, QString error)
while (c != ' ')
registersStream >> c;
info.decValue = registersStream.readLine();
} else if (i >= 40 && i <= 55) {
registersStream >> info.name;
QRegExp r("uint128 = 0x[0-9a-fA-F]+");
QString s = registersStream.readLine();
while (r.indexIn(s) == -1)
s = registersStream.readLine();
info.decValue = r.capturedTexts().at(0).mid(QString("uint128 = ").length());
info.hexValue = "";
} else {
registersStream >> info.name >> info.hexValue >> info.decValue;
}
Expand Down
13 changes: 10 additions & 3 deletions debugtablewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ DebugTableWidget::DebugTableWidget(int rows, int columns, DebugTableWidgetType w
if (type == registersTable) {
setSelectionMode(QAbstractItemView::NoSelection);
QStringList header;
header << tr("Register") << tr("Hex") << tr("Integer");
header << tr("Register") << tr("Hex") << tr("Info");
setHorizontalHeaderLabels(header);
setWindowTitle(tr("Registers"));
resizeColumnsToContents();
Expand Down Expand Up @@ -186,11 +186,18 @@ void DebugTableWidget::addRegister(const QString &name, const QString &hexValue,
zeroes.fill('0', 10 - hexValue.length());
if (item(rowNumber, 2)) {
item(rowNumber, 0)->setText(name);
item(rowNumber, 1)->setText("0x" + zeroes + hexValue.right(hexValue.length() - 2));
if (hexValue.isEmpty())
item(rowNumber, 1)->setText("");
else
item(rowNumber, 1)->setText("0x" + zeroes + hexValue.right(hexValue.length() - 2));
item(rowNumber, 2)->setText(decValue);
} else {
QTableWidgetItem *nameItem = new QTableWidgetItem(name);
QTableWidgetItem *hexValueItem = new QTableWidgetItem("0x" + zeroes + hexValue.right(hexValue.length() - 2));
QTableWidgetItem *hexValueItem;
if (hexValue.isEmpty())
hexValueItem = new QTableWidgetItem("");
else
hexValueItem = new QTableWidgetItem("0x" + zeroes + hexValue.right(hexValue.length() - 2));
QTableWidgetItem *decValueItem = new QTableWidgetItem(decValue);
QFont monoFont("Courier");
monoFont.setStyleHint(QFont::Monospace);
Expand Down
4 changes: 2 additions & 2 deletions help.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ <H1>Краткая справка.</H1>
В версиях программы, начиная с 3.0, Вы можете выбрать один из четырех ассемблеров NASM, MASM, GAS, FASM в настройках на вкладке "Построение". Там же выбирается ассемблер и компоновщик (путь до них Вы можете указать в соответствующих полях). Таким образом SASM можно настроить на работу с любым ассемблером, задав пути к ассемблеру и, если нужно, компоновщику и указав необходимые опции ассемблирования и компоновки. Однако отладка и подсветка синтаксиса при таком подходе могут работать не совсем правильно. Чтобы полностью реализовать поддержку нового ассемблера, нужно написать реализацию абстрактного класса Assembler по аналогии с уже реализованными ассемблерами.
</P>
<P>
Все ассемблеры (кроме MASM) включены в SASM (на Linux они должны быть установлены) и ими можно пользоваться сразу после их выбора. Ассемблер MASM невозможно включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://asmcourse.cs.msu.ru/?page_id=169">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".
Все ассемблеры (кроме MASM) включены в SASM (на Linux они должны быть установлены) и ими можно пользоваться сразу после их выбора. Ассемблер MASM невозможно включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://www.masm32.com/">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".
</P>
<P>
В SASM добавлена папка для include файлов - "Linux/share/sasm/include/" ("/usr/share/sasm/include/" при установке) в Linux и "Windows/include" ("{папка с программой при установке}/include/") в Windows. Однако для MASM эта возможность не работает - там следует указывать до include файлов абсолютные пути.
Expand Down Expand Up @@ -201,7 +201,7 @@ <H4>Windows</H4>
Также в SASM, начиная с версии 3.0, включены fasm 1.71.17 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).
</P>
<P>
Ассемблер MASM невозможно было включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://asmcourse.cs.msu.ru/?page_id=169">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".
Ассемблер MASM невозможно было включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://www.masm32.com/">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".
</P>
<P>
Под Windows SASM после установки сразу готов к работе.
Expand Down
2 changes: 1 addition & 1 deletion helpENG.html
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ <H1>Brief help.</H1>
Starting from version 3.0 you can choose one of four assemblers - NASM, MASM, GAS, FASM in settings on "Build" tab. Also there you can choose your own assembler or linker filling path to them. Thus you can setup SASM on work with any assembler filling path to assembler and, if needed, to linker and filling options for assembling and linking. But debugging and highlighting may work little incorrectly. To realize full support of new assembler, it is needed to implement Assembler abstract class by analogy with already implemented assemblers.
</P>
<P>
All assemblers (excluding MASM) are included in SASM (on Linux they should be installed) and you can use they right away after their choice. MASM assembler can not be included in the assembly because of its license. To use it, you should install MASM on your computer from site <A HREF="http://asmcourse.cs.msu.ru/?page_id=169">http://www.masm32.com/</A> and specify path to MASM assembler (ml.exe, path usually "C:/masm32/bin/ml.exe") and to MASM linker (link.exe, path usually "C:/masm32/bin/link.exe") in according fields on "Build" tab in settings.
All assemblers (excluding MASM) are included in SASM (on Linux they should be installed) and you can use they right away after their choice. MASM assembler can not be included in the assembly because of its license. To use it, you should install MASM on your computer from site <A HREF="http://www.masm32.com/">http://www.masm32.com/</A> and specify path to MASM assembler (ml.exe, path usually "C:/masm32/bin/ml.exe") and to MASM linker (link.exe, path usually "C:/masm32/bin/link.exe") in according fields on "Build" tab in settings.
</P>
<P>
SASM contains folder for include files - "Linux/share/sasm/include/" ("/usr/share/sasm/include/" if SASM was installed) on Linux and on the path "Windows/include/" ("{folder where SASM was installed}/include/") in Windows. But for MASM this folder does not work - in this case you should use absolute path to include files.
Expand Down
Binary file modified language_ru.qm
Binary file not shown.
Loading

0 comments on commit 2979da5

Please sign in to comment.