汇编入门学习笔记 (十二)—— int指令、端口

发布者:rnm888最新更新时间:2016-06-24 来源: eefocus关键字:汇编入门  int指令  端口 手机看文章 扫描二维码
随时随地手机看文章
疯狂的暑假学习之  汇编入门学习笔记 (十二)——  int指令、端口
 
参考: 《汇编语言》 王爽 第13、14章
 
一、int指令
 
1. int指令引发的中断
 
int n指令,相当于引发一个n号中断。
执行过程相当于:
(1)取中断类型吗n。
(2)标志寄存器入栈;设置IF=0,TF=0。
(3)CS,IP入栈
(4)(IP)=(n*4),(CS)=(n*4+2)
 
 
例子1:编写、安装中断7ch,实现求一个word型数据的平方,用ax存放这个数据。
 assume cs:code  code segment start: mov ax,cs mov ds,ax mov si,offset sqr mov ax,0 mov es,ax mov di,200h mov cx,offset sqrend - offset sqr 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 sqr: mul ax iretsqrend: nop code ends  end start
 
 
assume cs:codecode segmentstart: mov ax,3 int 7ch mov ax,4c00h int 21hcode endsend start
 
 
例子2:编写、安装7ch中断,实现将data段中的字符串转化为大写。
assume cs:codecode segmentstart: mov ax,cs mov ds,ax mov si,offset change mov ax,0 mov es,ax mov di,200h mov cx,offset changeend - offset change 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 21hchange: push cx push sis: mov ch,0 mov cl,ds:[si] jcxz ok and cl,11011111b mov ds:[si],cl inc si jmp short sok: pop si pop cx iretchangeend: nop code endsend start
 
assume cs:codedata segment db 'conversation',0data endscode segmentstart: mov ax,data mov ds,ax mov si,0 int 7ch mov ax,4c00h int 21h code endsend start
 
 
例子3:使中断7ch实现loop指令的功能。
assume cs:codecode segmentstart: mov ax,cs mov ds,ax mov si,offset lp mov ax,0 mov es,ax mov di,200h mov cx,offset lpend - offset lp 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 21hlp: push bp mov bp,sp dec cx jcxz lpret add [bp+2],bxlpret: pop bp iretlpend: nop code endsend start
 
assume cs:codecode segmentstart: mov ax,0b800h mov es,ax mov di,160*12 mov bx,offset s - offset se mov cx,80s: mov byte ptr es:[di],'!' add di,2 int 7chse: nop mov ax,4c00h int 21hcode endsend start
 
 
2. BIOS和DOS的中断例程
 
BIOS中主要包含:
(1)硬件系统的检测和初始化程序
(2)外部中断和内部中断的中断例程
(3)用于对硬件设备进行I/O操作的中断例程
(4)其他和硬件系统相关的中断例程
 
BIOS和DOS提供的中断例程安装过程
(1)开机,初始化CS=0FFFFH,IP=0,执行FFFF:0程序。FFFF:0程序有一条跳转指令,执行完后,CPU会去执行BIOS中的硬件系统检测和初始化程序。
(2)初始化程序将建立BIOS所支持的中断向量,即将BIOS中提供的中断例程的入口地址登记在中断向量表中。注意:BIOS所提供的中断例程,只需要将入口地址登记在中断向量表中即可,因为它们是固化在ROM中的。
(3)硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交给操作系统控制
(4)DOS启动后,除了完成其他工作外,还将他所提供的中断例程装入内存中,并建立相应的中断向量。
 
 
一般来说,一个中断例程包含了多个子程序,用ah来传递内部子程序的编号
 
int 10h中断
它是BIOS提供的中断例程,其中包含了多个和屏幕输出有关的子程序
 
ah=2   设置光标位置,此时bh存放 第几页;dh存放行号;dl存放列号
ah=9  在光标位置显示字符,此时al存放字符;bl存放颜色属性;bh存放第几页;cx存放这个字符重复显示几
 
例子:
assume cs:codecode segmentstart: mov ah,2 mov bh,0 mov dh,5 mov dl,12 int 10h mov ah,9 mov al,'a' mov bl,11001010b mov bh,0 mov cx,3 int 10h mov ax,4c00h int 21hcode endsend start
 
 
 
int 21h中断
它是DOS提供的中断例程,包含了DOS提供给程序员在编程时调用的子程序。
前面我们一直用下面的代码返回
mov  ax,4c00hint 21h
 
其实这是用了21号中断例程的4ch号子程序,al是用来存放程序返回值的,上面的代码即0
本质就是:
mov ah,4chmov al,0int 21h
 
