15

I'm writing a paper with a lot of x86-64 code listings in it. Unfortunately, the listings package itself does not have support for x86-64 instructions and register names (which are just named different than the 32 bit counterparts).

Does anyone have the code to configure the package to support that?

  • The package itself provides the possibility of define new languages. Thus you just have to follow the rules explained in the documentation. – Claudio Fiandrino Apr 12 '12 at 11:54
21

The documentation for listings describes the \lstdefinelanguage macro, which can be used to define new languages as extensions of others.

\documentclass{article}

\usepackage{listings}

\lstdefinelanguage
   [x64]{Assembler}     % add a "x64" dialect of Assembler
   [x86masm]{Assembler} % based on the "x86masm" dialect
   % with these extra keywords:
   {morekeywords={CDQE,CQO,CMPSQ,CMPXCHG16B,JRCXZ,LODSQ,MOVSXD, %
                  POPFQ,PUSHFQ,SCASQ,STOSQ,IRETQ,RDTSCP,SWAPGS, %
                  rax,rdx,rcx,rbx,rsi,rdi,rsp,rbp, %
                  r8,r8d,r8w,r8b,r9,r9d,r9w,r9b, %
                  r10,r10d,r10w,r10b,r11,r11d,r11w,r11b, %
                  r12,r12d,r12w,r12b,r13,r13d,r13w,r13b, %
                  r14,r14d,r14w,r14b,r15,r15d,r15w,r15b}} % etc.

\lstset{language=[x64]Assembler}

\begin{document}
\begin{lstlisting}
  cdqe 1, r8
  push 1
  add rsp, 4
  push 1
\end{lstlisting}
\end{document}

Which looks a little like:

output of the above LaTeX

(I've just added the instructions listed here and only some of the registers, you can easily add any more that you use.)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.