关于汇编调试的 -a命令

拿这个试验几个指令的具体操作动作时,发现有点不人性化的设计。

赋值时时16进制的,结尾一定不要加 h  要么报错。

结束时以一行空语句+回车

调试时的g语句最麻烦,居然起点和终点都要输入基址,开始我很郁闷,弄了很久不晓得加。后来被逼去查了下详情:如下

• 所有输入的数值都是16进制数;
• 段超越指令需要在相应指令前,单独一行输入;
• 段间(远)返回的助记符要使用RETF;
• A命令也支持最常用的两个伪指令DB和DW。


另外,在验证 SHLD 和SHRD这个两指令时,居然不能debug,貌似masm里面没有这个东西,于是找到了TASM,结果果然可以验证,而且我觉得tasm很华丽哟,呵呵!

对于汇编,我不知道的地方还很多,积累吧。

存点东西:

MOV(MOVe)   传送指令
PUSH     入栈指令
POP     出栈指令
XCHG(eXCHanG)   交换指令
XLAT(TRANSLATE)   换码指令
LEA (Load Effective Address) 有效地址送寄存器指令
LDS(Load DS with pointer) 指针送寄存器和DS指令
LES(Load ES with pointer) 指针送寄存器和ES指令
LAHF(Load AH with Flags) 标志位送AH指令
SAHF(Store AH into Flgs) AH送标志寄存器指令
PUSHF(PUSH the Flags)   标志进栈指令
POPF(POP the Flags)   标志出栈指令
ADD     加法指令
ADC     带进位加法指令
INC     加1指令
SUB(SUBtract)   不带借位的减法指令
SBB(SuVtrach with borrow) 带借位的减法指令
DEC(DECrement)   减1指领
NEG(NEGate)   求补指令
CMP(CoMPare)   比较指令
MUL(unsinged MULtiple) 无符号数乘法指令
IMUL(sIgned MUL tiple) 有符号数乘法指令
DIV(unsigned DIVide)   无符号数除法指令
IDIV(sIgned DIVide)   有符号数除法指令
CBW(Count Byte to Word) 字节转换为字指令
CWD(Count Word to Doble word) 字转换为双字指令
DAA   压缩的BCD码加法十进制调整指令
DAS   压缩的BCD码减法十进制调整指令
AAA   非压缩的BCD码加法十进制调整指令
AAS   非压缩的BCD码加法十进制调整指令
AND     逻辑与指令
OR     逻辑或指令
XOR     逻辑异或指令
NOT     逻辑非指令
TEST     测试指令
SHL(SHift logical Letf)   逻辑左移指令
SHR(SHift logical Right)   逻辑右移指令
ROL(Rotate Left )   循环左移指令P58
ROR(Rotate Right)   循环右移指令P58
RCL(Rotate Left through Carry) 带进位循环左移
RCR(Rotate Right through Carry) 带进位循环左移
MOVS(MOVe String)   串传送指令
STOS(STOre into String) 存入串指令
LODS(LOad from string) 从串取指令
REP(REPeat)   重复操作前
CLD(CLear Direction flag) 清除方向标志指令
STD(SeT Direction flag)   设置方向标志指令
CMPS(CoMPare String)   串比较指令
SCAS(SCAn String)   串扫描指令
REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀
REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀
IN(INput)   输入指令
OUT(OUTput)   输出指令
JMP(JuMP)   无条件转移指令
JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ   条件转移指令
LOOP     循环指令P70
LOOPZ/LOOPE   为零/相等时循环指令
LOOPNZ/LOOPNE   不为零/不相等时循环指令
CALL     子程序调用指令
RET(RETun)   子程序返回指令
CLC(CLear Carry)   进位位置0指令
CMC(CoMplement Carry) 进位位求反指令
SRC(SeT Carry)   进位位置1指令
NOP(No OPeretion)   无操作指令
HLT(HaLT)   停机指令
OFFSET   返回偏移地址
SEG     返回段地址
EQU(=)   等值语句
PURGE   解除语句
DUP     操作数字段用复制操作符
SEGMENT,ENDS   段定义指令
ASSUME   段地址分配指令
ORG     起始偏移地址设置指令
$     地址计数器的当前值
PROC,ENDP   过程定义语句
NAME,TITLE,END   程序开始结束语句
MACRO,ENDM   宏定义指令

JZ   OPR //结果为零转移
JNZ   OPR //结果不为零转移
JS   OPR //结果为负转移
JNS   OPR //结果为正转移
JO   OPR //溢出转移
JNO   OPR //不溢出转移
JP   OPR //结果为偶转移
JNP   OPR //结果为奇转移
JC   OPR //有进位转移
JNC   OPR //无进位转移

版权所有© HzlzH | 本文采用 BY-NC-SA 进行授权
转载需注明 转自: 《关于汇编调试的 -a命令

相关文章

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)