title: 上机实验1、2
date: 2021-08-01 14:48:03
tags: 汇编语言笔记
categories: 汇编语言笔记
在工作室好哥哥们的影响下,也开始喜欢用博客记录自己的学习过程了。
https://afanbird.github.io/
个人博客的地址,由于可能不久之后会换电脑,暂且就不更新在个人博客上了(怕迁移麻烦),用CSDN更新,后面转载到个人博客上面的时候,也会方便很多。笔记是自己在学习中的汇编语言第三版书上的重点知识。之所以记录下来,也是为了自己以后复习知识的时候,能方便的复习。如有不对的地方,欢迎各位师傅指出,若有什么想法,也可以讨论交流,一起学习进步。
上机实验1 查看CPU和内存,用机器指令和汇编指令编程
(1)用R命令查看、改变CPU寄存器的内容。
若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后按Enter键,将出现“:”作为输入提示,在后面输入要写入的数据后按Enter键,即完成了对AX中的内容的修改。
(2)使用“d 段地址:偏移地址”的格式,Debug将列出从指定内存单元开始的128个(一行16个字节,一共8行)内存单元的内容。
使用D命令,Debug将输出3部分内容
1.中间是从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出从16的整数倍的地址开始,最多输出16个单元的内容。
2.左边是每行的起始地址。
3.右边是每个内存单元中的数据对应的可显示的ASCII码字符。
在一进入Debug后,用D命令直接查看,将列出Debug预设的地址处的内容。
在使用“d 段地址:偏移地址”之后,接着使用D命令,可列出后续的内容。
也可以指定D命令的查看范围,此时采用“d 段地址:起始偏移地址 结尾偏移地址”的格式。
(3)用Debug的E命令改写内存中的内容。
可以用“e 起始地址 数据 数据 数据 数据。。。。。”的格式来进行
也可以采用提问的方式来一个一个地改写内存中的内容。
步骤如下:
1.输入e 1000:10,按Enter键。
2.Debug 显示起始地址1000:0010,和第一单元(即1000:0010单元)的原始内容;然后光标停在“.”的后面提示输入想要输入的数据,此时可以有两个选择;其一为输入数据(我们输入的是0),然后按空格键,即用输入的数据改写当前的内存单元;其二为不输入数据,直接空格键,则不对当前内存单元进行改写。
也就是
-d 1000:10 19
1000:0010 6D 61 72 6B 73 29 20 69 -6E 20
-e 1000:10
1000:10 6D.0 61.1 72.2 6B.1c
-
3.当前单元处理完成后(不论是改写或没有改写,只要按了空格键,就表示处理完成),Debug将接着显示下一个内存单元的原始内容,并提示进行修改。
4.所有希望改写的内存单元改写完毕后,按Enter键,E命令操作结束。
可以用E命令向内存单元中写入字符,比如,用E命令从内存1000:0开始写入数值1、字符“a”、数值2、字符“b”、数值3、字符“c”,可采用如下的方法进行。
-e 1000:0 1 ‘a’ 2 ‘b’ 3 ‘c’
-
-d 1000:0 f
1000:0000 01 61 02 62 03 63 00 -00 00 00 00 00 00 00 00
从上面的命令可以看出,Debug对E命令的执行结果是,向1000:0、1000:2、1000:4单元中写入数值1、2、3,向1000:1、1000:3、1000:5单元中写入字符“a”、“b”、“c”的ASCII值:61h、62h、63h。
也可以用E命令向内存中写入字符串,
比如,用E命令从内存1000:0开始写入:数值1、字符串“a+b”、数值2、字符串“c++”、字符3、字符串“IBM”。
-e 1000:0 1 “a+b” 2 “c++” 3 “IBM”
-
-d 1000:0 f
1000:0000 01 61 2b 62 02 63 2b 2b -03 49 42 4d 00 00 00 00
用E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码。
(4)用U指令查看从1000:0开始的内存单元的机器指令和它们所对应的汇编指令。
U命令的显示输出分为3部分,每一条机器指令的地址、机器指令、机器指令所对应的汇编指令
1000:0处存放的是写入机器码b8 01 00所组成的机器指令,对应的汇编指令是mov ax,1;
由此我们可以再一次看到内存中的数据和代码没有任何区别,关键在于如何解释。
(5)使用Debug的T命令可以执行一条或者多条指令。
(6)用Debug的A命令以汇编指令的形式在内存中写入机器指令。
在使用A命令写入指令时,我们输入的是汇编指令,Debug将这些汇编指令翻译为对应的机器指令,将它们的机器码写入内存。
上机实验2 用机器指令和汇编指令编程
1.预备知识:Debug的使用
(1)关于D命令。
D命令是查看内存单元的内容,可以用:“d 段地址:偏移地址”的格式查看指定的内存单元的内容,上次实验中,D命令后面的段地址和偏移地址都是直接给出的。
D命令也提供了一种符合CPU机理的格式:“d 段寄存器 :偏移地址”,以段寄存器中的数据为段地址SA,列出从SA:偏移地址开始的内存区间中的数据。
如;
-d cs:0 ;查看当前代码段中的指令代码
-d ss:0 ;查看当前栈段中的内容
-r ds
DS 1000
:1000
-d ds:0 ;查看从1000:0开始的内存区间中的内容
(2)在E、A、U命令中使用段寄存器。
同D命令一样,用段寄存器表示内存单元的段地址。
(3)下一条指令执行了吗?
Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行(中断机制)