x86

x86汇编搁置的地方

x86

Posted by Bruce Lee on 2023-12-12

强调

在安装程序中,要注意安装的目标程序和目标地址的安全空间大小,使用movsb类似的指令时,要注意cx寄存器的存储大小和转移目标程序的大小

在编写中断例程中,要注意处理程序里面的jmp指令,必须全部是相对跳转指令,所有的标号,都要注意,其使用的时候,只有相对跳转指令里面使用标号才合法,其他的使用,都有漏洞

关于,调用别的处理程序的时候(中断例程),可以看情况,是否还需要将寄存器保留入栈,有些严重处理问题,在中断过程发生后,就没必要再将cpu的控制权限交给调用程序,直接返回系统,无需入栈保存数据

关于子程序保留入栈的寄存器,当使用寄存器传参时,和保留返回参数的寄存是无需入栈保留原始数据的,入栈的是不含参数任务,但在子程序中使用了的寄存器

还是要注意模块化的编程思想,在汇编编程中,尤为重要,要强调模块之间的弱耦合,突出其独立性,减轻调试,测试负担,提高可读性,增加健壮性,提高维护性

最后的技巧

-机器码中偏移地址在前,段地址在后的原因是为了实现更高效的硬件电路,大多数情况下都是段内转移,译码阶段
得到操作码后,紧接着的就是段内偏移地址,更高效。

几月前遗留的舞

内中断:
0号中断:除法中断,可以自己编写
1号中断:单步中断,由标志寄存器TF位来标识是否执行单步中断程序
中断向量表:0000:0000~0000:03FF,1KB 256个0000:0200~0000:02FF全空,OS和任何程序都不占用
响应中断的特殊情况:ss,sp联合
中断预防:在修改中断向量表的时候,应该做预防措施,将可屏蔽中断屏蔽掉,将IF标志位,置0,不相应中断

int 7ch中断: x86 架构的计算机上,INT 7Ch 中断向量通常用于定时器中断。这个中断向量是计时器中断的默认中断向量,它位于中断向量表的第 124 号位置(0x7C 是 124 的十六进制表示)。

定时器中断是计算机系统中的一种硬件中断,它由计时器芯片(通常是 PIT,Programmable Interval Timer)生成,并以固定的时间间隔触发。当计时器中断发生时,CPU 将暂停当前正在执行的程序,然后跳转到预先设置的中断处理程序,也就是 INT 7Ch 中断例程。

在 DOS 和一些早期的操作系统中,程序员可以通过设置定时器芯片的频率和模式来触发定时器中断,以执行周期性的任务,例如定时刷新屏幕、处理输入、或执行后台任务。

由于 INT 7Ch 中断例程在实际应用中可用性较高,因此它可能被操作系统或其他软件用于各种用途。不过,具体的功能和用途会根据操作系统和应用程序的不同而有所变化。

int 10h中断例程:与屏幕输出相关,BIOS提供
BIOS与DOS提供的中断例程都是ah传递功能号
int 10h:ah 2,置光标 bh 0 页数 dh 行 dl 列
ah 9 光标处显示字符 al 字符 bl 属性 bh 第几页 cx 重复个数

int 21h中断例程,ah 4ch 程序返回功能,al 0 返回值0
ah 9 光标处显示字符串($结尾),ds:dx指向字符串首地址

各种寄存器都与CPU的三线链接,在操控的时候,当作内存看待,把它们总地看成一个由若干存储单元组成的逻辑存储器
-接口卡上的接口芯片
-主板上的接口芯片
-其他芯片

向芯片发送端口读写,寄存器统一编址,
直接读写:内部寄存器,内存单元,端口,cpu最多i党委64K个不同端口,端口地址范围0-65535
in out
只能在ax,al中读写端口数据
0-255 in al,20h
256-65535

CMOS RAM芯片,内部实时钟,128个存储单元
0-0dh位时间信息,其他:系统配置信息,供系统启动时BIOS读取,
芯片由70h地址端口,71h数据端口

shl,shr指令,最后移出的一位存储在CF寄存器钟
移位数大于一,必须存储在cl寄存器中


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. All the images used in the blog are my original works or AI works, if you want to take it,don't hesitate. Thank you !