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

1、教材实验1

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

               机器码                                     汇编指令

             b8 20 4e                                    mov ax,4E20H

             05 16 14                                    add ax,1416H

             bb 00 20                                    mov ax,2000H

             01 d8                                          add ax,bx

 

使用e命令:

 

使用a命令:

 

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

           mov ax,1

           add ax,ax

           jmp 2000:0003

 

 

  (3)查看内存中的内容。

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

 

使用d命令查询内存FFF00H~FFFFFH,查询到日期为1992-01-01:

 

使用e命令修改相应内存单元,修改失败:

 

分析原因:地址为C0000H~FFFFFH的内存单元是ROM的地址空间,而ROM是只读存储器,所以向其写入数据的操作是无效的。

 

  (4)向内存从B8100H开始的单元中填写数据,如:

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

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

 

输入题目中给定的数据:

 

 

改变数据:

 

改变地址:

 

结论:改变数据会改变图形的颜色以及形状,改变地址会改变图形的位置。

 

 

 

 

2、教材实验2

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

     mov ax,0022

     mov ds,ax

     mov ax,2200

     mov ss,ax

     mov sp,0100

     mov ax,[0]                ; ax=5150

     add ax,[2]                 ; ax=A4A2

     mov bx,[4]                ; bx=5554

     add bx,[6]                 ; bx=ACAA

     push ax                    ; sp=00FE;修改的内存单元的地址是2200:00FE,内容为A4A2

     push bx                    ; sp=00FC;修改的内存单元的地址是2200:00FC,内容为ACAA

     pop ax                      ; sp=00FE;ax=ACAA

     pop bx                      ; sp=0100;bx=A4A2

     push [4]                    ; sp=00FE;修改的内存单元的地址是2200:00FE,内容为5554

     push [6]                    ; sp=00FC;修改的内存单元的地址是2200:00FC,内容为

 

 

 

 

 

 

使用a命令输入相应程序段:

 

使用t命令进行单步指令执行:

 

结论:理论答案与实践结果一致。

 

  (2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

 

 

前3行汇编指令的功能,特别是mov sp,10意味着什么?初始时栈顶和栈底分别是?

mov ax,2000 表示将段地址2000H存入常用寄存器ax中。

mov ss,ax 表示将常用寄存器ax中的值存入栈的段寄存器ss中作为栈的段地址。

mov sp,10 表示将10存入栈指针寄存器sp中作为栈的偏移地址。

初始时栈顶为:2000:0010

初始时栈底为:2000:0010

 

栈内容变化的原因分析:

  可能是因为使用t命令单步执行时,会将某些重要的数据暂存到栈中,而有些值会在执行入栈的操作时会将该相应地址的值变为入栈的值,将CS和IP向前移动。

posted @ 2020-10-11 21:35  腓腓  阅读(241)  评论(2)    收藏  举报