IBM-PC汇编语言程序设计课件_第1页
IBM-PC汇编语言程序设计课件_第2页
IBM-PC汇编语言程序设计课件_第3页
IBM-PC汇编语言程序设计课件_第4页
IBM-PC汇编语言程序设计课件_第5页
已阅读5页,还剩297页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IBM—PC汇编语言程序设计

计算机语言的发展机器语言FORTRANBASICCOBOLPASCALC/C++JAVA...汇编语言高级语言汇编语言的特点

面向机器的低级语言,通常是为特定的计算机或计算机系列专门设计的。保持了机器语言的优点,具有直接和简捷的特点。可有效地访问、控制计算机的各种硬件设备,

如磁盘、存储器、CPU、I/O端口等。目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。

经常与高级语言配合使用,应用十分广泛。

#include"stdafx.h"#include"stdio.h"intmain(intargc,char*argv[]){inta,b,c;a=1; b=2; c=a+b; printf(“c=%d\n",c); return0;}

编程实现c=a+b,并在屏幕上显示出结果。

例1编译后的目标文件达到3.59KBdatasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart:

pushdssubax,axpushax

movax,datamovds,axmoves,ax

mova,1movb,2moval,aaddal,bmovc,al

leadx,stringmovah,09int21h

addc,30hmovdl,cmovah,2int21hmovdl,0ahint21hmovdl,0dhint21hretmainendpcodeendsendstart例2.C=a+b汇编后的目标文件只有208字节汇编语言的应用系统程序、效率代码、I/O驱动程序

70%以上的系统软件是用汇编语言编写的。某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。高级绘图程序、视频游戏程序一般是用汇编语言编写的。教师建议目标:●了解汇编语言的特性及其编程技术,●建立起“机器”和“程序”、“空间”和“时间”的概念。建议:●充分注意“汇编”课实践性强的特点,●多读程序,多写程序,多上机调试程序,●熟悉PC机的编程结构,●掌握汇编语言及其程序设计的基本概念、方法和技巧。参考资料1.80X86汇编语言程序设计 沈美明温冬婵清华大学出版社2.IBMPC汇编语言与程序设计

PETERABEL编著 第4版清华大学出版社.PRENTICEHALL

第5版人民邮电出版社3.IBMPC汇编语言与程序设计例题习题集温冬婵沈美明清华大学出版社教学日历:具体见《2007教学日历》一绪论

数制

数制之间的转换

数和字符的表示

运算二计算机组织

CPU存储器

外部设备

寻址方式三指令系统(1)四指令系统(2)

BIOS和DOS调用

五上机过程

完整段定义和简化段定义格式

伪操作六循环与分支程序设计

子程序结构

七高级汇编语言技术

I/O程序设计

八中断程序设计

复习第1章基础知识

数制

数制之间的转换

运算

数和字符的表示预备知识存储容量1K=1024=210(Kilo)1M=1024K=220

(Mega)1G=1024M=230(Giga)1个二进制位:bit(比特)8个二进制位:Byte(字节)1Byte=8bit2个字节:Word(字)

1Word=2Byte=16bit1.数制

数制基数数码

二进制Binary20,1

八进制Octal80,1,2,3,4,5,6,7

十进制Decimal100,1,2,3,4,5,6,7,8,9

十六进制Hexadecimal160,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F二进制:基数为2,逢二进一

11012=1×23+1×22+1×20=1310十六进制:基数为16,逢十六进一

1001,0001,1000,01119187=9×163+1×162+8×161+7×1602.数制之间的转换

二进制十六进制十进制二进制十进制十六进制降幂法除法

二进制十六进制

0011010110111111

35BF∴

0011,0101,1011,1111B=35BFH

A19C

1010000110011100∴A19CH=1010,0001,1001,1100B

1011B=23+21+20=11D

降幂法除法

例:27D=?B2711331----2n16842111011

∴27D=11011B

二进制十进制

十六进制十进制

BF3CH=11163+15162+3161+12160

=48956D

降幂法除法

例:399D=?H39914315399/16→24/16→1/16→0---↓↓↓16n256161F81

18F

∴399D=18FH

算术运算

