检测点 3.1:
1)在 Debug中用 “d 0:0 1f” 查看内存,结果如下:
下面的程序执行前,AX = 0, BX = 0,写出每条汇编指令执行完后相关寄存器中的值。
Mov ax,1
Mov ds,ax
Mov ax,[0000]; AX=2662
Mov bx,[0001]; BX=E626
Mov ax,bx ; AX=E626
Mov ax,[0000]; AX=2662
Mov bx,[0002];BX=D6E6
Add ax,bx ;AX=FD48
Add ax,[0004]; AX=FD48+2ECC=2C14
Mov ax,0 ; AX=0
Mov al,[0002]; AX=00E6
Mov bx,0 ; BX=0
Mov bl,[000C]; BX=0026
Add al,bl ; AX=000C
2)
执行过程:
第一步:CS=2000H,IP=0H 地址:20000H
读取第一条指令 mov ax,6622H
CS=2000H, IP=03H
执行指令 mov ax,6622H
执行结果:AX=6622H
第二步:地址:20003H
读取第二条指令 jmp 0ff0:0100
CS=2000H,IP=03H
执行指令:jmp 0ff0:0100
执行结果:CS=0ff0H, IP=0100H
第三步:地址:CSx16+IP = 10000H
读取指令:mov ax,2000H
CS=0ff0H, IP=0103H
执行指令:mov ax,2000H
执行结果:AX=2000H
第四步:地址:10003H
读取指令:mov ds,ax
CS=0ff0H, IP=0105H
执行指令:mov ds,ax
执行结果:ds=2000H
第五步:地址:10005H
读取指令:mov ax,[0008]
CS=0ff0H,IP=10008H,DS=2000H
执行指令:mov ax,[0008] ;
也就是将地址【DS:IP】为 2000H:0008H的值移动到AX
执行结果:AX=C189H
第六步:读取指令:mov ax,[0002]
CS=0ff0H ,IP=1000BH,DS=2000H
执行指令:mov ax,[0002]
执行结果:AX=EA66
知识点:
任意时刻SS:SP 指向栈顶元素。
push指令和pop指令执行时,CPU从 SS和SP中得到栈顶的地址。
注:SS(Stack Segmet)堆栈段寄存器,指向当前的堆栈段。
SP(Stack Pointer)堆栈指针寄存器,主要用于堆栈操作,存放堆栈段首地
址到栈顶单元的偏移量。
入栈时:886CPU栈顶从高地址向低地址方向增长。
还没有看完以后有机会再添加吧。
本文详细解析了汇编语言检测点3.1的内容,包括Debug中查看内存、汇编指令执行后寄存器的值变化,以及执行过程的步骤分析,涉及CS、IP、AX、BX等寄存器的更新,以及栈操作的相关知识。
1435

被折叠的 条评论
为什么被折叠?



