《汇编语言》第十三章 int指令

INT 10H --------------清空频幕用 10H 中断的06H 函数--------------   MOV AH, 06;  使AH = 06就是选择了 06H函数,(就是滚动函数)   MOV AL, 00;  AL = 00 表示整页   MOV BH, 07;  BH = 07表示为正常模式,即为一页80列25行   MOV CH, 00;  CH = 0表示起点的行号为0   M 阅读详情

第13章 int 指令

中断信息可以来自CPU的内部和外部,当CPU的内部有需要处理的事情发生的时候,将产生马上需要处理的中断信息,引发中断过程。

这一章,我们要讲解另一种重要的内中断,由int指令引发的中断

13.1 int指令

int指令的格式为int n 指令,相当于引发一个n号中断的中断过程,执行情况如下:

  1. 取中断类型码n;
  2. 标志寄存器入栈,IF=0,TF=0;
  3. CS,IP入栈;
  4. 修改IP,CS,跳转到中断程序处理入口。

注意,我们前面所说的中断都是被动触发的,当满足某种错误的条件,就会触发相关错误指令,而int指令是主动触发的,这种区别一定要清楚。

int 指令在程序中的任何地方都可以被加载触发。

13.2 编写供应用程序调用的中断历程。

编程
要求:求一word型数据的平方
参数:(ax)=要计算的数据。
返回值:dx,ax中存放结果的高16位和低16位。
举例应用: 2*3456^2

assmue cs:code

code segment
    start:  mov ax,3456
            add ax,ax
            adc dx,dx
            mov ax,4cooh
            int 21
code ends
end start

分析一下,我们要做以下3部分工作。

  1. 编写实现求平方功能的程序。
  2. 安装程序,将其安装在0号内存出
  3. 设置中断向量表,将程序的入口地址保存在7ch表向中,使其成为入口。
assume cs:code

code segment
start:  mov ax,cs
        mov ds,ax
        mov si,offset sqr
        mov ax,0
        mov es,ax
        mov di,200g
        mov cx,offset sqrend-offset sqr
        cld
        rep movsb

        mov ax,0
        mov es,0
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0

        mov ax,4c00h
        mov int 21h

sqr:    mul ax
        iret
sqrend: nop

code ends
end start     

注意,在执行程序结束后,应该调用iret:
pop IP
pop CS
pop f

功能是调出地址和标志寄存器的值。

程序2

功能:将一个全是字母,以0结尾的字符串,转换为大写。
参数:ds:si指向字符串的首地址。
应用举例:将data段中的字符串转换为大写。

assume cs:code

data segment
    db'conversation',0
data ends

code segment
start:  mov ax,data
        mov ds,ax
        mov si,0
        int 7ch

        mov ax,4cooh
        int 21h
code ends
end start

assume cs:code
code segment

    start:  mov ax,cs
            mov ds,ax
            mov si,offset capital
            mov ax,0
            mov es,ax
            mov di,200h
            mov cx,offset capitalend- offset capital
            cld
            rep movsb

            mov ax,0
            mov es,ax
            mov word ptr es:[7ch*4],200h
            mov word ptr es:[7ch*4+2],0
            mov ax,4c00h
            int 21h

capital:    push cx
            push si
change:     mov cl,[si]
            mov ch,0
            jcxz ok
            and byte ptr [si],11011111b
            inc si
            jmp short change
        ok: pop si
            pop cx
            iret
captialend: nop

code ends
end start

注意:不能向段寄存器中加入单纯的数据,必须要使用相关寄存器。

mov ax,cs
mov ds,ax

可以直接向偏移地址中加入offset的相关信息。

设置ds:si指向源地址
设置es:di指向目的地址

s结尾段地址,i结尾偏移地址

代码段寄存器 DS(Data Segment):
堆栈段寄存器 ES(Extra Segment);

SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器

这个对偏移地址有效,这种操作是你需要明确的。

13.3 对int,iret和栈的深入理解

通过使用int程序,可以停止当前,然后运行相关程序来修改原来的命令。

我们调用中断程序中,我们的CS:IP放入栈,而之后用iret来将取出栈中。

我们知道CS:IP来栈中的相对位置。

我们可以在中断程序中来修改栈中的CS:IP地址,之后当执行iret程序时,我们并不会回到原来的地址,而是回到我们修改过的地址。

这节就是讲了这点内容,然后就是一些相关例子代码,看明白即可。

编程 在屏幕中间显示80个‘!’

assume cs:code

code segment

    start:  mov,ax,0b800h
            mov es,ax
            mov di,160*12

            mov bx,offset s-offset se
            mov cx,80
        s:  mov byte ptr es:[di],'!'
            add di,2
            int 7ch
        se: nop

            mov ax,4c00h
            int 21h

