如何利用内嵌汇编程序实现使能和禁止中断

如何利用内嵌汇编程序实现使能和禁止中断,第1张

在Windows下开关中断指令属于特权指令,就算内嵌了也不会被执行的。

DOS下的话CLI是关中断,STI是开中断要实模式下的DOS,虚拟的DOS(就是Windows下的那个DOS窗口)还是会被Windows屏蔽掉。

#include<stdioh>

void main()

{

int a=2;

__asm{

lea eax,a

shl [eax],2

}

printf("a=%d\n",a);

}

扩展资料:

嵌 入式系统是基于特定用途的 , 以计算机技术为基础 ,其软硬件具备良好可裁剪性的专用计算机系统,适用于对功能、可靠性、成本、体积、 功耗有严格要 求的场合。它一般由嵌入式微处理器、 外围硬件设备、嵌入式 *** 作系统以及用户应用程序四个部分组成。从 20 世纪 60年代中期集成电路诞生至今,嵌入式系统应用已经有接近 40 年的发展历史。

通常来说,嵌入式系统具备以下特点:

(1)体积小,重量轻。

(2)结构简单、功耗低、可靠性高。

(3)便于规模化生产、价格相对低廉。

(4)模块化、芯片化。

(5)强调量身定做的原则。

参考资料来源:百度百科-嵌入式编译程序

movl $0x10,%edx

mov %dx,%ds

mov %dx,%es

mov %dx,%fs

改变的是CPU的寄存器的值,而全局描述符在内存中,怎么可能覆盖呢

全局描叙符需要在ds es fs装入一些值,CPU才知道在描叙符表中去使用哪个描叙符

而中断因为提供了中断号,等于告诉了CPU在描叙符表中去使用哪个描叙符

你混淆了“使用”和“改变”,这里都是“使用”,没有“改变”,中断描叙符的使用不用做什么,而全局描叙符的使用需要往ds es fs装入一些值

错误码和中断号是不同的,错误码为0表示“没有”错误码,trap_init函数中的那些数字才是中断号,它设置了中断号和处理函数的对应。第96页521第二段和第四段说明了错误码的来源,在进入中断处理前,CPU至少压入12字节,对某些中断,CPU会产生一个错误码压入

主程序调用写在其他asm中的子过程的方法

主程序文件名 mainasm

子过程文件名 subasm

子过程名 fun1

方法有:

1:

(1)在mainasm 文件中 在call fun1 之前的任意位置,(即使在data中也可以) include subasm

(2)在 subasm的子过程之前可以使用 code和data 也可以不加

列如:

data

n1 DWORD 2

code

fun1 PROC NEAR32

add eax ,n1

ret

fun1 ENDP

或者:

fun1 PROC NEAR32

add eax ,eax

ret

fun1 ENDP

(3)直接编译mainasm,连接mainobj 即可

注: subasm 最后一定不能有END

2:(1)在mainasm 文件中 的data 之前 EXTRN fun1:NEAR32 ,也可以用 fun1 PROTO NEAR32 声明函数

(2)在subasm 的fun1 PROC NEAR32之前,或者fun1 ENDP 之后 PUBLIC fun1

subasm 末尾需要 END

例如:

386

MODEL FLAT

PUBLIC fun1

data

n1 dword 2

code

fun1 PROC NEAR32

add eax ,n1

ret

fun1 ENDP

end

(3)分别编译mainasm,subasm。连接连接mainobj和subobj

总结,若是其他asm文件中的是宏,则在主文件,或者子过程文件中 直接 include 宏nameasm 即可

若是这些工作做得没有差错,编译或者连接时出现差错,则最大可能性是:你的子过程名写错了,解决的办法是

把所有出现子过程名的地方重新复制粘贴一遍。

ARM体系中的SWI指软件中断指令。通过SWI指令可以在用户态(用户程序运行时)触发一个软中断,将处理器从用户态切换到内核态并执行内核中指定的处理程序来完成期望的 *** 作。

SWI指令在ARM体系的指令系统中是一个专门的指令,其具体实现方式会根据具体的处理器架构和 *** 作系统环境而有所不同。一般来说,SWI指令需要使用汇编语言或特定的系统调用接口调用。

在ARM体系中,SWI指令在处理器的异常向量表中有专门的条目,用于响应软中断请求。当用户程序调用SWI指令时,处理器会跳转到异常向量表中的对应条目,并开始执行相应的处理程序。这个过程会涉及到处理器状态的切换、内核栈的切换和保存、中断请求等等 *** 作。

总的来说,SWI指令是ARM体系中实现软中断功能的关键指令。在Linux和Android等 *** 作系统中,SWI指令被广泛用于实现系统调用和进程间通信等功能。

以上就是关于如何利用内嵌汇编程序实现使能和禁止中断全部的内容,包括:如何利用内嵌汇编程序实现使能和禁止中断、linux0.11/ asm.s有些问题不太明白,懂内核的帮忙解答一下,谢了!、汇编 请问调用外部(其它)ASM文件里面的子过程应该怎么调等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10121545.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存