21h号中断例程的9号子程序功能是在光标位置显示字符串,用ds:dx指定字符串的首地址,字符串要以‘$’结尾
例子:
assume cs:codedata segment db 'Welcome to masm!','$'data endscode segmentstart: mov ah,2 mov bh,0 mov dh,5 mov dl,12 int 10h mov ax,data mov ds,ax mov dx,0    ;ds:dx指向字符串的首地址 data:0 mov ah,9 int 21h mov ax,4c00h int 21h code endsend start
 
 
 
二、端口
 
     各种芯片(网卡,显卡等)都有一组可以由CPU读写的寄存器。CPU可以通过这些寄存器读取数据,或者操控芯片。CPU把这些寄存器当做端口,对这些寄存器进行统一编址。每个端口宅地址空间中都有一个地址。
 
1. in和out指令
 
访问端口用in和out
如果:
in al,60h  ; 从60h端口读取数据放到al中
注意:只能用ax或者al来存放从端口中读入的数据或要发送到端口的数据。
 
对0~255以内的端口进行读写时:
in al,20h
out 20h,al
 
对256~65535的端口进行读写时,端口号放在dx中:
mov dx,3f8h
in al.dx
ou dx,al
 
2. shl和shr指令
 
shl:左移指令,最低位补0,将移出的追后以为写入CF中
 
如果是移1位就:
shl  al,1
 
如果移动大于1位,必须将移动的位数放在cl中
mov cl,3
shl al,cl
 
shr是右移,其他与shl一样
 
3. CMOS RAM芯片
 
PC中有一个靠电池供电CMOS RAM芯片,它包含一个实时种和一个有128个存储单元的RAM存储器。
 
它有两个端口:
70h:保存要读取内存单元的地址
71h:读取内存单元
 
CMOS RAM中存储的时间信息
 
0:秒;2:分;
4:时;7:日;
8:月;9:年;
 
例子:在屏幕显示月份。
assume cs:code

code segment

start:
	mov al,8
	out 70h,al
	in al,71h
	
	mov ah,al
	mov cl,4
	shr ah,cl
	and al,00001111b
	
	add ah,30h   ;'0' 的ASCII值
	add al,30h
	
	mov bx,0b800h
	mov es,bx
	mov byte ptr es:[160*12+40*2],ah
	mov byte ptr es:[160*12+40*2+2],al
	
	mov ax,4c00h
	int 21h

code ends

end start
 
关键字:汇编入门  int指令  端口 引用地址:汇编入门学习笔记 (十二)—— int指令、端口

上一篇:keil使用详解
下一篇:汇编入门学习笔记 (十四)—— 直接定址表

推荐阅读最新更新时间:2024-03-16 14:58

节约端口线及器件的新型键盘程序
键盘电路是 单片机 应用系统最常用的人机接口,往往要占用较多的I/O端口, 现在有些很节约I/O资源的键盘电路,如本站转载的这篇文章 http://www.fxdzw.com/dpj/jyio.htm ,但它在键盘上使用的二极管较多,或有些使用的编码芯片。利用本文介绍的电路,可以最大限度地减少键盘电路对I/O端口的点用 和器件。本电路特别适合一些直接搭焊、或需要导线延长键盘(如密码锁) 其节省宝贵的延长线数量。 2 硬件原理 这里以4根I/O线为例,普通接法只能接4个键,本文介绍的电路是在组合接法的基础上增加了4个二极管。其软件处理使用了端口扫描检测方法,从而使按键数可达到12个,同时由于采用了组合逻辑来直接对端口进行
[单片机]
节约<font color='red'>端口</font>线及器件的新型键盘程序
Diodes 公司推出符合汽车规格的 USB Type-C 端口保护装置
Diodes 公司 (Nasdaq:DIOD) 今日宣布推出适用于 USB Type-C ® 端口的 DPO2039DABQ 4 通道保护解决方案,其不仅符合汽车规格、通过 PPAP,且符合 AEC-Q100 标准。DPO2039DABQ 是专为汽车中控系统单元、后座娱乐系统单元和车内充电等产品应用所设计。 现今采用 USB Type-C 接口的情况日渐增加,尤其是热衷于为智能设备与其他接口设备端口提供符合未来需求的汽车制造商。为此,许多设计工程师开始寻找简单有效的解决方案,以便为 USB Type-C 端口数据传输线提供线内保护。 DPO2039DABQ 为分立式数据传输线保护系列产品之一,可配合 USB Type-C
[汽车电子]
Diodes 公司推出符合汽车规格的 USB Type-C <font color='red'>端口</font>保护装置
Inout双向端口的用法
  如果data_inout不是高阻态,则用作输出,无法做输入的,否则两者岂不有了冲突? inout端口信号做输入时,观察例子中的输出data_out_t就应该是高阻态的. 见许多问这个问题的,总结一下大家的贴子,希望能对大家有点用处,如果有不对的地方,欢迎指出.  芯片外部引脚很多都使用inout类型的,为的是节省管腿。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻'Z'。 当inout端口不输出时,将三态门置高阻。这样信号就不会因为两端同时输出而出错了,更详细的内容可以搜索一下三态门tri-state的资料. 1 使用inout类型数据,可以