二进制数:逢二进一借一为二加法规则乘法规则

0+0=000=00+1=101=01+0=110=01+1=0(进位1)11=13.运算(算术运算和逻辑运算)05C3H3D25H42E8H+3D25H05C3H3762H-1-1十六进制数:逢十六进一借一为十六

逻辑运算(按位操作)“与”运算(AND)“或”运算(OR)

ABA

BABA

B

000000010011100101111111“非”运算(NOT)

“异或”运算(XOR)

A

A

ABA

B0100010

011101110例:X=00FFHY=5555H,求Z=X

Y=?X=0000000011111111B

Y=0101010101010101B

Z=0101010110101010B

Z=55AAH4.数和字符的表示

计算机中正负数的表示

76543210符号位

数值位假设机器字长为16位:符号位=0正数

数值位

=

1负数1514131211109876543210假设机器字长为8位:H.O.ByteL.O.ByteH.O.NibbleL.O.Nibble数的常用表示法

——

原码反码补码原码表示法:符号+绝对值例:n=8bit[+3]原码

=0000,0011=03H[-3]原码

=1000,0011=83H[+0]原码

=0000,0000=00H[-0]原码

=1000,0000=80H0的表示不惟一反码表示法:正数的反码同原码,负数的反码数值位与原码相反例:n=8bit[+5]反码

=0000,0101=05H[-5]反码

=1111,1010=FAH[+0]反码

=0000,0000=00H[-0]反码

=1111,1111=FFH0的表示不惟一例:机器字长8位,[-46]补码=?[46]补码=001011101101000111010010=D2H

机器字长16位,[-46]补码=FFD2H

[+0]补码=000000001111111100000000=[-0]补码0的表示惟一按位求反末位加一按位求反末位加一补码(Two’sComplement)表示法:正数的补码:同原码负数的补码:(1)写出与该负数相对应的正数的补码

(2)按位求反

(3)末位加一

十进制二进制十六进制十进制十六进制

n=8n=16+127011111117F+327677FFF+126011111107E+327667FFE......……...+20000001002+20002+10000000101+100010000000000000000-111111111FF-1FFFF-211111110FE-2FFFE......……...-1261000001082-327668002-1271000000181-327678001-1281000000080-327688000n位二进制补码的表数范围:

-2n-1≤N≤2n-1-1无符号整数的表数范围:

0≤N≤2n-1补码的加法和减法:求补运算

:对一个二进制数按位求反、末位加一

[X]补码

[-X]补码

[X]补码加法规则:[X+Y]补码

=[X]补码

+[Y]补码减法规则:[X-Y]补码

=[X]补码

+[-Y]补码

补码减法可转换为补码加法64(-46)18+010000001101001000010010+例:进位和溢出进位:由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。溢出:表示结果超出了字长允许表示的范围,一般会造成结果出错。例:(-64)1100000012701111111

+6401000000+1000000010100000000128

10000000

进位溢出1.计算机系统硬件:中央处理机

CPU总线控制逻辑接口接口存储器大容量存储器I/O设备I/O子系统系统总线......软件:系统软件用户软件2.存储器存储单元的地址和内容:

存储器以字节(8bit)为编程单位

每个字节单元都有唯一的地址编码

地址用无符号整数来表示(编程用十六进制表示)

一个字要占用相继的两个字节

低位字节存入低地址,高位字节存入高地址

字单元地址用它的低地址来表示

机器以偶地址访问(读/写)存储器存储器的逻辑地址与物理地址100111110010011001001000逻辑地址段地址:偏移地址1000:0000H1000:0001H1000:0002H1000:0003H1000:0004H1000:0005H

物理地址10000H10001H10002H10003H10004H10005H100000110101110010100010字节内容(10000H)=9FH;(10001H)=26H字内容(10000H)=269FH;(10001H)=4826H访问两次内存存储器的分段:20根地址线:地址范围

00000H~FFFFFH(1MB)机器字长16位:仅能表示地址范围0000H~FFFFH (64KB)小段:每16个字节为一小段,共有64K个小段

小段的首地址

00000H~0000FH00010H~0001FH00020H~0002FH…FFFF0H~FFFFFH