code ends

end start

可以看出,这里关于 7ch 的中断程序类似loop s指令。

下面就是关于7ch的中断程序:

    lp: push bp
        mov dp,sp
        dec cx
        jcxz lpret
        add [bp+2],bx
lpret:  pop bp
        iret

这里的dp寄存器是一个浮动的栈游标,空,bp,ip,cs,而[bp+2],这个明显指向IP地址。
而bx在进入该程序前是se到s的相对地址,负数,然后加上就能往前移动。
如果cx==0,那么直接跳到退出的环节,而不是来修改栈中的IP地址,这样,程序就能很自然的进行下面的语句了。

13.4 BIOS和DOS所提供的中断例程

在系统版的ROM中存放着一套程序,被称为BIOS(基本输入输出系统),BIOS中主要包含以下几部分内容。

  1. 硬件系统的检测和初始化程序。
  2. 外部中断和内部中断历程。
  3. 用于对外部硬件设备进行I/O操作的中断历程。
  4. 其他和硬件相关的中断历程。

操作系统DOS也提供了中断历程,从操作系统的角度来看,DOS的中断历程就是操作性向程序猿提供的编程资源,可以供程序猿自由的发挥。

BIOS和DOS所提供的中断历程中包含了许多子程序,这些子程序实现了程序猿在编程的时候经常需要用到的工程。可以用int指令直接调用BIOS和DOS提供的中断历程,来完成某些工作。

13.5 BIOS和DOS中断例程的安装过程

前面我们编写的安装程序,我们可以放在内存中,别的程序在运行时都可以调用。

而BIOS和DOS提供的中断例程是如何安装到内存中的呢?
1. 开机后,CPU一加点,初始化(CS)=0FFFFH,(IP)=0,自动从0FFFFH:0单元开始执行程序。
0FFFF:0处有一条跳转指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。
2. 初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。注意,对于BIOS所提供的中断例程,只需要将入口登记在中断向量表中即可,因为它们是固化到ROM中的程序,一直在内存中存在,所以,不用我们自己编写和安装,这个道理要明确的。
3. 操作系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交由操作系统控制。
4. DOS启动后,除完成其他工作外,还要将所提供的中断例程装入内存,并建立相应的中断向量,这些是操作系统的,软件层间而非固化在ROM的硬件层面上。

13.6 BIOS中断例程应用

int 10h 中断程序是BIOS提供的中断历程,其中包含了多个和屏幕输出相关的子程序。

一般来说,一个供程序猿调用的中断例程中往往包含多个子程序,中断例程内部用传递进来的参数来决定执行哪一个程序。BIOS和DOS提供的中断例程,都用ah来传递内部子程序的变化

下面看一下int 10h中断历程的设置光标位置功能。

mov ah,2    ;置光标
mov bh,0    ;第0页
mov dh,5    ;dh中放行号
mov dl,12   ;dl中放列号
int 10h

ah=2,表示调用10h中的2号子程序,功能为重制光标的位置。

bh中页号的含义:内存地址空间中,B800H~BFFFH共32kb的空间,为80*25彩色字符模式的显示缓冲区。一屏的内容在显示缓冲区中共占4000个字节。

显示缓冲区分8页,每页4KB,显示器可以显示任意一页的内容。一般情况下,显示第0页的内容。

在看看int 10h中段例程的在光标位置显示字符的功能

mov ah,9    ;在光标处显示字符
mov al,'a'  ;字符
mov bl,7    ;颜色属性
mov bh,0    ;第0页  
mov cx,3    ;字符重复个数
int 10h

两个程序结合可以在屏幕中间显示字符,先把光标放到中间,之后显示字符,就是这样,很简单。

汇编语言——第13章 int指令 阅读详情

相关推荐

汇编中的10H中断int 10h详细说明.doc

汇编中的10H中断int 10h详细说明

INT 10H 中断简介

  INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参

thimin的专栏 1万+

汇编语言INT-10H功能表

汇编语言功能表,十分齐全,大家参考一下吧

NASM 汇编编程(八)int 10h

NASM 汇编编程(八)

天中云雾的博客 3246

STM32 RC522串口驱动程序 (简单直接)

rc522作为使用非常多的读写卡芯片,使用SPI芯片读写应用已经非常广了。但有些时候我们只有串口可以使用,或者我们觉得串口使用更加方便,那么就必须要编写串口的驱动程序。不过很难找到可以直接使用的串口程序。所以在此将我这边写好的串口驱动写好如下: 直接上代码 下面是RC522.C的驱动文件。支持读写卡号8位数据。rc522用的是stm32 的串口3,调试显示是串口1; #include "rc522.h" #include "delay.h" /////////////////////////////////

