实验任务1

任务

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

mov ax,4E20H
add ax,1416H
mov bx,2000H
add ax,bx
mov bx,ax
add ax,bx
mov ax,001AH
mov bx,0026H
add al,bl
add ah,bl
add bh,al
mov ah,0
add al,bl
add al,9CH

过程

编写程序

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据

查看是否写入成功

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_02

执行程序

首先修改​​CS​​和​​IP​​的值,指向程序起始处(​​1000:0​​),准备执行程序:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_03

执行第①行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_04

执行第②行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_05

执行第③行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_06

执行第④行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_07

执行第⑤行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_08

执行第⑥行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_09

执行第⑦行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_10

执行第⑧行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_11

执行第⑨行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_12

执行第10行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_13

执行第11行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_14

执行第12行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_15

执行第13行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_16

执行第14行:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_17

实验任务2

任务

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

mov ax,1
add ax,ax
jmp 2000:0003

过程

编写程序

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_18

执行程序

首先修改​​CS​​和​​IP​​的值,指向程序起始处(​​2000:0​​),准备执行程序:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_19

第1次进入循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_20

第2次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_21

第3次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_22

第4次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_23

第5次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_24

第6次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_数据_25

第7次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_26

第8次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_f5_27

第9次循环:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_28

实验任务3

任务

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

分析

地址在​​FFF00H​​​起始,所以段地址应该设为:​​CS = FFF0​​​,偏移起始地址为:​​IP = 0000H​​​,终止偏移地址为​​IP = 00FF​​。

过程

查找日期

查看区间地址内的内容,找到的生产日期如下:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_29

修改日期

从上图中可以看到生产日期起始地址为:​​FFF0:00F5​​,尝试修改:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_30

原因分析

8086 CPU的​​1M​​内存地址空间划分如下:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_31

​FFF0:00F5​​对应的物理地址为:​​FFF0 * 16 + 00F5 = FFF00 + 00F5 = FFFF5​​,而​​FFFF5​​这个地址对应的是​ROM存储器​,​只能进行读操作,不能进行写操作​,所以修改内容会失败。

实验任务4

任务

向内存从B8100H开始的单元中读写数据,如:

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

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

过程

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_32

原因分析

8086 CPU的​​1M​​内存地址空间划分如下:

【8086汇编】王爽汇编语言(第三版)实验1详解 —— 查看CPU和内存,用机器指令和汇编指令编程_执行程序_31

​B810:0000​​对应的物理地址为:​​B8100​​,这个地址对应的存储器是显存,所以修改数据后,显卡会将显存数据输出到显示器,所以屏幕上会出现效果。