实验1 用机器指令和汇编指令编程

1. 教材实验1

实验任务(1)

用e命令写入内存,用t命令单步调试:
首先将书上前4行的机器码存入073F:0100开始的地址单元里,然后使用u命令反汇编,查看是否与书上的汇编指令相同。
然后进行单步跟踪进行调试。

用a命令写入内存,用t命令单步调试:

将汇编指令写到0:200开始的地址单元,并且使用-t=0:200的命令进行单步调试。

实验任务(2)

使用加法和跳转指令来实现2^8的计算:
通过自加和使用跳转的循环来进行循环计算,刚开始计算,看到ax=0008,下面一步计算得到ax=0010,一开始想成了十进制还以为是自己写错了。最后得到ax=0100,2的8次方256。

实验任务(3)

查看并且修改生产日期:
首先因为不确定在内存的什么地方,所以用d命令查看 fff0:0 ff区域,查出来感觉应该存在了最后一行的地址单元中间,所以尝试用e命令进行修改,发现更改不了。
原因是:C0000:FFFFF属于各类ROM地址空间,无法对只读存储器中的内容进行改写。

实验任务(4) 

9FFFF-A0000是显存地址空间,在这里写入数据会被显卡输出到屏幕上,正如下图中右上角的图标所示,并且数据能够被存入。

教材实验2

实验任务(1)

首先根据将内存单元 0022:0 7连续 8 个字节数据修改为 50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H,根据此修改得到理论值:
然后进行实验:
首先将ds赋值0022,保证等会取数据取的是刚才存入的数据,然后将SS:SP指向2200:0100。
然后将ax,bx的数值进行对比
SS:SP指向2200:00FE,修改了2200:00FE的值,修改成了A4A2H
SS:SP指向2200:00FC,修改了2200:00FC的值,修改成了ACAAH
出栈,ax被赋值最上面的数据,即ACAAH,SS:SP指向2200:00FE
Bx被赋值最上面的数据,即A4A2H,SS:SP指向2200:0100
SS:SP指向2200:00FE,修改了2200:00FE的值,修改成了5554H
SS:SP指向2200:00FC,修改了2200:00FC的值,修改成了5756H
与之前的结论一致。
首先8086使用的是小端法。
栈基址SS=2200H,栈顶初始地址为SP=0100H,出栈的时候SP+2,入栈的时候sp-2。

实验任务(2)

前3行汇编指令的功能:
设置栈的段地址,SS=2000H,设置的为栈顶的偏移地址,sp=0010H,所以0010H为栈顶,000EH为栈底。
mov sp, 10意味着:设置的为栈顶的偏移地址,因为栈为空,sp=0010H。
观察2000:0  f的内容,里面存放了ax,bx,Ip,cs的值。
我发现并不是只有在push时,里面的内容才会变,每一次调试都会发生改变,都是往前面移动2个单位。

实验总结

1.了解了一些基本的汇编指令。
2.但是对最后一个实验2000:0  f的内容的变化不是很理解原因;还有就是在教材实验一的第4个任务,对显存地址进行修改,在做完任务3后直接修改,更改了好几次都不成功,最后重新启动程序了之后再次更改,才能正常更改显存地址内容。
 
 
posted @ 2020-10-11 15:54  renzzshiyan  阅读(101)  评论(2)    收藏  举报