qq_42074368的博客 9001

手把手教你用示波器测试DDR5 DRAM信号完整性(附眼图分析技巧)

本文详细介绍了如何使用示波器测试DDR5 DRAM信号完整性,包括眼图分析技巧。从DDR5的核心挑战、测试设备选型到实测工作流程,提供了全面的指导。特别强调了DFE功能验证和系统级协同测试,帮助工程师解决信号完整性问题,提升测试效率。

g2h3i4j5的博客 1155

《汇编语言》第十三章-int 指令

格式:n 为中断码作用:引发中断过程,引发 n 号中断的中断过程。执行过程:使用场景之一:可以供应用程序调用已经编写好的中断例程。程序:在屏幕中间显示 80 个 “!” 。 使用 iret 实现 loop: 当执行 后会执行中断过程,中断过程完成后,栈中内容如下:进入中断例程,因为用到了 bp,因此入栈保存它,程序完成后在还原。然后 ,循环次数减一, 当循环次数为 0 时,不再进行偏移(循环),不为 0,则 指向栈中 ,并且根据偏移量 修改它,接着还原 bp,最后将栈中数据 ,从而根据修改 达到循

XiaoLing 一直摆烂哇! 502

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

汇编语言第十三章 int 指令 小白笔记

将data段(以0结尾)的数据,显示到屏幕上。(2)标志寄存器入栈,IF=0,TF=0。问题:用7ch中断完成loop指令功能。(显示到屏幕是我自己添的)(3)CS,IP入栈。

小白垃圾笔记2 1951

网络变更:APIC 节点替换

Fabric Name,Controller ID,TEP Address Pool 等信息必须相同;如果故障设备是 APIC1 还需要重新配置管理密码。此过程可能需要 10 分钟左右,在此期间目标 APIC 可能在 Available/Unavailable 状态翻滚。APIC 获取 TEP 地址后,进入 fully-fit。通过 CLI 以及配置的密码登录目标 APIC。

m0_54931486的博客 321

手把手教你学simulink(69.3)--毫米波5G/6G 系统场景实例设计并实现基于Simulink的毫米波多用户MIMO通信系统模型

毫米波频段(30 GHz到300 GHz)因其高带宽和高速率特性,成为5G和未来6G通信系统的理想选择。然而,毫米波信号的传播特性较差,容易受到大气吸收、雨衰、建筑物遮挡等因素的影响。为了克服这些挑战并提高通信容量,多用户MIMO(MU-MIMO, Multi-User Multiple-Input Multiple-Output)技术被广泛应用。多用户MIMO技术通过在基站和多个用户之间同时传输多个数据流,充分利用空间资源,从而显著提升系统容量和频谱效率。

MHD0815的博客 493

sscanf int 取地址_汇编语言 第十三章 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)。从此处转去执行 ...

weixin_39868959的博客 233

零基础学GPU KMD--8. 内存管理:GPU 显存与系统内存的协同​8.1 显存分配策略:GEM / TTM 原理

支持 VRAM、GTT(Graphics Translation Table)、SYSTEM 内存的动态迁移与缓存管理。:若缓冲区在 SYSTEM,TTM 分配 GTT 条目并建立页表映射,使 GPU 可直接访问。:系统内存中预留给 GPU 直接访问的区域,通过 GPU 的 MMU 做地址翻译。你需要我继续展开这一部分吗?​ 为复杂离散 GPU 设计,应对大容量 VRAM、多内存域、显存迁移等问题。:重量级、功能全,适合大容量、多内存域的离散 GPU,强调显存迁移与统一管理。

amy_mhd的博客 185

王爽《汇编语言》第十三章实验——int指令引发的中断

其实这一章和第十二章的内容是差不多的,只不过这一章着重讲述了int指令引发的内中断。 1. int 指令格式              int   n      ; n为中断类型码 2. cpu 执行 int 指令的过程  cpu执行 int 指令,相当于引发一个n号中断的中断过程,执行过程如下     (1) 取中段类型码n;     (2) 标志寄存器入栈;     (3) CS

gaohuaid 4617

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 178

掌握 Unity 中的状态机:综合指南

