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命令等一些基本指令;
其实对第四题还是有点好奇的,希望能有大神指点一下;