汇编实验二 用机器指令和汇编指令编程(mov ss,ax)

一.实验目的
掌握DEBUG 的几个补充的命令及其功能
二.实验内容

  1. 预备知识:Debug命令的补充
    (1) 在D命令中使用段寄存器
    格式:“d 段寄存器:偏移地址”,以段寄存器中的数据为段地址SA,列出从SA:偏移地址开始的内存区间中的数据。以下是4个例子:
    ① -r ds
    :1000
    -d ds:0 ;查看从1000:0开始的内存区间中的内容
    汇编实验二 用机器指令和汇编指令编程(mov ss,ax)_第1张图片
    ② -r ds
    :1000
    -d ds:10 18 ;查看1000:10~1000:18中的内容
    ③ -d cs:0 ;查看当前代码段中的指令代码
    ④ -d ss:0 ;查看当前栈段中的内容
    汇编实验二 用机器指令和汇编指令编程(mov ss,ax)_第2张图片
    (2) 在E、A、U命令中使用段寄存器
    在E、A、U这些可以带有内存单元地址的命令中,也可以同D命令一样,用段寄存器表示内存单元的段地址。以下是3个例子:
    ① -r ds
    :1000
    -e ds:0 11 22 33 44 55 66 ;在从1000:0开始的内存区间中写入数据
    ② -u cs:0 ;以汇编指令的形式,显示当前代码段中的代码,0代码的偏移地址
    ③ -r ds
    :1000
    -a ds:0 ;以汇编指令的形式,向从1000:0开始的内存单元中写入指令
    (3) 下一条指令执行了吗?
    在Debug中,用A命令写一段程序:
    mov ax,2000
    mov ss,ax
    mov sp,10 ;安排2000:0000~2000:000F 为栈空间,初始化栈顶。
    mov ax,3123
    push ax
    mov ax,3366
    push ax ;在栈中压入两个数据。

小结:在用T命令单步执行mov ax,2000后,显示出当前CPU各个寄存器的状态和下一步要执行的指令:mov ss,ax;在用T命令单步执行mov ss,ax后,下一条指令应该是mov sp,10,却变成了mov ax,3123?
注意,在用T命令单步执行mov ss,ax 前,ax=0000,ss=0b39,sp=ffee,而执行后 ss=2000,sp=0010。ss变为2000是正常的,这正是mov ss,ax的执行结果。而能够将sp设为0010的只有指令mov sp,10,看来,mov sp,10一定是得到了执行。
在用T命令执行mov ss,ax的时候,它的下一条指令mov sp,10也紧接着执行了。
整理一下我们分析的结果:在用T命令执行mov ss,ax的时候,它的下一条指令mov sp,10也紧接着执行了。一般情况下,用T命令执行一条指令后,会停止继续执行,显示出当前CPU各个寄存器的状态和下一步要执行的指令,但T命令执行mov ss,ax的时候,没有做到这一点。
不单是mov ss,ax,对于如:mov ss,bx,mov ss,[0],pop ss等指令都会发生上面的情况,这些指令有哪些共性呢?它们都是修改栈段寄存器SS的指令。
结论:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

三.实验任务
(1) 使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

mov ax,ffff ax=ffff;
mov ds,ax ds=ax=ffff;
mov ax,2200 ax=2200;
mov ss,ax ss=ax=2200;
mov sp,0100 sp=0100;只不过这一步是和上一步同时执行的。
mov ax,[0] ;ax= C0EA
add ax,[2] ;ax= C0FC
mov bx,[4] ;bx= 30F0
add bx,[6] ;bx= 6021
push ax ;sp= (sp)-2=0010-2=00FE ;修改的内存单元的地址是 内容为
push bx ;sp= 00FE-2=00FC ;修改的内存单元的地址是 内容为
pop ax ;sp= 00FE ;ax= 6021
pop bx ;sp= 0100 ;bx= C0FC
push [4] ;sp= 00FE ;修改的内存单元的地址是 内容为
push [6] ;sp= 00FC ;修改的内存单元的地址是 内容为
(2) 仔细观察下图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
汇编实验二 用机器指令和汇编指令编程(mov ss,ax)_第3张图片

用Debug进行实验的示例
四.实验报告
写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

你可能感兴趣的:(汇编)