Debug实验
Debug实验
二、实验过程
1.百度Debug,了解Debug的作用。
2.下载DosBox与masm。
3.用记事本编写汇编程序z=x+y,并保存为asm文件。
4.打开DosBox,利用masm通过lsb.asm生成lsb.exe文件。
5.Debug lsb.exe,通过Debug的各种命令,观察数据变化。
三、实验结果
1.-u指令
段首地址为076B,偏移地址为0000-001F,第三列是指令的机械码,最后两列是汇编指令。u命令反汇编字节单元还应加上最后一条指令所占字节数即+1字节,001F+1=0020H,所以反汇编地址是0000H-0020H。观察可看出来:机器码不同的指令的地址偏移变化不一样,如第二条命令偏移地址字节单元增加为3,而第三条命令偏移地址字节单元增加为2。
2.-t指令
AX(accumulator):累加寄存器BX(base):基址寄存器;CX(count):计数寄存器;DX(data):数据寄存器;SP(Stack Pointer):堆栈指针寄存器;BP(Base Pointer):基址指针寄存器;SI(Source Index):源变址寄存器;DI(Destination Index):目的变址寄存器;DS(Data Segment):数据段寄存器;ES(Extra Segment):附加段寄存器;SS(Stack Segment):堆栈段寄存器;CS(Code Segment)代码段寄存器;IP(Instruction Pointer):指令指针寄存器
PSW:是标志寄存器。 这里表示无溢出NV、增量UP、允许中断EI、正PL、非零NZ、无辅助进位NA、奇校验PO、无进位NC
利用t指令逐步跟踪执行代码可看出,除AX与Ip还有DS变化外,其余数据都未改变,因为该代码较简单,并未使用指针,堆栈等。从psw的变化可以看见当运算结果出来后即Int 21指令后一条,EI变为DI,不允许中断,且???指令之后一直为0,ZR。
整个流程为第一句是将1234(16进制)送入到寄存器AX中,第二句是将AX的值(此时是1234)与5678相加,并将结果送入到AX中,此时AX的值变为了68AC(16进制)。