段起始地址:小段首地址段的大小:64K范围内的任意字节存储器的逻辑分段:

存储器64KB代码01500H42000H1CD00H0150H4200H1CD0H段寄存器CSDSSSES64KB堆栈64KB数据64KB附加数据B0000HB000H

存储器8KB代码2KB数据256堆栈02000H04800H04000H0200H0400H0480HCSDSSS优点:允许程序在存储器内重定位;允许实模式程序在保护模式下运行;有利于程序和数据的分离。物理地址=16

段地址+偏移地址16位段地址16位偏移地址0000+20位物理地址例:(DS)=2100H,(BX)=0500H(PA)=21000H+0500H=21500H3.中央处理器8086/8088寄存器组:数据寄存器:指针及变址寄存器:SP、BP、SI、DI段寄存器:CS、DS、SS、ES控制寄存器:IP、FLAGSCPU组成:算术逻辑部件ALU、控制器、寄存器AXBXCXDXAHALBHBLCHCLDHDL

高8位低8位标志寄存器(FLAGS/PSW)1514131211109876543210

条件码标志:控制标志:OF溢出标志DF方向标志SF符号标志IF中断标志ZF零标志TF陷阱标志CF进位标志AF辅助进位标志PF奇偶标志OFDFIFTFSFZFAFPFCF例:ADDAX,BXJO/JCERROR?

寄存器与存储器的比较:寄存器存储器

在CPU内部在CPU外部访问速度快访问速度慢容量小,成本高容量大,成本低用名字表示用地址表示没有地址地址可用各种方式形成4.外部设备

外部设备与主机(CPU和存储器)的通信是通过外设接口(Interface)进行的,每个接口包括一组寄存器。数据寄存器:存放外设和主机间传送的数据状态寄存器:保存外设或接口的状态信息命令寄存器:保存CPU发给外设或接口的控制命令外设中每个寄存器有一个端口(Port)地址,构成一个独立于内存的I/O地址空间:0000H~FFFFH80x86的寄存器结构80x86的程序可见寄存器组通用寄存器专用寄存器段寄存器

AHAXALBHBXBLCHCXCLDHDXDLSPBP

SIDI

IPFLAGSCSDSSSES8086/8088/80286

寄存器EAXEBXECXEDXESPEBPESIEDIEIPEFLAGS

FSGS311615870OFDFIFTFSFZF

AF

PF

CF

8086/8088OFDFIFTFSFZF

AF

PF

CF

IOPLNT80286

RF

OFDFIFTFSFZF

AF

PF

CF

IOPLNTVM80386

RF

OFDFIFTFSFZF

AF

PF

CF

IOPLNTVMAC80486

RF

OFDFIFTFSFZF

AF

PF

CF

IOPLNTVMACIDVIPVIF313029282726252423222120191817161514131211109876543210Pentium80x86的标志寄存器

(P.23)IOPL:I/O特权级VIP:虚拟中断未决标志

NT:嵌套任务标志

VIF:虚拟中断标志

RF:重新启动标志VM:虚拟8086模式位

AC:对准检查方式位

ID:标识标志

支持多任务处理功能支持虚拟存储器特性

保护模式下的80x86保护模式下的存储器寻址

所选存储单元

描述符64描述符表所选段存储器段基地址32选择器16偏移地址32逻辑地址第2章作业Page332.1~2.52.1在8086微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。试问可直接由指令指定的I/O端口数。

在16进制中FF为255。而0到255有256个数。在80X86中端口号在256内的就是不通过DX寄存器。所以可直接由指令指定的I/O端口数为256。2.2有两个16位字1EE5H和2A3CH分别存放在8086微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。

2.38086微机的存储器中存放信息如下图所示。试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。字节单元:(30022H)=ABH,(30024H)=EFH

字单元:(30021H)=AB34H,(30022H)=CDABH。

2.4在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?

3017:000A的存储单元的物理地址是3017AH,

3015:002A的存储单元的物理地址是3017AH,

3010:007A的存储单元的物理地址是3017AH。

1.8086的寻址方式

与数据有关的寻址方式:以MOV

指令为例立即寻址MOVAX,3069H寄存器寻址MOVAL,BH直接寻址MOVAX,[2000H]寄存器间接寻址MOVAX,[BX]