最后,将拥有一个由状态机驱动的功能齐全的播放器控制器,可以集成到自己的项目中。此外,状态机有助于实现复杂的人工智能、玩家控制、动画系统等,从而形成更强大、更灵活的游戏架构。状态机是计算机科学和游戏开发中的一个基本概念,它通过定义一组有限的状态及其之间的转换来模拟实体的行为。你可以定义常见的状态行为,例如 Enter、Update 和 Exit 方法,确保整个状态机架构的一致性和连贯性。由于前面提到的状态类扩展了 BaseState 类,因此我们可以为具有不同状态的不同对象创建单独的类。

yolo模型训练找我,AI游戏合作找我 1453

汇编语言(王爽版)学习笔记 第十三章 int指令

文章目录13.1 int指令13.2 编写供应用程序调用的中断例程 中断信息可以来自CPU的内部和外部,当CPU内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。这一章中,我们讲解另一种重要的内中断,由int指令引发的中断。 13.1 int指令 int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。 13.2 编写供应用程序调用的中断例程 问题1:编写、安装中断7ch的中断例程 ...

Kni9hT's Blog 632

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

总结:汇编语言(第3版)--第十三章 int 指令

第十三章  int 指令 中断信息可以来自 CPU 的内部和外部,当 CPU 的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。前一章已经介绍了中断过程和两种内中断处理。本章主要讲解的是另一种重要的内中断,由 int 指令引发的中断。 int 指令:int 指令的格式为:int n,n 为中断类型码,它的功能是引发中断过程。 编写供应用程序调用的中断例程:前面,已...

TracyWorld 460

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

王爽《汇编语言》(第二版) 学习笔记 (第十三章 int指令)

<br />第十三章 int指令<br />本章概述:<br />CPU除了外中断外,还需要响应和处理内中断,由int指令引发的中断。<br />一、             int指令<br />1.         int指令的格式为:int  n,n为中断类型码,它的功能是引发中断过程。CPU执行int n指令,相当于引发一个n号中断的中断过程。<br />2.         int指令的最终功能和call指令相似,都是调用一段程序。<br />3.         一般情况下,系统将一些具有一定功

lr2131的专栏 1428

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《汇编语言》学习(十三)int指令

int指令是X86汇编语言中最重要的指令之一。它的作用是引发中断,调用“中断例程”(interrupt routine)。本文将介绍int指令的基本原理和应用,以及BIOS和DOS系统的中断例程。 一、int指令的原理 1,指令原型 int n 注:     1)n 表示中断号,也可以称为中断类型码。n是一个字节大小的正整数,范围为“0 - 255”。 2)执行“int n”时

Sagittarius_Warrior的博客 3万+

【汇编语言】int指令(一)—— 中断与栈的联动机制:透视int与iret的核心原理

本文主要讲解汇编语言里,int 指令格式功能详解,中断例程编写方法探讨,结合实例剖析其与栈的联系。

2301_80191662的博客 1812

INT 21H 指令说明及使用方法(汇编语言学习)

INT 21H一般搭配着AH使用。 MOV AH, 01H INT 21H 一般是这样的使用方式。 通过这样两条指令,输入的字符就会被存储在AL中。 例如: 在很多时候我们想要去做汇编程序的输入与输出(从键盘上直接的输入)并且屏幕上能显示的那种,我们就可以 输出 MOV AH, 09H INT 21H 输入 MOV AH, 0AH INT 21H 表:DOS系统功能调IN...

既然弱小,就只顾变强就是了 4万+

【汇编语言】外中断(三)—— 探秘汇编外中断:从安装新INT 9例程到指令系统总结

文章围绕汇编语言,以安装新 int 9 中断例程为例,阐述相关知识及 8086CPU 指令系统。

2301_80191662的博客 1429

汇编语言指令大全 附指令详解

例如,AND AX, 1234h 将把 AX 寄存器的当前值与十六进制数 1234h 进行逻辑 AND 操作,并将结果存储在 AX 寄存器中。例如,OR AX, 1234h 将把 AX 寄存器的当前值与十六进制数 1234h 进行逻辑 OR 操作,并将结果存储在 AX 寄存器中。例如,MUL BX 将把 BX 寄存器的当前值与 AL 寄存器的当前值相乘,并将结果存储在 AX 寄存器中。例如,SUB AX, 1234h 将从 AX 寄存器的当前值中减去十六进制数 1234h,并将结果存储在 AX 寄存器中。

分享likeshop开发知识 8918

《汇编语言》第13章 int指令

中断信息可以来自 CPU 的内部和外部,当 CPU 的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。在第12章中,我们讲解了中断过程和两种内中断的处理。 这一章中,我们讲解另一种重要的内中断,由int指令引发的中断。

chenyijun的专栏 1130
上一篇: 《汇编语言》 第十二章 内中断
下一篇: 《汇编语言》第十四章 端口
OneTrianee
博客等级 码龄9年 32粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值