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 内寄存器的状况
可以看到 , 模拟系统的CPU内有
通用寄存器 AX BX CX DX值都为0
SP BP SI DI DS ES SS 寄存器还没学不知道什么用
CS IP 寄存器 以及其指向的指令被翻译成汇编 ADD [BX+SI],AL
- R指令 改变寄存器值
r 指令后跟 要改变的寄存器的名字 按回车 显示当前该寄存器的值 并等待输入要修改的值
- D指令查看内存中的内容
d 段地址:偏移地址
查看 从01231H 地址开始往后 128个内存单元的内容
可以看到, 上面显示了 从 01231H 到 0123:0080 的128个内存单元
a.左边是每行的起始地址
b.每一行最多显示 16个内存单元,
c. 中间的-
是为了让程序员好观察, 划分了前8个位置和后8个位置
d.后面的字符是每块内存下对应的ASCII码,没有可对应的就用 .
表示
e.接着使用d
可以查看接着 0123:0080 后面的 128 个存储单元的内容
d 段地址:起始便宜地址 结尾偏移地址
可以查看指定范围内的存储单元内容
- E指令修改内存中的内容
值可以是数,也可以是ASCII码符, 也可以是字符串
e 段地址:偏移地址
可以采用询问的方式修改, .
前是该地址下的值, .
后是等待键入的修改值, 如果要修改下一个内存单元就敲空格 ,不键入直接空格就是不改变当前值, 全部修改完毕后敲回车结束
- 用E指令在内存中写入一段机器码, 用U指令查改该机器码对应的汇编语言, 用T指令执行该指令
机器码b80100
对应的汇编语言是mov ax,1
可以看到, 该指令占用3字节, 下一条指令的地址是 1000:0003
执行以下指令
简单的使用 t 指令执行 CS:IP 指向的指令
还有一个可以注意的点, 使用t 指令执行1000:0 的指令后, IP寄存器的值自动修改为下一条指令的偏移地址
- 使用A指令, 以汇编的形式在内存中写入机器指令
可以看到哈, add ax,bx指令只占了两个字节
- 实验任务:
(1)使用DEBUG 将规定程序段写入内存, 逐条执行, 观察前后CPU的变化
a.使用A指令用汇编指令键入机器指令
b.查看CS:IP 并修改为 1000:0008
c.使用t指令执行CS:IP指向的机器指令
(2)将下面3条指令写入从 2000:0 开始的内存单元,利用3条指令计算2的八次方
修改从2000:0地址开始的存储单元的值
查看CS:IP, 并将其指向2000:0
执行2000:0 和 2000:3 得到 2
多敲了几遍t,得到 ax = 0100H ,也就是2的八次方的值
(3)查看内存上的内容,查看内存FFF00H~FFFFFH的信息
这就是那个生产日期? 好怪异,为什么是倒着的
尝试着去改变, 发现那块并改不了, 应该是ROM内存