汇编语言(第三版)实验 Chapter2

win64位需要使用dosbox模拟32位环境。

可以使用:https://download.youkuaiyun.com/download/w55100/11057669

或者网上搜索别人的资源

 

Chapter2

实验1

debug启动

1.

-r 查看
-r ax 修改ax的值

AX成功修改为0100

同理可修改 cs,ip

 

2.

 

d 1000:0 

段地址:偏移地址

表示查看内存'10000H'处的内容

 

 

 

d 000:5 9

表示 0000段,5到9

 

 

3.

e 0000:0 0 1 2 3 4 5 6 7 8 9

表示从0000:0开始,顺次把内存中的内容改成0,1,2,3,4,5,6,7,8,9

 

也可以用提问式

e 0000:10

表示从这个位置开始修改。

先是第一个单元08,'.'后面可以输入我们想要的值,按空格表示处理完当前字节,跳到下一个字节。

直接空格说明不对当前字节进行处理。

第二个字节处,我输入了'0a'。

Enter后结束e命令。

用d查看,发现0000:0010的第二个字节果然已经变成了'0a'。

 

 

也可以写入字符串

e 0000:10 1 "hello" 2 "everyone"

注意,字符串内似乎不能含有空格。

 

4.e输入机器码,u查看释义,t执行

 

e 1000:0 b8 01 00 b9 02 00 01 c8

此处有3条命令

b8 01 00

b9 02 00

01 c8

 

使用u 1000:0查看释义

得知分别代表

mov ax,0001

mov cx,0002

add ax,cx

 

所以可以看到,内存中的数据和代码没有任何区别,关键在于如何解释。

 

下面用t来执行我们输入的命令。

执行之前,要改一下 cs:ip的值,变成我们的1000:0

 

然后t执行,

执行完mov ax,0001 ,得到ax = 0001。

图中同时可以看到,cs:ip指向了下一条命令的地址1000:0003。

 

于是我们可以继续t执行,得到cx=0002。

同时cs:ip指向了下一个地址1000:0006。

 

继续t执行最后一条指令'add ax,cx',得到ax=0003。

 

 

 

4. 直接输入汇编指令。

前面是e输入机器码,我们现在用a写入汇编指令。

可以看到很神奇的,

mov ax的起始字节为B8

mov cx的起始字节为B9

mov bx的起始字节为BB

奇怪。

 

 

实验2

任务(1)

输入内存后逐条执行观察内存变化。略。

 

任务(2)

将下述三条指令写入2000:0,利用三条指令计算2的8次方。

mov ax,1

add ax,ax

jmp 2000:3

 

这其实就是个循环。不断回到2000:3,就是不断运算ax=2*ax。

设置好cs:ip之后,t一路执行下去即可。

 

任务(3)

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

(PS:如果读者对实验结果感到困惑,请仔细阅读第1章忠的1.15节)

 

输入 d fff0:00 ff

可以找到这个生产日期位于fff0:00f5~fff0:00fc。

 

也可以说是FFFF:5~FFF:C,这样看的更清楚一点。

 

使用上文说过的e输入字符串,即可修改。

然后懵逼了,怎么没有变啊?

又试了几次,发现还是没能修改。

 

想起上面的提示,回到1.15节。

发现只有00000~9FFFF是主存储器地址空间(RAM)。

A0000~BFFFF是显存地址空间,写入数据会被显示卡输出到显示器上。

C0000~FFFFF是各类ROM地址空间,写入数据是无效的,因为这等于改写只读存储器中的内容。

 

任务(4)

写入。

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

 

由上文可知,这是向显存地址空间写入数据,屏幕上会有相应改变。

成功看到一串彩色的乱码符号。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值