0%

《汇编语言》(第四版) 实验 1

《汇编语言(第四版)》 . 王爽著 . 清华大学出版社 . 2019

实验 1 查看 CPU 和内存,用机器指令和汇编指令编程

预备知识

本次实验中需要用到的命令

查看、修改 CPU 中寄存器的内容:R 命令
查看内存中的内容:D 命令
修改内存中的内容:E 命令(可以写入数据、指令、在内存中,它们实际上没有区别)
将内存中的内容解释为机器指令和对应的汇编指令:U 命令
执行 CS:IP 指向的内存单元处的指令:T 命令
以汇编指令的形式向内存中写入指令:A 命令

在做实验的过程中,慢慢将解锁其他的用法

实验任务(1)

将程序段写入内存并逐条执行,注意 CS:IP 的指向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,ax
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 bh,al
b4 00 mov ah,0
00 d8 add al,bl
04 9c add al,9CH

可以用 E 命令和 A 命令两种方式将指令写入内存

用 R 命令查看 CPU 中的寄存器的值


我们将以上的程序段写到从 1000:0000 开始的内存中,为了执行这段程序,将 CS:IP 指向段地址为 1000、偏移地址为 0000 的内存单元


写入后的状态,可以看到内存中的指令是以一个个的机器码的形式存在的,数据与指令在内存中的形式是一样的,说明它们在本质上是没有区别的


用 U 命令查看我们写入的汇编指令


用 T 命令逐条执行我们写入的汇编指令


也可以直接让 Debug 执行全部的 14 条指令,在 T 命令的后面加上要执行命令的条数,注意 14 的十六进制数为 0x0e

实验任务(2)

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

1
2
3
mov ax, 1
add ax,ax
jmp 2000:0003
...

...


2 的 8 次方即 16 的平方,即 1 x 16^2,所以当 AX=0100 时我们知道已经计算完毕

8086CPU 在工作过程中总是从 CS:IP 指向的内存单元读取指令,读取的指令进入指令缓冲器,然后使 IP = IP + 所读取指令的长度,从而使 CS:IP 指向下一条指令,如此循环。现在我们可以界定 CPU 根据什么将内存中的信息(机器码)看作指令而不是简单的数据,即,CPU 将 CS:IP 指向的内存单元中的内容看作指令,CS:IP 存储了下一个将要执行的指令的物理地址

jmp 指令是一个转移指令,转移指令是指可以修改 IP 或同时修改 CSIP 的指令,而 jmp 属于转移指令中的无条件转移指令

若要同时修改 CS:IP 的内容,可使用 jmp 段地址:偏移地址 的指令来完成,用指令中给出的段地址修改 CS,偏移地址修改 IP

jmp 某一合法寄存器 指令的功能为:用寄存器中的值修改 IP,例如 jmp ax 在含义上好似:mov IP,ax

实验任务(3)

查看内存中的内容

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


向地址 C0000 ~ FFFFF 的内存单元中写入数据的操作是无效的,只读存储器中的内容不可修改

实验任务(4)

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

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

填写不同的数据,观察现象;改变填写的地址,观察现象


内存地址空间中,B8000H ~ BFFFFH 共 32 KB 的空间为 80 x 25 彩色字符模式的显示缓冲区,向这个地址空间写入数据,写入的内容将立即出现在显示器上


汇编语言实验合集

汇编语言实验合集

实验 1 查看 CPU 和内存,用机器指令和汇编指令编程
实验 2 用机器指令和汇编指令编程
实验 3 编程、编译、连接、跟踪
实验 4 [bx] 和 loop 的使用
实验 5 编写、调试具有多个段的程序
实验 6 实践课程中的程序
实验 7 寻址方式在结构化数据访问中的应用
实验 8 分析一个奇怪的程序
实验 9 根据材料编程
实验 10 编写子程序
课程设计 1
实验 11 编写子程序
实验 12 编写 0 号中断的处理程序
实验 13 编写、应用中断例程
实验 14 访问 CMOS RAM
实验 15 安装新的 int9 中断例程
实验 16 编写包含多个功能子程序的中断例程
实验 17 编写包含多个功能子程序的中断例程
课程设计 2