《汇编语言(第四版)》 . 王爽著 . 清华大学出版社 . 2019
¶实验 1 查看 CPU 和内存,用机器指令和汇编指令编程
¶预备知识
本次实验中需要用到的命令
查看、修改 CPU 中寄存器的内容:R 命令
查看内存中的内容:D 命令
修改内存中的内容:E 命令(可以写入数据、指令、在内存中,它们实际上没有区别)
将内存中的内容解释为机器指令和对应的汇编指令:U 命令
执行 CS:IP
指向的内存单元处的指令:T 命令
以汇编指令的形式向内存中写入指令:A 命令
在做实验的过程中,慢慢将解锁其他的用法
¶实验任务(1)
将程序段写入内存并逐条执行,注意 CS:IP
的指向
1 | b8 20 4e mov ax,4E20H |
可以用 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 | mov ax, 1 |
2 的 8 次方即 16 的平方,即 1 x 16^2,所以当 AX=0100
时我们知道已经计算完毕
8086CPU 在工作过程中总是从 CS:IP
指向的内存单元读取指令,读取的指令进入指令缓冲器,然后使 IP = IP + 所读取指令的长度
,从而使 CS:IP
指向下一条指令,如此循环。现在我们可以界定 CPU 根据什么将内存中的信息(机器码)看作指令而不是简单的数据,即,CPU 将 CS:IP
指向的内存单元中的内容看作指令,CS:IP
存储了下一个将要执行的指令的物理地址
jmp
指令是一个转移指令,转移指令是指可以修改 IP
或同时修改 CS
和 IP
的指令,而 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