Assembly Languag (王爽) Lab

LAB 1from 2022.3.2

实验内容是使用DEBUG工具查看CPU和内存, 并且使用指令和汇编指令进行编程

DOS环境配置

  • 环境配置

DOSbox debug.exe masm
链接:https://pan.baidu.com/s/1_8L5aCvBQq-_Fj0LDEPpEA
提取码:cosS
该环境配置于2022.03.02, 自动执行以下代码

mount c e:\DOS c: debug

建议根据自身电脑情况百度环境配置, 该连接仅仅提供文件

  • -r查看 CPU 内寄存器的状况

image.png
可以看到 , 模拟系统的CPU内有
通用寄存器 AX BX CX DX值都为0
SP BP SI DI DS ES SS 寄存器还没学不知道什么用
CS IP 寄存器 以及其指向的指令被翻译成汇编 ADD [BX+SI],AL

  • R指令 改变寄存器值

image.png
r 指令后跟 要改变的寄存器的名字 按回车 显示当前该寄存器的值 并等待输入要修改的值

  • D指令查看内存中的内容

d 段地址:偏移地址
image.png
查看 从01231H 地址开始往后 128个内存单元的内容
可以看到, 上面显示了 从 01231H 到 0123:0080 的128个内存单元
a.左边是每行的起始地址
b.每一行最多显示 16个内存单元,
c. 中间的-是为了让程序员好观察, 划分了前8个位置和后8个位置
d.后面的字符是每块内存下对应的ASCII码,没有可对应的就用 .表示
e.接着使用d可以查看接着 0123:0080 后面的 128 个存储单元的内容

d 段地址:起始便宜地址 结尾偏移地址
可以查看指定范围内的存储单元内容
image.png

  • E指令修改内存中的内容

image.png
值可以是数,也可以是ASCII码符, 也可以是字符串
image.png

e 段地址:偏移地址
可以采用询问的方式修改, .前是该地址下的值, .后是等待键入的修改值, 如果要修改下一个内存单元就敲空格 ,不键入直接空格就是不改变当前值, 全部修改完毕后敲回车结束
image.png

  • 用E指令在内存中写入一段机器码, 用U指令查改该机器码对应的汇编语言, 用T指令执行该指令

image.png
机器码b80100对应的汇编语言是mov ax,1
可以看到, 该指令占用3字节, 下一条指令的地址是 1000:0003

执行以下指令
image.png
简单的使用 t 指令执行 CS:IP 指向的指令
还有一个可以注意的点, 使用t 指令执行1000:0 的指令后, IP寄存器的值自动修改为下一条指令的偏移地址

  • 使用A指令, 以汇编的形式在内存中写入机器指令

image.png
image.png
可以看到哈, add ax,bx指令只占了两个字节

- 实验任务:

(1)使用DEBUG 将规定程序段写入内存, 逐条执行, 观察前后CPU的变化

a.使用A指令用汇编指令键入机器指令
image.png
b.查看CS:IP 并修改为 1000:0008
image.png
c.使用t指令执行CS:IP指向的机器指令
image.png

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

修改从2000:0地址开始的存储单元的值
image.png
查看CS:IP, 并将其指向2000:0
image.png

执行2000:0 和 2000:3 得到 2
image.png

多敲了几遍t,得到 ax = 0100H ,也就是2的八次方的值
image.png

(3)查看内存上的内容,查看内存FFF00H~FFFFFH的信息

image.png
这就是那个生产日期? 好怪异,为什么是倒着的
image.png
尝试着去改变, 发现那块并改不了, 应该是ROM内存

(4)实验4, 应该是改变显存了, 出现了彩色闪烁的图标

image.png
image.png