diff --git a/src/disassem.cpp b/src/disassem.cpp index bf72897..93958a9 100644 --- a/src/disassem.cpp +++ b/src/disassem.cpp @@ -830,6 +830,7 @@ void toStructuredText(LLInst *insn,IStructuredTextTarget *out, int level) { out->addSpace(4); out->addTaggedString(XT_Number,QString("%1").arg(insn->label,8,16,QChar('0').toUpper())); out->addSpace(4); + out->addTaggedString(XT_Keyword,Machine_X86::opcodeName(insn->getOpcode()),insn); out->addSpace(2); @@ -964,34 +965,43 @@ void toStructuredText(LLInst *insn,IStructuredTextTarget *out, int level) { { bool is_dx_src=(inst.getOpcode() == iOUTS or inst.getOpcode() == iREP_OUTS); if(is_dx_src) - operands_s<<"dx, "<addTaggedString(XT_Symbol,"dx"); + out->prtt(", "); + out->addTaggedString(XT_Keyword,szPtr[inst.getFlag() & B]); + out->addSpace(2); + } else - operands_s<addTaggedString(XT_Keyword,szPtr[inst.getFlag() & B]); if (inst.getOpcode() == iLODS or inst.getOpcode() == iREP_LODS or inst.getOpcode() == iOUTS or inst.getOpcode() == iREP_OUTS) { - operands_s<addTaggedString(XT_Symbol,Machine_X86::regName(inst.src().segOver)); // szWreg[src.segOver-rAX] } else { - operands_s<<"es:[di], "<addTaggedString(XT_Symbol,"es:[di]"); + out->prtt(", "); + out->addTaggedString(XT_Symbol,Machine_X86::regName(inst.src().segOver)); } - operands_s<<":[si]"; + out->addTaggedString(XT_Symbol,":[si]"); } else { + out->delChars(2); // TODO: this is wonky way of adding instruction suffix if(inst.getFlag() & B) - opcode_with_mods+='B'; + out->addTaggedString(XT_Keyword,"B"); else - opcode_with_mods+='W'; + out->addTaggedString(XT_Keyword,"W"); + out->addSpace(2); } break; case iXLAT: if (inst.src().segOver) { - out->addTaggedString(XT_Keyword," " + szPtr[1]); + out->addTaggedString(XT_Keyword,QString(" ") + szPtr[1]); out->addTaggedString(XT_Symbol,Machine_X86::regName(inst.src().segOver)+":[bx]"); } break; diff --git a/src/ui/FunctionViewWidget.cpp b/src/ui/FunctionViewWidget.cpp index daadffc..e60bc12 100644 --- a/src/ui/FunctionViewWidget.cpp +++ b/src/ui/FunctionViewWidget.cpp @@ -47,7 +47,12 @@ void FunctionViewWidget::prtt(const QString &s) collected_text+=s; //collected_text+="
"; } - +void FunctionViewWidget::delChars(int v) { + assert(v>0); + collected_text = collected_text.remove(collected_text.size()-v,v); + while(v--) + m_doc_cursor->deletePreviousChar(); +} void FunctionViewWidget::addEOL() { m_doc_cursor->insertBlock(m_current_format); diff --git a/src/ui/FunctionViewWidget.h b/src/ui/FunctionViewWidget.h index 7dfc144..f2a468d 100644 --- a/src/ui/FunctionViewWidget.h +++ b/src/ui/FunctionViewWidget.h @@ -35,6 +35,7 @@ public: void addEOL() override; void TAGbegin(enum TAG_TYPE tag_type, void * p); void TAGend(enum TAG_TYPE tag_type); + void delChars(int v); private slots: diff --git a/src/ui/StructuredTextTarget.h b/src/ui/StructuredTextTarget.h index c80243b..e96246b 100644 --- a/src/ui/StructuredTextTarget.h +++ b/src/ui/StructuredTextTarget.h @@ -6,6 +6,7 @@ public: virtual void TAGbegin(TAG_TYPE t,void *data)=0; virtual void TAGend(TAG_TYPE t)=0; virtual void prtt(const QString &v)=0; + virtual void delChars(int v) = 0; virtual void addEOL() = 0; // some targets might want to disable newlines void addSpace(int n=1) {