🌵🌵🌵前言
?你好啊,我是“ 怪& ”,是一名在校大学生哦。 🌍主页链接:怪&的个人博客主页 ??博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。 ??一个“不想让我曾没有做好的也成为你的遗憾”的博主。 💪很高兴与你相遇,一起加油!
🌞🌞🌞一、预备知识
🍠1、CS与IP
(1)、概念
CS和IP是8086CPU两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。
在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N 单元开始,读取一条指令并执行。
(2)、表示方法
常用:CS:IP 例如:FFFFH:0000H ,CPU将从FFFF*16H+0000H即FFFF0H处读取指令。 注:FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。(8086CPU加电启动或复位,都会被设置为CS=FFFFH,IP=0000H)
🌳2、修改CS与IP的指令
注:汇编语言的语句是不区分大小写的
(1)、mov指令,也被称为传送指令,用于修改大部分寄存器的值
- 公式:
mov 寄存器名称,要设置的值 - 令AX=111:
mov ax,111 ???????其他寄存器的值同理。 注:mov不可用于设置CS与IP的值
(2)、jmp,修改CS与IP的指令之一
?a、同时修改CS与IP
- 公式:
jmp 段地址:偏移地址 ,即jmp CS,IP - 令CS=2AE3H,IP=0003H:
jmp 2AE3,3
?b、仅修改IP
- 公式:
jmp 某一合法寄存器 - 例如:ax=1000H,CS=2000H,IP=0003H ???执行:
jmp ax ???执行结果:ax=1000H,CS=2000H,IP=1000H jmp ax 在作用上可以理解为:mov IP,ax (把ax存的值赋给IP)
3、add
- 公式:
add ax,合法寄存器或者值 - 例如1:将ax加12H:
add ax,0012H - 例如2:将ax加上ax:
add ax,ax
🌻🌻🌻二、代码作用及示意图
🌲1、进入debug页面(tips:按下Alt+Enter 即可全屏)
注:输入位置前的- 是上一行回车自动生成的。
📢2、查看操作
(1)、查看CPU寄存器的内容:
-r 红色所指向的是:CS、IP 黄色所画线的是:当前CS:IP所指向内存单元所存放的机器码。 蓝色所划线的是:该机器码所对应的汇编指令
(2)、查看内存中的内容:
-d 段地址:偏移地址 例如:查看内存10000H处的内容:-d 1000:0 呈现结果分析:
- 其呈现从指定地址开始的128个内存单元的内容
- 最左一列是每一行的起始地址
- 右边矩形是每个内存单元中数据对应的可显示的ASCII码字符,不可显示以“.”代替。
- 格外注意:每行由0开始到F,即 0 1 2 3 4 5 6 7 8 9 A B C D E F(共16位)
- 查看指定范围内存中的内容:
-d 段地址:起始偏移地址 结尾偏移地址 - 例如:查看1000:0到1000:9即
-d 1000:0 9
📣3、修改操作
(1)、修改寄存器中的内容:
输入-r 寄存器名称 回车,在: 后输入“修改后的数据”再回车即可。 改完后可以再用-r 查看
(2)、暴力修改内存中的内容:
-e 起始地址 数据 数据 数据······ (改几个数据就写几个) 可以用-e 命令写入:数值,字符串(记得字符串带双引号"")
(3)、以命令提问的方式改内存中的内容:
-e 段地址:偏移地址 +Enter(回车)+光标在“.”后
- 1、若修改此位置的值,则输入数据,然后后空格。
- 2、若不修改此处的值,直接按空格键至下一处。
- 希望改写的内存单元改写完毕后,按Enter(回车)结束e命令。
注:小数点前是未修改的值。以及只要是按了空格键,即表示处理完成
🔥4、写入、查看、执行机器码(e、u、t)
用E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码。
(1)、查看内存中机器码的含义
-u 段地址:偏移地址
- 蓝色箭头所指:指令的地址
- 红色箭头所指:此处所存的机器指令
- 黄色箭头所指:对应的汇编指令
(2)、执行内存中的机器码
-t 注:指令执行后,ax被改写为1,IP变为IP+3(mov ax,0001 的指令长度为3),CS:IP指向下一条指令。
🍅5、以汇编指令的形式在内存中写入机器指令
-a 段地址:偏移地址 输入指令后回车,输入空+回车结束。
🌟🌟🌟三、实战题目
🍀1、将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
输入指令,一直-t ,记住次数即可。
🌍2、查看内存中的内容
PC机主板上的ROM中写有一个生产日期,在内存FFF0H到FFFFFH的某几个单元中,请找到这个日期并改变它。
- 我找到了,修改留给你们了。
??????忙碌的敲代码也不要忘了浪漫鸭!
👻👻👻我亲手拍的樱花
|