寄存器相对寻址MOVAX,COUNT[SI]

基址变址寻址MOVAX,[BP][DI]相对基址变址寻址MOVAX,MASK[BX][SI]存储器寻址(1)立即寻址方式*——操作数在指令中给出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于

SRC字段

MOV40H,AL

*SRC和DST的字长一致

MOVAH,3064H

(2)寄存器寻址方式*—操作数在指定的寄存器中

MOVAX,BXMOVAL,BHMOVAX,3064H*

字节寄存器只有

AHALBHBLCHCLDHDL*SRC和DST的字长一致

MOVAH,BX

*

CS不能用

MOV指令改变

MOVCS,AX

(3)直接寻址方式*—有效地址EA由指令直接给出

例:MOVAX,[2000H]

EA=2000H,假设(DS)=3000H,那么PA=32000H*

隐含的段为数据段DS*

可使用段跨越前缀

MOVAX,ES:[2000H]*

操作数地址可由变量(符号地址)表示,但要注意VALUEDB10变量的属性MOVAH,VALUE

MOVAX,VALUE

MOVAX,WORDPTRVALUE

(WORDPTR是字操作符,以后详细讲)5030

32000AHAL3050(AX)=3050H寄存器间接寻址*—EA在基址寄存器(BX/BP)

或变址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允许使用AX、CX、DX存放EAMOVAX,[CX]

*

SRC和DST的字长一致

MOVDL,[BX];[BX]指示一个字节单元

MOVDX,[BX];[BX]指示一个字单元

*

适于数组、字符串、表格的处理

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相对寻址方式*

指令格式:MOVAX,COUNT[SI]或

MOVAX,[COUNT+SI]

假设(DS)=3000H,(SI)=2000H,COUNT=3000H,

则:PA=35000H

假设(35000H)=1234H,那么(AX)=1234H*适于数组、字符串、表格的处理(6)基址变址寻址方式*指令格式:

MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合

MOVAX,[BX][BP]

MOVAX,[SI][DI]

有效地址=(BX)(SI)(BP)(DI)+(7)相对基址变址寻址方式

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

或MOVAX,[MASK+BX+SI]

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量访问存储器的方式

默认的段寄存器可跨越的段寄存器偏移地址取指令

CS无IP堆栈操作

SS无SP一般数据访问

DSCSESSS有效地址EABP作为基址的寻址

SSCSDSESBP串操作的源操作数

DSCSESSSSI串操作的目的操作数

ES无DI段寄存器的使用规定例:编写一段显示字符串STRING的程序

DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17DATAENDS(1)直接寻址

movdl,stringmovah,2int21h;显示字符‘H’movdl,string+1movah,2int21h;显示字符‘A’::(2)寄存器间接寻址

movcx,count;movcx,17

movbx,offsetstring;string的偏址bxNext:movdl,[bx]movah,2int21h;显示一个字符

incbxloopnext;循环指令(3)寄存器相对寻址

movcx,count;movcx,17

movsi,0Next:movdl,string[si];movdl,[string+si]

movah,2int21h;显示一个字符

incsiloopnext;循环指令(4)基址变址寻址

movcx,count;movcx,17

movbx,offsetstring;string的偏址bxmovsi,0Next:movdl,[bx][si];movdl,[bx+si]

movah,2int21h;显示一个字符

incsiloopnext;循环指令(5)DOS显示字符串功能

movdx,offsetstring;string的偏址dx

;leadx,stringmovah,9int21h;显示一串字符80x86新增的寻址方式EA=(基址寄存器)+(变址寄存器)

比例因子+位移量(1)比例变址寻址方式

例:MOVEAX,COUNT[ESI

4]注意E它是后加的一个标志(2)基址比例变址寻址方式

例:MOVECX,[EAX][EDI

4]

(3)相对基址比例变址寻址方式

例:MOVEAX,TABLE[EBP][EDI

4]▲16位和32位寻址的差异地址成分16位寻址32位寻址基址寄存器BX、BP任何32位通用寄存器变址寄存器SI、DI除ESP外的任何32位通用寄存器比例因子11、2、4、8与转移地址有关的寻址方式:

