Skip to content

Commit 2979da5

Browse files
committed
Additional registers view has been added
1 parent e088ac8 commit 2979da5

File tree

9 files changed

+199
-85
lines changed

9 files changed

+199
-85
lines changed

debugger.cpp

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,11 +428,30 @@ void Debugger::processAction(QString output, QString error)
428428
registersInfo info;
429429
QSettings settings("SASM Project", "SASM");
430430
if (settings.value("mode", QString("x86")).toString() == "x86") {
431-
for (int i = 0; i < 16; i++) {
432-
if (i == 8 || i == 9) {
431+
int count = 16;
432+
if (settings.value("allregisters", false).toBool())
433+
count += 33;
434+
for (int i = 0; i < count; i++) {
435+
if (i == 8 || i == 9 || (i >= 16 && i <= 23) || i == 40) {
433436
registersStream >> info.name >> info.hexValue;
434437
registersStream.skipWhiteSpace();
435438
info.decValue = registersStream.readLine();
439+
} else if (i >= 32 && i <= 39) {
440+
registersStream >> info.name;
441+
QRegExp r("uint128 = 0x[0-9a-fA-F]+");
442+
QString s = registersStream.readLine();
443+
while (r.indexIn(s) == -1)
444+
s = registersStream.readLine();
445+
info.decValue = r.capturedTexts().at(0).mid(QString("uint128 = ").length());
446+
info.hexValue = "";
447+
} else if (i >= 41) {
448+
registersStream >> info.name;
449+
QRegExp r("v8_int8 = \\{[^\\{\\}]+\\}{1}");
450+
QString s = registersStream.readLine();
451+
while (r.indexIn(s) == -1)
452+
s = registersStream.readLine();
453+
info.decValue = r.capturedTexts().at(0).mid(QString("v8_int8 = ").length());
454+
info.hexValue = "";
436455
} else {
437456
registersStream >> info.name >> info.hexValue >> info.decValue;
438457
}
@@ -444,8 +463,11 @@ void Debugger::processAction(QString output, QString error)
444463
}
445464
}
446465
} else { //x64
447-
for (int i = 0; i < 24; i++) {
448-
if (i == 17) {
466+
int count = 24;
467+
if (settings.value("allregisters", false).toBool())
468+
count += 33;
469+
for (int i = 0; i < count; i++) {
470+
if (i == 17 || (i >= 24 && i <= 31) || i == 56) {
449471
registersStream >> info.name >> info.hexValue;
450472
registersStream.skipWhiteSpace();
451473
info.decValue = registersStream.readLine();
@@ -457,6 +479,14 @@ void Debugger::processAction(QString output, QString error)
457479
while (c != ' ')
458480
registersStream >> c;
459481
info.decValue = registersStream.readLine();
482+
} else if (i >= 40 && i <= 55) {
483+
registersStream >> info.name;
484+
QRegExp r("uint128 = 0x[0-9a-fA-F]+");
485+
QString s = registersStream.readLine();
486+
while (r.indexIn(s) == -1)
487+
s = registersStream.readLine();
488+
info.decValue = r.capturedTexts().at(0).mid(QString("uint128 = ").length());
489+
info.hexValue = "";
460490
} else {
461491
registersStream >> info.name >> info.hexValue >> info.decValue;
462492
}

debugtablewidget.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ DebugTableWidget::DebugTableWidget(int rows, int columns, DebugTableWidgetType w
6666
if (type == registersTable) {
6767
setSelectionMode(QAbstractItemView::NoSelection);
6868
QStringList header;
69-
header << tr("Register") << tr("Hex") << tr("Integer");
69+
header << tr("Register") << tr("Hex") << tr("Info");
7070
setHorizontalHeaderLabels(header);
7171
setWindowTitle(tr("Registers"));
7272
resizeColumnsToContents();
@@ -186,11 +186,18 @@ void DebugTableWidget::addRegister(const QString &name, const QString &hexValue,
186186
zeroes.fill('0', 10 - hexValue.length());
187187
if (item(rowNumber, 2)) {
188188
item(rowNumber, 0)->setText(name);
189-
item(rowNumber, 1)->setText("0x" + zeroes + hexValue.right(hexValue.length() - 2));
189+
if (hexValue.isEmpty())
190+
item(rowNumber, 1)->setText("");
191+
else
192+
item(rowNumber, 1)->setText("0x" + zeroes + hexValue.right(hexValue.length() - 2));
190193
item(rowNumber, 2)->setText(decValue);
191194
} else {
192195
QTableWidgetItem *nameItem = new QTableWidgetItem(name);
193-
QTableWidgetItem *hexValueItem = new QTableWidgetItem("0x" + zeroes + hexValue.right(hexValue.length() - 2));
196+
QTableWidgetItem *hexValueItem;
197+
if (hexValue.isEmpty())
198+
hexValueItem = new QTableWidgetItem("");
199+
else
200+
hexValueItem = new QTableWidgetItem("0x" + zeroes + hexValue.right(hexValue.length() - 2));
194201
QTableWidgetItem *decValueItem = new QTableWidgetItem(decValue);
195202
QFont monoFont("Courier");
196203
monoFont.setStyleHint(QFont::Monospace);

help.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ <H1>Краткая справка.</H1>
6161
В версиях программы, начиная с 3.0, Вы можете выбрать один из четырех ассемблеров NASM, MASM, GAS, FASM в настройках на вкладке "Построение". Там же выбирается ассемблер и компоновщик (путь до них Вы можете указать в соответствующих полях). Таким образом SASM можно настроить на работу с любым ассемблером, задав пути к ассемблеру и, если нужно, компоновщику и указав необходимые опции ассемблирования и компоновки. Однако отладка и подсветка синтаксиса при таком подходе могут работать не совсем правильно. Чтобы полностью реализовать поддержку нового ассемблера, нужно написать реализацию абстрактного класса Assembler по аналогии с уже реализованными ассемблерами.
6262
</P>
6363
<P>
64-
Все ассемблеры (кроме 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") в соответствующих полях на вкладке "Построение".
64+
Все ассемблеры (кроме 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") в соответствующих полях на вкладке "Построение".
6565
</P>
6666
<P>
6767
В SASM добавлена папка для include файлов - "Linux/share/sasm/include/" ("/usr/share/sasm/include/" при установке) в Linux и "Windows/include" ("{папка с программой при установке}/include/") в Windows. Однако для MASM эта возможность не работает - там следует указывать до include файлов абсолютные пути.
@@ -201,7 +201,7 @@ <H4>Windows</H4>
201201
Также в SASM, начиная с версии 3.0, включены fasm 1.71.17 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).
202202
</P>
203203
<P>
204-
Ассемблер 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") в соответствующих полях на вкладке "Построение".
204+
Ассемблер 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") в соответствующих полях на вкладке "Построение".
205205
</P>
206206
<P>
207207
Под Windows SASM после установки сразу готов к работе.

helpENG.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ <H1>Brief help.</H1>
5252
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.
5353
</P>
5454
<P>
55-
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.
55+
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.
5656
</P>
5757
<P>
5858
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.

language_ru.qm

318 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)