汇编int中断利用堆栈 [问题点数:50分]

Bbs1
本版专家分:0
结帖率 0%
Bbs9
本版专家分:65919
Blank
红花 2014年5月 其他开发语言大版内专家分月排行榜第一
2014年4月 其他开发语言大版内专家分月排行榜第一
2014年3月 其他开发语言大版内专家分月排行榜第一
2014年1月 其他开发语言大版内专家分月排行榜第一
2013年12月 其他开发语言大版内专家分月排行榜第一
2013年3月 Windows专区大版内专家分月排行榜第一
2010年7月 其他开发语言大版内专家分月排行榜第一
2010年3月 其他开发语言大版内专家分月排行榜第一
2007年6月 其他开发语言大版内专家分月排行榜第一
2007年5月 其他开发语言大版内专家分月排行榜第一
2006年8月 其他开发语言大版内专家分月排行榜第一
2006年5月 其他开发语言大版内专家分月排行榜第一
2005年7月 其他开发语言大版内专家分月排行榜第一
2003年4月 其他开发语言大版内专家分月排行榜第一
Blank
黄花 2016年3月 其他开发语言大版内专家分月排行榜第二
2014年10月 其他开发语言大版内专家分月排行榜第二
2013年7月 Windows专区大版内专家分月排行榜第二
2013年5月 其他开发语言大版内专家分月排行榜第二
2013年4月 其他开发语言大版内专家分月排行榜第二
2012年11月 其他开发语言大版内专家分月排行榜第二
2012年6月 其他开发语言大版内专家分月排行榜第二
2011年11月 其他开发语言大版内专家分月排行榜第二
2011年9月 其他开发语言大版内专家分月排行榜第二
2010年6月 其他开发语言大版内专家分月排行榜第二
2007年4月 其他开发语言大版内专家分月排行榜第二
2006年12月 其他开发语言大版内专家分月排行榜第二
2006年11月 其他开发语言大版内专家分月排行榜第二
2005年6月 其他开发语言大版内专家分月排行榜第二
2003年5月 其他开发语言大版内专家分月排行榜第二
2003年3月 其他开发语言大版内专家分月排行榜第二
Blank
蓝花 2013年11月 其他开发语言大版内专家分月排行榜第三
2013年8月 其他开发语言大版内专家分月排行榜第三
2012年12月 其他开发语言大版内专家分月排行榜第三
2012年9月 其他开发语言大版内专家分月排行榜第三
2012年8月 其他开发语言大版内专家分月排行榜第三
2012年5月 其他开发语言大版内专家分月排行榜第三
2011年12月 其他开发语言大版内专家分月排行榜第三
2010年12月 其他开发语言大版内专家分月排行榜第三
2010年9月 其他开发语言大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
其他相关推荐
汇编中断知识之INT 1CH
最近在编写汇编程序遇到一个使用INT 1CH的程序,INT 1CH是实现定时或周期性的工作,难道INT 1CH就像INT 21H一样直接调用它里面的功能号吗?下面就通过一个程序简单的看看传说中的INT 1CH的. 这个程序是实现屏幕背景颜色1秒钟变换一次的实验. 1.INT 1CH中断 INT 1CH其实是调用INT 21H中的25号功能:置中断向量AL=中断号,DS:DX=入口,同时I
8086汇编中断总结之int中断
今天主要总结int指令所引起的中断int的一般用法是int n,这个n就是指中断类型码如果对中断概念一点没有请进入: https://blog.csdn.net/qq_37232329/article/details/79876197废话不多说先贴第一个程序,这个例子是王爽老师的《汇编语言》第三版p253页13.2上的,极品8086汇编教程,值得购买:)但这个例子在书上是分离的,如果是和我一样用...
中断int指令、端口 x86汇编
导读: 介绍,第一部分介绍内中断,单步中断、 第二部分,int指令的中断以及BIOS和DOS中断服务函数 第三部分,介绍了端口 中断中断的产生有如下情况的时候会产生中断: 1. 除法错误 2. 单步执行 3. 执行into指令 4. 执行int指令 8086CPU用中断类型号来表示中断来源,一共256种中断类型号。 中断向量表在8086机器上中断向量表存放在内存地
int 0x13 中断理解
BIOS中断INT 0x13中, ah=0x02,即为读磁盘扇区到内存,利用这二号服务即可读入setup模块。 调用此功能将从磁盘上把一个或更多的扇区内容读进存贮器。因为这是一个 低级功能,在一个操作中读取的全部扇区必须在同一条磁道上(磁头号和磁道号 相同)。BIOS不能自动地从一条磁道末尾切换到另一条磁道开始,因此用户必须 把跨多条磁道的读操作分为若干条单磁道读操作。 入口参数:
8086汇编基础 使用Int21h中断例程中的9号子程序实现hello world
慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 assume cs:code data segment db 'hello world','$' ;$不显示,但是要作为要显示字符串的结束标志,必须有 data ends code segment start: mov ah,
INT 15中断功能
INT 15h, AX=E820h - Query System Address Map Real mode only. This call returns a memory map of all the installed RAM, and of physicalmem
汇编——INT 21h 中断的使用
http://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 例如:需要键盘输入,并且回显。 AH的值需要查表取得,表在下面 指令:MOV AH,01      INT 21H 通过这样两...
关于汇编语言中INT10中断的详细功能
关于汇编语言中INT10中断的详细功能,功能号:00H,功能:设置显示模式;功能号01H,功能:设置光标形状 ;功能号:02H,功能:用文本坐标下设置光标位置 ------
利用BIOS 中断INT 0x10显示字符和字符串
注:以下程序系原创,使用AT&T格式汇编来调用BIOS 0x10中断,如有错误,欢迎指正。表达能力较差,写的不好,但若能帮助一二访客,幸甚。 使用BIOS 显示服务(Video Service)--INT 10H,下面主要探究字符显示模式。 BIOS中断在保护模式下是不能用的,故不能在Linux中测试,所以写了个简单的boot loader,并在虚拟机中运行程序。 1.以电传
使用BIOS中断显示字符串笔记(int 10h 13号中断)
BIOS的10H中断的13号中断用于显示字符串,参数为: 1、AH=13H 2、AL=显示方式       如果AL=0,表示目标字符串仅仅包含字符,属性在BL中包含,不移动光标       如果AL=1,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标       如果AL=2,表示目标字符串包含字符和属性,不移动光标       如果AL=3,表示目标字符串包含字符和属性,移
汇编语言中断程序实例——定时小程序
;计算机在系统加电期间,把系统定时器初始化为每55ms发出一次中断请求。CPU在相应定时中断请求后转入08H号中断处理程序。 ;BIOS提供的08H号中断处理程序中有一条中断指令“INT 1CH”。所以每秒要调用1000/55≈18.2次1CH号中断处理程序。 ;而BIOS的1CH号中断处理程序实际上并没有执行任何工作,只有一条中断返回指令(IRET) ;这样安排的目的就是为应用程序留下一个软
汇编学习--7.16--int指令
int指令 中断信息可以来自CPU的内部和外部,当CPU的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。 上一章讲解了0号中断和单步中断,这一章将讲解另一种重要的内中断,由int指令引发的中断。     int指令 格式:int n n为中断类型码,它的功能是引发中断过程。   CPU执行int n指令,相当于引发一个n号中断中断过程,执行过程如下
对于int $0x80引发的问题
------------------------------------------------------软中断-------------------------------------------------------------------------------------- 在Linux 的汇编语言中(AT&T,x86汇编两种语法的一种),int 指令被称为软中断指令 ,可以用此指令
51单片机外部中断流水灯(汇编语言)
设计一个外部中断触发流水灯系统:当外部中断来临时,启动流水灯,即从P2口的LED循环点亮。可以从protues中看到结果
键盘I/O中断调用(INT 16H)
转自https://zhidao.baidu.com/question/233998859.html 键盘I/O中断调用有三个功能,功能号为0, 1, 2,且必须把功能号放在AH中。 (1)0号功能调用 格式:MOV AH, 0 INT 16H 功能:从键盘读入字符送AL寄存器。执行时,等待键盘输入,一旦输入,字符的ASCII码放入AL中。若AL=0,则AH为输入的扩展码。
汇编语言--int指令
from: http://www.cppblog.com/luqingfei/archive/2010/08/04/122174.html int指令 中断信息可以来自CPU的内部和外部,当CPU的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。 上一章讲解了0号中断和单步中断,这一章将讲解另一种重要的内中断,由int指令引发的中断
汇编使用堆栈传参是子程序获取参数的写法
程序加载后堆栈情况: ss为堆栈的首地址, sp为堆栈的长度,当sp=0时堆栈满;入栈时向低地址伸展(sp先减2再写值),出栈时向高地址伸展。 使用bp寄存器 bp为基址寄存器,一般在函数中用来保存进入函数时的sp的栈顶基址sp是栈顶指针,它每次指向栈顶。每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值。像下面这样:在函数进入时:push bp  
汇编各种中断
BIOS中断:1、显示服务(Video Service——INT 10H)00H —设置显示器模式 01H —设置光标形状 02H —设置光标位置 03H —读取光标信息 04H —读取光笔位置 05H —设置显示页 06H、07H —初始化或滚屏 08H —读光标处的字符及其属性 09H —在光标处按指定属性显示字符 0AH —在当前光标处显示字符 0BH —设置调色板、背景色
int $0x80系统调用的idea
1、基础知识      用户态和内核态           一般现代CPU都有几种不同的指令执行级别,Linux总共划分为4个指令执行级别:内核运行在0级别上,1,2级别默认不运行,用户程序运行在3级别上。           在内核指令执行级别上,代码可以执行特权指令,访问任意的物理地址。           在用户指令执行级别上,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动
王爽《汇编语言》实验15——安装新的INT 9中断例程
安装一个新的 INT 9 中断例程,功能:在 DOS 下,按下"A"后,除非不再松开, 如果松开,就显示满屏幕的"A",其他的键照常处理.
汇编指令 int 21 h 调用
表:DOS系统功能调INT 21HAH功能调用参数返回参数0程序终止(同INT 20H)CS=程序段前缀1键盘输入并回显AL=输入字符2显示输出DL=输出字符3异步通迅输入AL=输入数据4异步通迅输出DL=输出数据5打印机输出DL=输出字符6直接控制台I/ODL=FF(输入)AL=输入字符DL=字符(输出)7键盘输入(无回显)AL=输入字符8键盘输入(无回显)AL=输入字符检测Ctrl-Break...
汇编堆栈平衡的几种方式
任何程序在运行过程中都需要使用堆栈,操作系统为每一个程序(进程及线程)设置一个堆栈。在使用高级语言编程时,源程序中使用的函数调用、局部变量都要用到堆栈,由编译器来负责生成有关的机器指令。我的理解,堆栈就是维护当前线程中运行状态的一个数据结构,这种状态包括:需要传递的变量,函数的返回地址,局部变量等等。 与堆栈相关的 3 个寄存器是:SS, ESP, EBP。 ESP 寄存器中的内容作为堆栈的当
王爽《汇编语言》第三版 编写INT9中断例程
代码如下: assume cs:code data segment dw 0, 0 data ends code segment start: mov bx, 0 mov es, bx mov ax, data mov ds, ax push es:[9*4] pop ds:[0] ...
王爽 汇编 实验15:安装新的int9中断例程
assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset int9start mov ax,0 mov es,ax mov di,0204h mov cx, offset int9end-offset int9start rep movsb mov ax,es:[9*4] mov dx,es
汇编】自定义9号中断(键盘输入处理中断
在屏幕上交替显示a~z,按ESC字体变绿色   [plain] view plaincopy assume cs:code,ds:data    data segment      dw 0,0;存放原9号中断的偏移和段地址  data ends    code segment  ;;;;;;;;;;;;;;;;;;;;;;  ;主程序  ;;;;;;;;;;;;;;;;
汇编语言21号中断
INT 21是计算机中断的一种,不同的AH值表示不同的中断功能。 举个例子,如果在DOS下面,键入两行代码: MOV AH, 02HINT 21H 它代表的意思是在屏幕上显示输出。 这里有一份table,收纳了全部的INT 21中断类型。 表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数
170504 汇编-外中断和键盘输入的处理
1625-5 王子昂 总结《2017年5月4日》 【连续第215天总结】 A. 汇编语言 15章 20% B. CPU在计算机系统中,除了要执行指令、进行运算以外,还需要控制外部设备,例如鼠标、键盘等等 那么就有两个问题: CPU如何监听外设的消息 CPU从何处得到外设的数据 PC系统的接口卡和主板上有各种接口芯片,芯片内部有若干寄存器,CPU将它们作为端口来访问 因此,CPU通
INT 10中断功能
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考
汇编 中断调用表 (中断向量表)
                  .中断 0: 除数为0错                 中断 1: 单步中断                      中断 2: 不可屏蔽中断 NMI     中断 3: 断电中断 (CCH)        中断 4: 溢出中断                        中断 5: 屏幕打印中断
汇编语言-----字符串的输入利用int 16h读取键盘缓冲区
学到这里,已经感觉有点跟不上王爽老师的步伐了,因为有些
汇编程序:用中断输入并显示
任务-用中断输入并显示 利用dos系统功能调用,将键盘输入的小写字母转换成大写字母后输出显示,输入非小写字母时,什么也不显示,等待其他输入;输入‘$’字符时结束。 注意要在程序中加入必要的注释。 assume cs:code code segment begin: stop: mov ax, 4c00h int 21h code ends end ...
汇编中的int 10h 与int 19h
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序。使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用。显示服务 (Video Service:int 10h)00H:设置显示器模式01H:设置光标形状02H:设置光标位置03H:读取光标信息04H:读取光笔位置05H:设置显示页06H、07H:初始化或滚屏08H:读光标处的字符及其 属性09H...
汇编语言:用中断输入并显示
利用dos系统功能调用,将键盘输入的小写字母转换成大写字母后输出显示,输入非小写字母时,什么也不显示,等待其他输入;输入‘$’字符时结束。 assume cs:code, ss:stack stack segment db 100H dup (0) stack ends code segment start: input: mov ah,0 int 16h ...
汇编语言----中断指令
中断是输入/输出程序中常用的控制方式,是指计算机暂停当前正在执行的程序而转去执行处理某事件的中断服务程序.当中断服务程序执行完毕,再恢复执行被暂时停止的程序 (1)中断指令   格式 : INT n   功能 : 产生一个中断类型号为n的软中断   指令完成的操作   a.标志寄存器入栈   b.断电地址入栈 : cs先入栈,然后ip入栈   c.从中断向量表中获取中断服务程序入口地
汇编Int21中断详解
关于汇编语言中用得最多的中断Int21在AH为不同值时的详细资料。
汇编中断大全
汇编中断大全BIOS中断:1、显示服务(Video Service——INT 10H) 00H —设置显示器模式 01H —设置光标形状 02H —设置光标位置 03H —读取光标信息 04H —读取光笔位置 05H —设置显示页 06H、07H —初始化或滚屏 08H —读光标处的字符及其属性 09H —在光标处按指定属性显示字符 0AH —在当前光标处显示字符 0BH —设置
汇编--学习笔记(九)-堆栈
堆栈:“先进后出”的存储区,存在于堆栈段中,SP在任何时候都指向栈顶。一、PUSH指令(字入栈)1、格式:PUSH 源操作数(字)PUSH AX ;AX进栈2、功能 (1)首先将栈顶指针减2,即(SP)-2=>SP; (2)然后将源操作数(字)=>((SP)+1,(SP))。(高字节,低字节) 即执行操作: (SP)<– (源操作数)
汇编------中断
中断 汇编
Intel汇编程序设计-高级过程(上)
Intel汇编程序设计-高级过程
BIOS功能调用之滚屏与清屏
BIOS功能调用之滚屏与清屏每次启动Bochs的时候,显示出来的那些内容有没有干扰你的眼球呢?其实我早就想清屏了,今天就来探索一下怎样利用BIOS中断来清屏。清屏都有哪些方法?1.空格填充法如果单就”清屏幕”这个问题而言,解决办法有很多,最最“勤劳”的方法就是在屏幕上显示25*80的空格。除了这个,还有什么方法呢?对了,BIOS中断。它山之石,可以攻玉。2.滚屏与清除窗口调用 功能号:06H/0
汇编实验报告 学习使用DOS功能调用和BIOS中断编写键盘处理程序
一:要求:编写汇编语言程序,使用DOS中断接收键盘输入,每次以不回显的方式接收一个字符,将其以十六进制字符串的形式显示。例如,键盘输入“1”时,屏幕输出“30”。当接收到ESC键时,程序结束。 使用BIOS中断接收和处理键盘输入 要求: 编写汇编语言程序,使用BIOS中断接收和显示键盘输入。只要求能够处理控制键(如Ctrl、Alt和Shift等)和大小写字符键(如A、z等)。显示方式如下: (1)当按下A、b、z等字符键时,就显示字符本身; (2)当同时按下控制键和字符键时,显示控制键标志及字符。例如: ① 按下Ctrl键和B时,显示Ctrl-B; ② 按下Alt键和k时,显示Alt-k; ③ 按下Ctrl、Shirt键和z时,显示Ctrl-Shift-z; ④ 按下Ctrl、Alt键和z时,显示Alt-Alt-z; ⑤ 按下Shirt、Alt键和z时,显示Alt-Shift-z; ⑥ 按下Ctrl、Shirt、Alt键和z时,显示Ctrl-Alt-Shift-z; (3)对于Ctrl键、Shirt键和Alt键,不要求区分左、右键; (4)当按下Esc键时,程序结束; (5)不要求对双态键(如Caps Lock、Num Lock和Scoll Lock等)、功能键(如F1、F2等)和功能请求键(如Print Screen等)处理
基于堆栈的计算器
简单的基于堆栈的计算器 (1)接受用户的输入,输入形式有两种:数字、运算符。 (2)数字保存在堆栈中(LIFO类型内存),将数字推入堆栈。 (3)对堆栈顶端的两个数字出栈,应用运算符,若堆栈只有一个数字,将它重复,应用运算符。将计算结果,压入堆栈。 (4)使用逆波兰表示法(后缀法),例:“4+5”等价于“4 5 +”、“4+5-2”等价于“4 5 + 2 - (5)实现4种运算”+ - * /”
Bios int 中断手册查询
来源Wiki: BIOS interrupt callEmbedded BIOS User’s Manual
DEBUG中T命令的堆栈变化
最近在论坛看到两三个对于堆栈的疑问,也引发了我自己来探索的兴趣,本来我知道T命令调试是使用了单步中断来实现的,也就是引起了程序自陷来中断正在执行的程序,估计通过类似技术具体实现了这一过程吧。某篇帖子提到堆栈的分配会多分配5个字的单元,为什么呢?我也非常好奇,所以就对这个问题进行了实例分析,在T命令后,对堆栈的内容进行查看。一般,堆栈中存放的多是各个寄存器的值以保持程序环境,通过R指令的调试,知
第六篇 键盘中断与应用程序读取键盘缓冲区
这篇博文主要介绍在X86下键盘的中断过程,以及应用程序如何利用中断读取键盘缓冲区内容。   一、撰写该篇博文的背景介绍 在我们全屏看视频时,按下Esc键,播放器还原或者最小化;在利用其他软件的时候,我们会 发现,设置可以设置打开或关闭程序的快捷方式...... 应用程序为什么可以根据键盘的指示工作?又是如何工作的呢?   二、对于键盘中断的介绍 当我们在按下按键时,键盘会把按键的扫
举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程
研讨:举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。
int 9和int 16h中断-键盘输入、读取
8086PC机当中,键盘的输入将会引发9号中断,BIOS提供了int 9的中断例程。CPU在9号中断发生之后,会去执行int 9中断例程,然后从60h端口当中读取出扫描码,并且将其转换为相应的ASCII码和状态信息,存储在内存的指定的空间(键盘缓冲区或状态字节)当中 一般的键盘输入,在CPU执行完int 9 中断例程之后都放到了键盘缓冲区当中,键盘缓冲区有16个字单元,可以存储15个按键扫...
王爽《汇编语言》实验13——编写、应用中断例程
(1)编写并安装int 7CH中断例程,功能为显示一个用0结尾的字符串。 (2)编写并安装int 7CH中断例程,功能为完成loop指令的功能。 (3)补全程序,分别在屏幕的2、4、6、8行显示4句英文诗。
INT 15h系列介绍
本文系转载,原文地址:http://www.uruk.org/orig-grub/mem64mb.htmlINT 15h, AX=E820h - Query System Address Map Real mode only. This call returns a memory map of all the installed RAM, and of physical memory ranges reserved by the BIOS. The address map is
汇编基于PC机的8254日时钟中断的字符串动态显示——时:分:秒
汇编基于PC机的8254日时钟中断的字符串动态显示——时:分:秒效果图如下: 如何实现这种效果呢?很简单,只需要把以下代码复制一遍运行就可以了.486 DATA SEGMENT USE16 OLD1C DD ? ; SAVE THE OLD 1C INT ICOUNT DB 18 ;18*55MS = 990MS 1S COUNT DB 1 ;C
汇编语言》学习(十三)int指令
int指令是X86汇编语言中最重要的指令之一。它的作用是引发中断,调用“中断例程”(interrupt routine)。本文将介绍int指令的基本原理和应用,以及BIOS和DOS系统的中断例程。 一、int指令的原理 1,指令原型 int n 注:     1)n 表示中断号,也可以称为中断类型码。n是一个字节大小的正整数,范围为“0 - 255”。 2)执行“int n”时
中断描述符表的初始化
Linux内核在系统初始化要进行大量的初始化工作,其与中断相关的工作有,初始化可编程控制器8259A;将中断描述符表的起始地址装入IDTR寄存器,并初始化表中的每一项,     用户进程可以通过INT指令发出 一个中断请求向量在0~255之间。为了防止用户使用INT指令模拟非法的中断和异常,必须对中断描述符表进行谨慎的初始化。其措施之一就是将中断门或陷阱门中的请求特权级DPL域置为0,如果用户进
现代操作系统教程
操作系统
系统调用(int 0x80)详解
1、系统调用初始化 在系统启动时,会在sched_init(void)函数中调用set_system_gate(0x80,&system_call),设置中断向量号0x80的中断描述符: #define set_system_gate(n,addr)  _set_gate(&idt[n],15,3,addr) 其中15表示此中断号对应的是陷阱门,注意,这个中断向量不是中断门描述符
关于软中断原理,以及中断栈的概念等
中断栈与内核栈的话题更多地属于内核的范畴,所以在《深入Linux设备驱动程序内核机制》第5章“中断处理”当中,基本上没怎么涉及到上述内容,只是在5.4节有些许的文字讨论中断栈在中断嵌套情形下可能的溢出问题。 本贴在这个基础上对内核栈与中断栈的话题做些补充,讨论基于x86 32位系统,因为64位系统下Linux内核关于栈的支持原理上是相同的,不过也有些特性属于64位特有的,比如IST(Inte
int指令---汇编学习笔记
int指令 int指令可以引发中断 13.1 int指令 int指令格式:int n,n为中断类型码,它的功能是引发中断过程。 CPU执行int n指令,相当于引发一个n号中断中断过程,执行过程如下。 取中断类型码n 标志寄存器入栈,IF=0、TF=0 CS、IP入栈 (IP)=(n∗4),(CS)=(n∗4+2)(IP)=(n∗4),(CS)=(n∗4+2)(IP)=(n*4)...
利用BIOS INT 0x13读取软盘
版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] babyos将使用的引导过程软盘的结构利用BIOS 中断读取软盘相对扇区号的计算读取一个扇区读取任意扇区给定相对扇区号 注:以下程序为原创,若发现任何BUG,欢迎指正;若有问题,欢迎交流;权利归原作者所有,若转载,请注明出处;若能有益于一二访客,幸甚。 昨天学习了VGA显示的一些东西
51单片机外部中断INT0实例(汇编程序)
;普中51开发板 ;单片机的P3.2(INT0)引脚与按键K3脚连接 ;用汇编语言实现:按一次K1外部中断INT0响应一次,LED显示值加1(十进制), ;前提是共阴数码LED第一位,需要设定,由P0口控制。 ORG 0000H LJMP START ORG 0003H LJMP INTT0 ORG 0600H START: SETB EA SETB EX0 ; 打开外...
利用汇编语言编程实现通过堆栈交换ax,bx的大小
assume cs:codesgcodesg segmentmov ax,2000hmov ss,axmov sp,10hadd sp,4push ax push bxpop axpop bxmov ax,4c00hint 21hcodesg endsEnd来源:心倾城的网易博客欢迎分享本文,转载请保留出处!
汇编语言中的外中断——键盘事件
汇编语言中的外中断和内中断差不多 1、取中断类型码n 2、标致寄存器入栈,IF=0,TF=0 2、CS、IP入栈 3、(IP)=(n*4),(CS)=(n*4+2) 但是外中断和内中断中断类型码的来源不同,所以第一步肯定是不一样的,其他相同 下面来讲一下键盘事件下的处理方式 只要有键盘事件发生,就会触发int 9,这个int 9是硬件扫描过程,其实就是CPU对按键的IO口进行扫
汇编语言——第十三章(int 中断
13.1 int中断 int指令格式为:int n,其中n为中断类型码。 int n中断过程如下: 取中断类型码n 标志寄存器入栈,TF=0,IF=0 CS,IP入栈 (CS)=(n*4),(IP)=(n*4+2)   上面的代码段运行后将在屏幕中间显示一个’!’,然后再显示一个”divide overflow”,这里符号”!”的显示是我们通过编程实现的。而字符串“divide o
汇编基础教程(三)——堆栈框架
由于之前转载的那个教程最后一篇,代码太长了,虽然注释很详细但我实在看不下去了。。。原文在这里 于是根据《INTEL汇编程序设计第五版》第八章8.2小结以及网上的内容整理如下。 ------------------------------------------------------------------分割线-----------------------------------------
利用INT 1Ah时钟中断来实现任意时间的自动开机功能
 能自己定义时间来触发开机行为,必须在系统睡下前之前完成3件事情 第一步  设置闹钟INT 1Ah时钟功能描述: 设置时钟闹钟  入口参数: AH=06H             mov    ch,  BCD码的小时            mov    cl,   BCD码的分钟            mov    dh,  BCD码的秒钟          
汇编 从缓冲区输入字符串 用INT 21H的0A号功能进行字符串的输入
从键盘输入字符串到输入缓冲区中,再把数据数据给读取出来 这个程序是用汇编INT 21H的0A号功能来进行字符串的输入的 ASSUME SS:stack,CS:code,DS:data ;数据段的定义 data SEGMENT strInput DB 100H dup(?) str0 DB 0DH, 0AH, 24H strExit DB 'Please press any key
汇编--学习笔记(十三)-中断中断处理程序
中断时计算机科学中最基本、也是十分重要的一个概念,可以说没有中断概念的引入和应用就不会有今天的计算机,至少不会有搞效率的计算机。 一、基本概念 二、BIOS中断服务 三、DOS中断服务 四、中断处理技术 五、中断处理程序实例 一、中断: 定义:中断就是使CPU暂时挂起当前正在进行的工作并转向某紧急事件的服务与处理程序(该服务与处理程序称为中断服务程序),在执行完中断服务程序后再返回到被中止
王爽《汇编语言》实验16:包含多个功能子程序的中断例程 解答
中断例程: assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset setscreen mov ax,0 mov es,ax mov di,200h mov cx,offset setscreenend-offset setscreen cld rep movsb mov ax,0 mov
int 3中断与软件调试
摘要:平常编程调试的过程中,我们可能会有这样的疑惑:“为什么使用硬件模拟器,比如bochs调试的时候,开始设置的调试断点都不会生效?”,“断点调试的本质是什么,为什么程序能够在特定的地方停留下来?既然程序是指令流,为何CPU没有一直执行下去?”,“在软件中断的情况下,如何进行调试?”。断点和单步执行是两个经常使用的调试功能,也是调试器的核心功能。本章我们将介绍IA-32 CPU是如何支持断点和单步
汇编中调用printf:传递参数超过4个,用栈传递参数
/********************* 汇编中调用printf:传递参数超过4个,用栈传递参数*****************/ /********************** uboot中go命令调用这个裸机程序 **************************/ //转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/detai
汇编学习-堆栈与子程序
任何程序在运行过程中都需要使用堆栈,操作系统为每一个程序(进程及线程)设置一个堆栈。在使用高级语言编程时,源程序中使用的函数调用、局部变量都要用到堆栈,由编译器来负责生成有关的机器指令。我的理解,堆栈就是维护当前线程中运行状态的一个数据结构,这种状态包括:需要传递的变量,函数的返回地址,局部变量等等。 与堆栈相关的 3 个寄存器是:SS, ESP, EBP。 ESP 寄存器中的内容作为堆栈的当
堆栈到参数传递
刚接触C语言的同学会遇到很多麻烦的问题,变量作用域和参数传递就是这众多问题中的一个,下面我们就来浅谈关于参数传递以及变量和参数在系统内存堆栈中的分配。 首先说参数传递对于如下代码 #include #include void blogtest(int* number1,int* number2); int main() { int* p1,*p2; blogtest(p1,
9号中断与10号中断......
汇编怎样编写从键盘接收字符串的程序 悬赏分:0 - 解决时间:2007-5-17 19:21关于键盘接收字符串的程序应该怎样编写啊?  即:程序运行后,在屏幕上接收键盘输入的字符串,然后存如某个指定的内存单元里 提问者: sinclare - 经理 四级 最佳答案DATAS SEGMENT  STR DB"please input a string:$"  BUF DB 20 ;这里的2
第八篇 TSR程序设计初探
这篇博文介绍一个简单的TSR程序设计的例子。   一、TSR是什么 TSR是内存驻留程序(Terminate and Stay Resident Program)的简称。内存驻留程序是指这样 一种程序,TA在执行结束后,将一部分留在内存中,受到操作系统的保护,可由外界激活。一 般来说,TSR都会和DOS或BIOS中断相联系。   二、本篇博文介绍的TSR的设计思路是什么 设计的功能
中断实现流水灯
#include #define GPIO_Pin_6                 0x0040  /* LED2 */ #define GPIO_Pin_7   0x0080  /* LED1 */ #define PLL_M 8 #define PLL_N 336 #define PLL_P 2 #define PLL_Q 7 uint32_t fl
汇编程序】通过堆栈传递参数方法,完成将ARY为首地址的COUNT个字数据累加,不考虑溢出,并将结果保存在SUM中。
STACKS SEGMENT STACK DW 200H DUP(?) TOP LABEL WORD STACKS ENDS --定义栈大小 DATAS SEGMENT ARY DW 123,-54,267,251,55,9 --定义一串数字 ...
汇编 压栈出栈
一 PS:EBP是当前函数的存取指针,即存储或者读取数时的指针基地址;ESP就是当前函数的栈顶指针。每一次发生函数的调用(主函数调用子函数)时,在被调用函数初始时,都会把当前函数(主函数)的EBP压栈,以便从子函数返回到主函数时可以获取EBP。 下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码 假设执行函数前堆栈指针ESP为0xAAAA
汇编堆栈和画堆栈
        根据咱们学汇编的经验呀,汇编用的最多的是寄存器和内存之间的不断相互传值传地址,井然有序。        然而,你知道它们具体是怎么进行数据传递和交换的吗?                                                                    我们知道寄存器能够保存的数据量不多,所以需要存储大量数据的时候就需要保存到内存里面了 ...
王爽汇编 实验13编写int 7cH中断例程(1)
功能:显示一个用0结束的字符串——参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址
16位汇编 int 10h和int 21h 显示字符串实例
int 10h 的9号功能是显示字符串 assume cs:code code segment start: mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,1 ;dh中放行号 mov dl,1 ;dl中放列号 int 10h mov ah,9 ;在光标位置显示字符串 mov al,'a' ;字符 mov bl,0ch ;黑底红字 mov b
汇编语言之堆栈框架
堆栈框架(stack frame)也称活动框架(activation record),他是为传递的参数、子例程的返回地址、局部变量和保存的寄存器保留的堆栈空间。
王爽.汇编.第三版.检测点17.1.疑似答案
疑惑: 网上有的说答案是“错误”的,是基于int 9h是CPU内部中断,是不可屏蔽中断,所以不受IF影响。而在int 16h过程中,IF是为0的(见备注,进入INT 16h之前IF已经设置为0)。 但是,经查资料,说明键盘中断是可屏蔽的, 而且根据目前本书的知识面,在15.2节(Page273),可以断定int 9h确实是可屏蔽中断 先做如下分析: 先看int 16的0号的工作过程:
Int 10 中断功能 详解
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H。底下是它们的说明: AH 功 能
中断发生时用户堆栈和内核堆栈的切换
如果一个中断产生时任务正在用户代码中执行,那么该中断会引起CPU特权级从3到0的变化,此时CPU就会运行用户态堆栈到内核态堆栈的切换操作。CPU会从当前任务的任务状态段TSS中取得新堆栈的段选择符和偏移量。因为中断服务程序在内核中,属于0级特权级代码,所以48位的内核态堆栈指针会从TSS的ss0和esp0字段中获得。在定位了新堆栈(内核态堆栈)之后,CPU就会首先把原用户态堆栈指针ss和esp压入
浅谈汇编(2)——堆栈指令
  现今的CPU中都有栈的设计。8086CPU提供相关的指令来以栈的方式访问内存空间。这意味着,我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用。 8086CPU提供入栈和出栈指令: (最基本的) PUSH(入栈) push ax:将寄存器ax中的数据送入栈中; POP (出栈) pop ax :从栈顶取出数据送入ax。 808...
利用BIOS中断或DOS中断实现一个电子表的程序,要求精确到秒
;***************************************************************;利用BIOS中断或DOS中断实现一个电子表的程序,要求精确到秒;author:野渡无人;create date:2007-12-31;***************************************************************save_
王爽《汇编语言》实验15 安装新的int 9中断例程
批注:    在装载新的int 9中断程序后,键盘按下某键会按照以下流程触发相应事件。    1、CPU取中断类型码9;    2、标志寄存器入栈;    3、设置IF=0,TF=0;    4、CS、IP入栈;    5、读取0:24h的内容,IP=204H,CS=0H,进入新的int 9例程;    6、标志寄存器入栈(47行);    7、因在步骤2中,已经设置IF=0,TF=0了,所以此处...
最简洁的中断现场保护
阅读韦老师的中断现场保护和恢复代码,感觉下面红色部分的代码似乎用不到,因为恢复现场的时候,lr的内容早就放在堆栈里面,并且要推送到pc了,我把下面代码的红色部分去掉,做实验,可以顺利进出中断,可见这几句话对中断现场的保护和恢复没起到作用的,修改后的代码我用蓝色字体标出,是保护现场需要的最小系统。顺便提一下,arm中的pc寄存器并不是代表当前执行的指令地址,而是取指地址,因为arm采取流水线技术,同
C语言及ARM中堆栈指针SP设置的理解与总结
1.首先来看什么是栈,百度这么说: 栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。表的另一端称为栈底。栈顶的当前位置是动态的,对栈顶当前位置的标记称为栈顶指针。当栈中没有数据元素时,称之为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。 客栈,即临时寄存的地方,计算机中的堆栈主要用来保存临时数据,局部
汇编学习笔记:函数调用过程中的堆栈分析
原创作品:陈晓爽(cxsmarkchan) 转载请注明出处 《Linux操作系统分析》MOOC课程 学习笔记 本文通过汇编一段含有简单函数调用的C程序,说明在函数调用过程中堆栈的变化。
LINUX中的中断处理
一)、基本概念 1、安装中断处理程序 系统中中断信号线很有限,有时只有15或16根。内核维护了一个类似于I/O端口注册表的中断信号线的注册表。一个模块可以申请一个中断请求IRQ,处理完以后也可以释放掉它。相关函数: 头文件 原型 1)int request_irq(unsigned int irq, void (*handl
【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )
一. 中断控制 ( 基于 S3C6410 开发板 ) 1. 关闭中断的两个步骤 (1) 关闭中断步骤 2. CPRS 寄存器中的中断控制位 (1) CPRS 寄存器位 3. (1) CPRS 寄存器位 一. 中断控制 ( 基于 S3C6410 开发板 ) 本节 基于 S3C 6410 开发板, 不同的开发板 以及 不同 的芯片 中断控制机制是...
iret指令详解
在“实地址模式”中,IRET 指令执行到中断程序或过程的远返回。在执行此操作的过程中,处理器从堆栈将返回指令指针、返回代码段选择器以及 EFLAGS 映像分别弹入 EIP、CS 以及 EFLAGS 寄存器,然后恢复执行中断的程序或过程。 在“保护模式”中,IRET 指令的操作取决于以下因素:EFLAGS 寄存器中 NT(嵌套任务)与 VM 标志的设置,以及当前堆栈中存储的 EFLAGS 映像
中断按键+数码管以及汇编语言
中断按键和数码管的好教程, 让你从基本了解 这些知识,而且有汇编语言和C语言编程
堆栈实现十进制转换为二进制
#include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OVERLOW -2 #define ok 1 #define error -1 typedef struct sqstack { int *base; int *top; int max; }sqstac
关于ARM体系中栈的对齐问题
关于ARM体系中栈的对齐问题-汤权 基于ARM架构的处理器的C语言程序设计遵循ATPCS(ARM-THUMB procedure call standard)和AAPCS(ARM Application Procedure Call Standard)。ATPCS规定数据栈为FD(满递减Full Decrease)类型,并且对数据栈的操作是8字节对齐的。在我自己的轻量级的嵌入式操作系统t
常用DOS(INT 21H)功能调用表
 AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀 01键盘输入并回显 AL=输入字符02显示输出DL=输出字符 03异步通迅输入 AL=输入数据04异步通迅输出
int 21——dos系统调用 表
AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据 04
汇编——Mov和堆栈操作原则
使用MOV指令要注意到几点: (1)立即数只能作为源操作数,不能作为目的操作数; (2)立即数只允许送到存储器和除了段寄存器之外的其他寄存器; (3)段寄存器之间不能直接传送,但可与其他16位寄存器相互传送; (4)两个内存单元之间不能直接传送; (5)MOV指令的两个操作数类型必须一致; (6)CPU中的寄存器除IP外都可通过MOV指令访问。 还有 一点关于堆栈
我们是很有底线的