段内寻址段内直接寻址JMPNEARPTRNEXT

段内间接寻址JMPTABLE[BX]

段间寻址

段间直接寻址JMPFARPTRNEXT

段间间接寻址JMPDWORDPTR[BX]用来确定转移指令及转子指令的转向地址。(1)段内直接寻址转向的有效地址=当前(IP)+位移量(8bit/16bit)

例:JMPNEARPTRNEXT近转移-32768~+32767

JMPSHORTNEXT

短转移-128~+127

(2)段内间接寻址

转向的有效地址是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到)例:TABLE=20A2H(BX)=1256H(SI)=528EH(DS)=2000H(232F8H)=3280H(264E4H)=2450H

JMPBX;(IP)=1256H

JMPTABLE[BX]JMPWORDPTRTABLE[BX];(IP)=3280H

JMP[BX][SI]JMPWORDPTR[BX][SI];(IP)=2450Hcode1segment

……jmpfarptrnext

……code1endscode2segment

……next:…...

……code2ends(3)段间直接寻址

用指令中提供的转向段地址和偏移地址取代CS和IP

例:(4)段间间接寻址

用存储器中的两个相继字的内容取代CS和IP

(存储单元的地址可用存储器寻址方式得到)

例:

JMPDWORDPTR[INTERS+BX]

PA=(DS)×24+(BX)+INTERS(PA+1,PA)→IP(PA+3,PA+2)→CS第3章练习Page107

3.13.33.53.73.113.133.1设(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?

(1)立即寻址。

直接将数送到指定的内存单元或者是寄存器

(2)直接寻址。

d

(3)使用BX的寄存器寻址。

通用寄存器bx的编码地址

(4)使用BX的间接寻址。

地址是(bx),

(5)使用BX的寄存器相对寻址。

地址是(bx)+d

(6)基址变址寻址。

(bx)+(si)

(7)相对基址变址寻址。

(bx)+(si)+d

(1)立即寻址。

没有有效地址

(2)直接寻址。

D

7237H

(3)使用BX的寄存器寻址。

bx中存放的是操作数没有效地址

(4)使用BX的间接寻址。

BX

637DH

(5)使用BX的寄存器相对寻址。

bx+d

D5B4H

(6)基址变址寻址。

bX+si

8E18H

(7)相对基址变址寻址。

bx+si+d

004FH(有溢出)

不用知道DS

,需要求物理地址时才要。题目是求有效地址。

3.3写出首地址为BLOCK的字数组的第六个字送到DX寄存器的指令,要求使用以下几种寻址方式:

(1)寄存器间接寻址

(2)寄存器相对寻址

(3)基址变址寻址

(1)寄存器间接寻址

MOV

BX,OFFSET

BLOCK ADD

BX,OAH

MOV

DX

,[BX](2)寄存器相对寻址

MOV

BX,0AH

MOV

DX,BLOCK[BX](3)基址变址寻址

MOV

BX

,

OFFSET

BLOCK

MOV

SI,OAH MOV

DX,[BX][SI]3.5设(IP)=2BC0H,(CS)=0200H,位移量=5119H,(BX)=1200H,(DS)=212AH,(263B9)=089AH(275B9)=098AH试确定转移指令(JMP)转移的偏移地址(即CS=?,IP=?)(1)段内直接寻址方式;(2)使用BX及寄存器间接寻址方式的段内间接寻址;(3)使用BX及寄存器相对寻址方式的段内间接寻址;

段内直接寻址方式:

jmp

[5119]

CS=0200,IP=089A

使用BX及寄存器间接寻址方式的段内间接寻址:

jmp

word

ptr

bx

CS=0200,IP=1200

使用BX及寄存器相对寻址方式的段内间接寻址:

jmp

word

ptr

5119[bx]

CS=0200,IP=098A

注意:转向的有效地址是一个寄存器或存储单元的内容。3.7在0624H单元内有一条二字节JMPSHORTOBJ指令,如其中位移量为

(1)27H

(2)6BH

(3)0C6H

试问转向地址OBJ的值是多少?

(1)

064DH

(2)

0691H

(3)

06ECH

0624H加上JMP指令的长度2作为跳转基址,然后再加上位移量。

3.11执行下列指令后,AX寄存器中的内容是什么?TABLEDW10,20,30,40,50ENTRYDW3MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX](AX)=403.13已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。(标出存储单元的地址)

