汇编语言实验一

实验任务一

1.教材实验一

(1)

通过A命令将汇编语言输入内存

汇编语言实验一

 

 用R cs和R ip将cs:ip指针指向第一条程序的位置073F:0100,接着用T命令逐条执行命令

汇编语言实验一

 

 汇编语言实验一

 

(2)

将指令输入内存并且调整cs:ip指针

汇编语言实验一

 

 重复执行若干次后得到0100即256

(3)

用D命令查看内存

汇编语言实验一

 发现日期为92年1月1日;

 尝试改变FFFF:0到FFFF:F的内容失败,因为c0000到FFFFF为只读存储器,无法写入数据

汇编语言实验一

 (4)

输入后结果如图

汇编语言实验一

 

 汇编语言实验一

 

 因为A0000到BFFFF为显存空间

 

实验任务二

见上试验任务一(三)

 

试验任务三

在debug中,使用e命令,向内存单元填写数据。

-e b800:0 03 04 03 04 03 04 03 04 03 04

从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。

结果如下

汇编语言实验一

 

 

在debug中,使用f命令,向内存单元批量填写数据。

-f b800:0f00 0f9f 03 04

把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。

结果如下

汇编语言实验一

 

 尝试改变内存数据

汇编语言实验一

 

 

试验任务四

(1)

初始,(sp)=0030

执行完push [0] 后   (sp)=002E

执行完push [2] 后   (sp)=002C

执行完push [4] 后   (sp)=002A

执行完push [6] 后   (sp)=0028

 

执行完pop [6] 后   (sp)=002A

执行完pop [4] 后   (sp)=002C

执行完pop [2] 后   (sp)=002E

执行完pop [0] 后   (sp)=0030

(2)栈空间数据如下图

汇编语言实验一

 

 可见20:2e处为push[0]所压入的字2010H

(3)

数据空间结果如下

汇编语言实验一

 

 数据没有变化

(4)

结果如下

汇编语言实验一

 

 可以发现数据顺序颠倒了

 

试验任务五

结果如下

汇编语言实验一

 

 

 汇编语言实验一

 

 实验任务六

过程如下

汇编语言实验一

 

 汇编语言实验一

 

 汇编语言实验一

 

 汇编语言实验一

 

 汇编语言实验一

 

 试验任务七

补全代码如下

assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,23
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s

mov ax,4c00h
int 21h
code ends
end

 

(1)第一空填写 cs,因为这是程序开始的地址;

          第二空填写 21;

          查看代码发现最后line3-line12所占空间为 0000H~0017H  17H=2

汇编语言实验一

 

 

 

实验结论

 实验二

尝试改变FFFF:0到FFFF:F的内容失败,因为c0000到FFFFF为只读存储器,无法写入数据;

 

实验三

截图见上

 

实验四

问题一:SS:SP 20:30  02300H

问题二:截图见上

问题三:截图见上

问题四:截图见上

 

实验五

问题一:debug的t命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行

问题二:查阅资料知,与中断机制有关。

 

实验六

见上

 

实验七

见上

 

 实验总结

通过本次实验,对dosbox下的debug工具及其命令,edit工具,文件的编译、连接,汇编中栈的知识有了更加深入的理解。

上一篇:实验1 8086汇编指令编码和调试


下一篇:实验1 8086汇编指令编码和调试