实验一

1.使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。

       机器码                                      汇编指令

b8  20  4e                                   mov  ax,4e20h

05  16  14                                   add  ax,1416h

bb  00  20                                   mov  bx,2000h

01  d8                                         add  ax,bx

89  c3                                         mov  bx,cx

01  d8                                         add  ax,bx

b8  1a  00                                   mov  ax,001ah

bb  26  00                                   mov  bx,0026h

00  d8                                         add  al,bl

00  dc                                         add  ah,bl

00  c7                                         add  ah,bl

b4  00                                         mov  ah,0

00  d8                                         add  al,bl

04  9c                                         add  al,9ch

整个代码运行起来太长了,所以就截取了其中一部分的代码;

在Debug中,程序员输入的汇编指令和计算机可以识别的机器码一一对应;

从第一个r指令可以看出来,cs一开始的值为14df,ip的值为0100,然后用t指令逐步调试汇编指令,ip的值不断变化,最后变为了0109,之前输入的3条汇编指令正好占用9个字节,可见ip的变化量根据汇编指令的不同而不同;

2.将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的八次方。

mov ax,1

add ax,ax

jmp 2000:3

 

总的来说,就是一直使用jmp指令,不断进行ax寄存器中值的自加,最后求得2的8次方的值,感觉应该是这样算的,第三张截图就是最后算出来的结果;

第一次算的时候,忘了设置cs和ip要指向2000:0的地址,所以一直算不出结果,还希望大家注意下,反正我是因为这个花了很长时间;

3.PC机的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

 

使用d指令来查看ffff0之后的内存单元,04/24/13即为生产日期,然后使用e指令来修改内存单元中的值即可;

每个内存单元中的值是逐个修改的,第一次一次性都输入,然后报错了;

4.向内存从d8100h开始的单元中填写数据,如:

-e b810:0000 01 01 02 02 03 03 04 04

请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

当地址为d8100h时,改写不同的数据会出现不同的图形,当地址改变之后,图形就不再变化了;

5.实验小结

对汇编语言这门学科算是有了初步的了解,不像以前一样一头雾水,现在至少有点概念了;

了解了mov和add等一些基本操作;

了解了r命令,d命令,a命令等一些基本指令;

其实对第四题还是有点好奇的,希望能有大神指点一下;

posted @ 2018-10-22 21:03  计科张岩  阅读(145)  评论(0编辑  收藏  举报