数据传送指令

算术指令

逻辑指令

串处理指令

控制转移指令

处理机控制与杂项操作指令2.8086的指令系统重点关注:指令的汇编格式指令的基本功能指令支持的寻址方式指令的执行对标志位的影响指令的特殊要求

数据传送指令:

通用数据传送指令

MOV、PUSH、POP、XCHG

累加器专用传送指令

IN、OUT、XLAT

地址传送指令

LEA、LDS、LES

标志寄存器传送指令

LAHF、SAHF、PUSHF、POPF

类型转换指令

CBW、CWD传送指令:MOVDST,SRC执行操作:(DST)(SRC)注意:*DST、SRC不能同时为段寄存器

MOVDS,ES

*立即数不能直接送段寄存器

MOVDS,2000H

*DST不能是立即数和CS*DST、SRC不能同时为存储器寻址*不影响标志位

通用数据传送指令MOVAX,DSEGMOVDS,AX

进栈指令:PUSHSRC

执行操作:(SP)

(SP)–2((SP)+1,(SP))

(SRC)

出栈指令:POPDST

执行操作:(DST)

((SP)+1,(SP)) (SP)

(SP)+2堆栈:‘先进后出’的存储区,段地址存放在SS中,

SP在任何时候都指向栈顶,进出栈后自动修改SP。

注意:

*堆栈操作必须以字为单位。

*

不影响标志位

*

不能用立即寻址方式

PUSH1234H

*DST不能是CSPOPCS

例:假设(AX)=2107H,执行

PUSHAX********(SP)

PUSHAX执行前(SP)

********07H21H低地址

高地址PUSHAX执行后进栈方向(SP)

********07H21HPOPBX执行前(SP)

********07H21H低地址

高地址POPBX执行后

(BX)=2107H例:POPBX出栈方向例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其间用到AX、BX、CXPOPCX;后进先出

POPBXPOPAX

交换指令:XCHGOPR1,OPR2

执行操作:(OPR1)

(OPR2)注意:

*不影响标志位

*不允许使用段寄存器例:XCHGBX,[BP+SI]XCHGAL,BH

累加器专用传送指令(只限使用AX或AL)

输入指令IN(I/O

CPU)

长格式:INAL,PORT(字节)

INAX,PORT(字)执行操作:(AL)

(PORT)(字节)

(AX)

(PORT+1,PORT)(字)短格式:INAL,DX(字节)

INAX,DX(字)执行操作:(AL)((DX))(字节)

(AX)((DX)+1,(DX))(字)

输出指令OUT(CPU

I/O)长格式:OUTPORT,AL(字节)

OUTPORT,AX(字)执行操作:(PORT)

(AL)(字节)

(PORT+1,PORT)

(AX)(字)短格式:OUTDX,AL(字节)

OUTDX,AX(字)执行操作:((DX))

(AL)(字节)

((DX)+1,(DX))

(AX)(字)注意:*

不影响标志位*

前256个端口号00H~FFH可直接在指令中指定(长格式)*

如果端口号

256,端口号

DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:测试某状态寄存器(端口号27H)的第2位是否为1INAL,27HTESTAL,00000100BJNZERROR;若第2位为1,转ERROR处理例:Sound程序

movdx,100inal,61handal,11111100bsound:xoral,2;101out61h,al;ONOFFONmovcx,140h;脉宽Wait1:loopwait1decdxjnesound设备控制寄存器端口61H1/00

控制其它外部设备与门放大器2号定时器门控10(BX)

30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H换码指令:XLAT或XLATOPR执行操作:(AL)

((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令执行后(AL)=33H注意:

*不影响标志位*字节表格(长度不超过256)

首地址

(BX)*需转换的代码位移量(AL)

地址传送指令

有效地址送寄存器指令:LEAREG,SRC

执行操作:(REG)

SRC

指针送寄存器和DS指令:LDSREG,SRC

执行操作:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论