实验任务一、
·使用e命令修改 0021:0~0021:f数据,将连续8个字节改为30H, 31H, 32H, 33H,34H,35H,36H,37H,使用d命令查看修改后的结果
·使用debug,写入程序段(将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021)
将程序段写入后,可以使用r指令查看当前CS:IP
使用t指令单步执行查看结果
·mov ax,0021
·mov ds,ax
·mov ax,2200
·mov ss,ax
【注意:此处指令 mov sp,0100被略过,原因:在执行修改ss的指令后,即此处执行mov ss,ax后,下一条指令因中断机制被紧接执行】
·mov ax,[0]
->ax=3130
·add ax,[2]
->ax=6462
·mov bx,[4]
->bx=3534
·add bx,[6]
->bx=6c6a
·push ax
->sp=00fe 修改的内存单元的地址为2200:00fe,内容为6462h
·push bx
->sp=00fc 修改的内存单元的地址为2200:00fc,内容为6c6ah
·pop ax
->sp=00fe ax=6c6a
·pop bx
->sp=0100 bx=6462
·push [4]
->sp=00fe 修改的内存单元的地址为2200:00fe,内容为6c6ah
·push [6]
->sp=00fc 修改的内存单元的地址为2200:00fc,内容为3736h
实验任务二、
1.记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f的值,及修改后查看的部分
2.单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。
第一步:mov ax,2000
内容没有变化
第二步+第三步:mov ss,ax+mov sp,10
【注意到,此时在执行完mov ss,ax后,同样由于中断机制,紧接着执行mov sp,10语句。且mov sp,10必须跟在mov ss,ax后,(因为EA(有效地址)=段基址*16+偏移地址,设置了段基址,就得马上设置偏移地址,否则就会默认sp(堆栈指针)为0。故一般需要连着使用。)】
前三步执行的作用:设置ss=2000h,sp=0010h 即初始化栈顶
初始化栈顶2000:0010 初始化栈底:2000:0010
总结、
通过实验,更进一步了解了CPU提供的栈机制,也对push、pop两条指令有了更进一步的掌握。