商务网站开发设计结论,微信报名小程序怎么制作,人工智能培训机构哪个好,建个网站怎么做推广今天要干什么#xff1f;
初步了解汇编语言使用汇编重新写个昨天的镜像文件继续开发
一:
什么是电信号#xff1f;
电脑的处理中心是CPU#xff0c;即“central process unit”的缩写#xff0c;翻译成中文就是“中央处理单元”#xff0c;顾名思义#xff0c;他就是…今天要干什么
初步了解汇编语言使用汇编重新写个昨天的镜像文件继续开发
一:
什么是电信号
电脑的处理中心是CPU即“central process unit”的缩写翻译成中文就是“中央处理单元”顾名思义他就是处理中心。如果我们吧背的原件当作中心来使用的化那他就叫做CPU了所以无论什么时候CPU都总是处理中心。不过这个CPU除了与别的电路进行电信号交换以外什么都不会而且对于电信号只有0开或关1 两种状态就是个集成电路版只是忠实的执行电信号给他的指令输出相应的电信号。
0000 0000 0000 0000 0000 0100 1010 0010 这32个电信号的集合来表示1186这个整数。注用二进制表示1186的话就是0100 1010 0010 虽然二进制与电信号有很好的一一对应关系但他有一个缺点那就是位数太多了举个例子来说如果我们把1234写成二进制数就成了0100 1101 0010长达11位而写成十进制数只用4位就够了。因为这样太浪费内存了所以计算机业界普遍使用十六进制数。十六进制数的1234写成十六进制就是4D2只用3位就够了。
二进制数和十六进制数对照表
0000 - 0
0001 -1
0010 - 2
0011 - 3
0100 - 4
0101 -5
0110 - 6
0111 -7
1000 - 8
1001 -9
1010 -A(10)
1011 -B(11)
1100 -C(12)
1101 -D(13)
1110 -E(14)
1111 -F(15)
十六进制转换4D2 0100 1101 0010
用汇编语言再写一个hello.img
作者给的汇编工具不能用了使用DosBox
DOSBox, an x86 emulator with DOS https://www.masm32.com/download.htm 在D盘下创建文件masm包含:4个文件masm.exe,link.exe,debug.exe,exe2bin.exe
文件1masm.exe:汇编程序用于汇编源程序(*.asm),得到目标程序(*.obj);
文件2link.exe:连接程序用于连接目标程序得到可执行程序(*.exe);
文件3debug.exe:调试程序用于调试可执行程序 在DOSBox安装路径双击DOSBox 0.74-3 option.bat 会跳出文件dosbox*.conf,在文件末尾填入以下两行后保存关闭[axtoexec]后面
其中d:\masm位存放masm.exe、link.exe、debug.exe等文件,第一行指定masm目录第二行进行c盘
mount c d:\masm
c:
常用的命令
mount 虚拟盘符本地路径mount c d:\masm # 将本地目录d:\masm挂在为虚拟C盘
dir :常用参数 /w仅显示文件名/p分页显示*.exe筛选文件。例子:dir /w *.exe # 列出当前目录所有exe文件
del:删除文件 del old.exe # 删除单个文件
deltree: 删除目录及子文件 # deltree temp # 强制删除temp目录
debug启动debug模式 # 输入debug进入调试环境常用命令
R:AX # 查看/修改寄存器
D:05 #显示DS段0-5单元的数据查看内存
E: 1000 ‘Hello’ #在内存地址1000处写入字符串写完再用d 1000查看测试
U:050 # 将0-50H地址的机器码转为汇编指令
T #执行当前CS:IP 指向的指令单步执行
G : 运行程序debug hello.exe后输入g回车即可看到hello world
q:推出debug
汇编程序编译:
masm hello.asm # 生成obj文件
Link hello.obj; # 生成exe文件 例子手打一下吧手写一个hello.asm文件在运行上面的命令 快捷键
AltEnter:切换全屏模式
CtrlF10: 释放鼠标锁定
CtrlF4刷新虚拟驱动器更新挂载目录内容
CtrlF7:降低模拟速度解决光标闪烁问题
二:汇编重新编写脚本生成img镜像文件 就是把上面所有的16进制文件在重新写一遍加上符合汇编格式的0x开头这样要写的内容太多了所以优化了一个脚本去写
按照作者的讲述流程 根据bat脚本 使用作者给的nask.exe 文件去执行nas文件 bat脚本文件
..\z_tools\nask.exe helloos.nas hellosc.img
作者给的nask文件在z_tools文件夹中 “;命令”这个是注释命令相当于C语言或者C中的”//”
DB指令的新用法我们居然可以用它写字符串。在写字符串的时候汇编语言会自动查找字符串中每一个字符所对应的编码然后把他们一个字节一个字节的排列起来。这个功能非常方便。
DW指令和DD指令他们分别是”data word“和”data double-word“的缩写是DB指令的”堂兄弟“。Word的本意是”单词“但在计算机汇编语言中word指的是16位的意思也就是2个字节。”double-word“是32位的意思也就是4个字节。 RESB 0x1fe-$.这个美元符号的意思可以告诉我们这一行现在的字节数如果严格来说有时候他还会有别的意思在这个程序里我们已经在前面输出了132个字节所以这里的$就是132.因此nask先用0x1fe减去132得出378这一结果然后连续使出378个字节的0x00.
$相当于一个检查固定长度的值因为输出的”hello world“内容有可能会变化中间要输出的0x00字节数也会随之变化。为什么呢必须要保证软盘的第510个字节即ox1fe字节开始的地方是55 AA。 注释专业术语
TAB 4 .。。。。。。 文本编辑器调整TAB键的宽度
FAT12格式。。。。。FAT12 Format用windows或MS-DOS格式化出来的软件就是这种格式。我们的helloos也是这种格式其中容纳了我们开发的操作系统。这个格式兼容性好在window上也能用
启动区。。。。。。。boot sector软盘第一个的扇区称为启动区。什么是扇区呢计算机读写软盘的时候并不是一个字节一个字节的读写的而是以512字节为一个单位进行读写。因此软盘的512字节就称为一个扇区。一张软盘的空间共有1440KB也就是1440*10241474560字节除以512得2880这也就是说一张软盘共有2880个扇区。
为什么第一个扇区称为启动区呢计算机首先从最初一个扇区开始读软盘然后去检查这个扇区最后两个字节的内容。 如果这最后两个字节不是55 AA计算机会认为这张软盘上没有所需的启动程序就会报一个不能启动的错误也许有人问为什么一定是55 AA呢那是当初的设计者定的笔者也没法解释。如果计算机确认了第一个扇区的最后两个字节正好是55 AA那他就认为这个扇区的开头是启动程序并开始执行。
IPL。。。。Initial program loader的缩写启动程序加载器。启动区只有区区512个字节实际的操作系统不会这么小跟本装不进去几乎所有操作系统都是把加载操作系统本身的程序放在启动区里面的。有鉴于此有时也将启动区称为IPL 启动......(bootstrap)boot这个词本是长靴boots的单数形式。他与计算机的启动有什么关系呢
一般应该将启动称之为start的。Bootstrap在网络上有自力更生完成任务这种意思也可以叫做操作系统的自动启动机制被称为bootstrap方式。 三继续开发
对原有的helloos.nas进行了再次开发其中用到了一些新的指令 1:“MOV AX,0”,相当于”AX0;”这样一个赋值语句。同样”MOV SS,AX”就相当于”SSAX;“,相当于变量空间赋值语句。
2再来说说AX和SS是什么。CPU里有一种名为寄存器的储存电路相当于机器语言中的变量具体有代表性的寄存器有8个.
AX--accumulator,累加寄存器
CX-counter 计数寄存器
DX-data 数据寄存器
BX-base基址寄存器
SP-stack pointer基址指针寄存器
BP-base-pointer基址指针寄存器
SI-source index源变址寄存器
DI-destination index目的变址寄存器
这些寄存器全都是16位寄存器因此可以存储16位的二进制数 参考链接 30天自制操作系统——第二天_30 天自制操作系统-CSDN博客
初学者使用DOSBox编写汇编程序_dos box 中masm指令时出现1 severe errors怎么办-CSDN博客
汇编语言学习篇2——MASM的环境搭建win10与Ubuntu1604下的配置【有问题待更正】-CSDN博客