[嵌入式]
多路端口可编程霓虹灯及彩灯控制器
现有的霓虹灯以及彩灯控制器多是使用专用集成电路,其中固化多种闪烁方式,一般只提供4~16路输出。由于在大型霓虹灯中使用的控制器路数相当多,一般只能定做,代价高而且灵活性较差。本设计由于采用了力源公司的新一代BASIC单片机PS1016及高性价比的8位LED控制驱动器PS7219,从而可实现多路端口,并且能够对任一端口进行控制,可广泛用于大型霓虹灯、塑料霓虹灯以及彩灯的可编程控制,既可在产品上直接编程,又可在计算机上调试好直接传输。具有设计简单、使用方便等特点。 1主要器件介绍 1.1 PS1016单片机 PS1016单片机引脚排列如图1所示,其特点如下: 1.固化在芯片内部的PICBASIC解释程序,提
[应用]
智能电网端口保护:这不是一颗“料”在战斗!
今天,做一个产品或系统的电路保护方案,特别是智能电网等工业应用的端口保护设计,就像是组织一场足球比赛的防御战:你需要有大牌的球(yuan)星(jian),还需要有将他们捏合在一起的战术,去抵御来自对手的每一次可能的“进攻”。这其中的门道儿不少,但也有套路可寻,今天我们就来看看世健(Excelpoint)作为工业电路保护界的“豪门”,是怎么玩儿的。 那些明星元件 先来细数一下世健帐下那些在智能电网上可堪重用的电路保护元件“球星”,它们大多来自Bourns公司,每颗料都很有“料”。比如: TBU高速保护器:作为基于MOSFET半导体技术的电路保护器件,其过流保护的响应速度极快,一般只需200nS就可确保将浪涌电流隔绝在外,与速度慢、耐
[工业控制]
智能电网<font color='red'>端口</font>保护:这不是一颗“料”在战斗!
电子计数式频率计原理 看门狗端口中断实现计数电路功能
频率是单位时间内周期性过程重复、循环或震动的次数,记为f。因此,某一信号在T秒内变化了N次,可知该信号的频率为:f=N/T。下图是电子计数式频率计的原理框图,它主要由四部分组成。 计数脉冲形成电路:该部分的作用是将被测的周期信号经过放大、整形后转换成可计数的脉冲。 时间基准T产生电路:这部分的作用是提供准确的计数时间T,又称为闸门(时间)脉冲。 计数电路:这部分的作用是计数被测周期信号的重复次数。时间基准产生电路产生闸门脉冲,只有在闸门脉冲持续的时间T内,才允许被测信号输入到计数电路进行计数。 波形图 显示电路:该部分的作用是将测量的结果直观的显示出来。 由于单片机的广泛应用,而且单片机的功能也越来越强大,因
[单片机]
电子计数式频率计原理 看门狗<font color='red'>端口</font>中断实现计数电路功能
AVR的IO端口特性与应用
AVR的IO端口特性分析:   分析IO引脚Pxn。DDRxn 只有为1时,可控单向开关才工作,PORTxn 的数值才能通过可控单向开送到 Pxn.   结论:DDRxn=1 时,为输出状态。输出值等于PORTxn。所以,DDRxn 为方向寄存器。PORTxn 为数据寄存器。   分析上拉电阻。E的电位为0时,即D为1时,上拉电阻有效。 从与门的输入分析,只有以下的条件同时满足时,上拉电阻才有效 1。PUD 为0 2。DDxn 为0 3。PORTxn 为1 结论是:只有DDRxn = 0 即管脚定义为输入状态,并且 PORTxn=1, 而且UPD设置为0时,上拉电阻才生效。   分析 Pxn 及 SLEEP。只有当 SL
[嵌入式]
CPLD的DSP多SPI端口通信设计
引 言   目前在电气自动化控制装置中,广泛采用各种通信手段以完成上层与底层控制器、底层控制器以及控制芯片之问的信息传递,并实现相应的控制功能;各种通信功能的设计与实现已成为自动化装置设计的重要组成部分。本文以一种超声波电机运动控制装置为应用背景,讨论了基于CPLD的DSP控制芯片多SPI端口通信技术。   串行同步外设端口(SPI)通常也称为同步外设端口,具有信号线少、协议简单、传输速度快的特点,大量用在微控制器与外围芯片的通信中。目前SPI通信方式已被普遍接受,带有SPI端口的芯片越来越多,如Flash、RAM、A/D转换、LED显示、控制专用DSP芯片等。   本文介绍一种采用运动控制专用DSP芯片DSP56F80
[嵌入式]
CPLD的DSP多SPI<font color='red'>端口</font>通信设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved