x86-64 assembler language dialect for the listings package

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

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