《第3章基本指令与简单程序设计精选文档.ppt》由会员分享,可在线阅读,更多相关《第3章基本指令与简单程序设计精选文档.ppt(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章基本指令与简单程序设计本讲稿第一页,共六十四页学学 习习 目目 标标掌握7种与数据有关的寻址方式及用法,这是重点,其中存储器寻址方式是难点;了解外设型外设型寻址方式址方式本讲稿第二页,共六十四页汇编语言语句一般格式:汇编语言语句一般格式:标号:标号:操作符操作符 OPD,OPS ;注释;注释OPD,OPS 问题:问题:1.操作数存放的地方?操作数存放的地方?2.指令中操作数或操作数地址如何表示?即如何寻址?指令中操作数或操作数地址如何表示?即如何寻址?本讲稿第三页,共六十四页3.1 寻址方式寻址方式 8088的寻址方式较为丰富,的寻址方式较为丰富,按照操作数的来源分为四类:按照操作数的来
2、源分为四类:(1)立即数型。)立即数型。(2)寄存器型。)寄存器型。(3)内存型。)内存型。(4)外设型。)外设型。3.1.1 立即数型立即数型寻址方式址方式 这这种种寻寻址址方方式式直直接接把把参参与与操操作作的的数数据据写写在在指指令令中中,又又称称为为立立即即数数或或立立即即寻寻址址。操操作作数数可可以以是是各各种种数数制制下下的的数数值值,也可以是带单引号的字符。也可以是带单引号的字符。本讲稿第四页,共六十四页3.1.1 立即寻址 立即寻址方式中,指令操作码和操作数都在存储器代码段中。即操作数和指令在一起。汇编格式:n n为立即操作数,可以是8位数或16位数 寻找操作数方式如图示:例:
3、MOV AX,3456H不能用作目的操作数。MOV 3456H,AX操作数指令码本讲稿第五页,共六十四页1.立即寻址方式立即寻址方式本讲稿第六页,共六十四页3.1.2 寄存器寻址方式方式 寄存器寻址方式的操作数在指令指明的寄存器中。使用最多也较快的寻址方式。汇编格式:R 其中R表示寄存器名。操作数直接存放在寄存器R中,R是通用寄存器名,可以是16位,也可以是8位。寻找操作数方式如图示:指令 R R 操作数 例:MOV AX,1234H MOV AL,253本讲稿第七页,共六十四页寄存器寻址寄存器寻址本讲稿第八页,共六十四页3.1.3 内存型内存型寻址方式址方式 内存型寻址方式是指参与操作的数据
4、在内存中,因此必须指明操作数究竟在内存的什么地方,即指出内存的逻辑地址。操作数操作数逻辑地址如何表示地址如何表示 物理地址物理地址=(段地址寄存器)(段地址寄存器)16+有效地址有效地址即即PA=(16位段地址)位段地址)16+EA 一般段地址在程序开始就已放好,所以该问题变为:一般段地址在程序开始就已放好,所以该问题变为:1。在指令中如何表示有效地址?。在指令中如何表示有效地址?2。有效地址和段地址如何搭配?。有效地址和段地址如何搭配?本讲稿第九页,共六十四页有效地址的表示法有效地址可以有以下三(四)部分组成:(1)位移量:是存放在指令中的一个8位或16位数,但它表示的是地址(有效地址的一部
5、分)(2)基址:是存放在基址寄存器(BX,BP)中的内容,一般是有效地址的基址部分。(3)变址:是存放在变址寄存器(SI,DI)中的内容,一般是有效地址的变化地址部分。EA=基址+变址+位移量位移量、基址和变址均可正可负,也可不同时存在,则形成了各种寻址方式。有效地址和段地址寄存器有默认搭配,如不同意,可使用段跨越前缀改变默认搭配。本讲稿第十页,共六十四页3 直接寻址 有效地址EA中仅包含位移量,其EA在指令中,紧跟指令的操作码之后。常用于寻找单个操作数。汇编格式:符号地址(或含有变量的地址表达式)。EA(数值地址)寻址方式如图:EA指令指令段基地址段基地址操作数操作数存储器存储器例:例:MO
6、V AX,1234H MOV AX,BUF 或或 MOV AX,BUF BUF 是存放操作数单元的符号地址。是存放操作数单元的符号地址。默认使用段地址寄存器是默认使用段地址寄存器是BUF所在段所在段.本讲稿第十一页,共六十四页直接寻址方式直接寻址方式本讲稿第十二页,共六十四页【例2.6】【例2.6】寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。执行指令:MOV AX,BUF执行后:(AX)=?执行:(32000H)AX执行后:(AX)=4545H返回本节返回本节本讲稿第十三页,共六十四页4 寄存
7、器间接寻址寄存器间接寻址方式中,EA为基址或变址,EA在寄存器中,即寄存器的内容为操作数的有效地址EA,汇编格式:R(R是BX、BP、SI、DI之一)寻找操作数方式如图基址或变址寄存器基址或变址寄存器指指 令令段基地址段基地址操作数操作数存储器存储器EA寄存器寄存器例:例:MOV AX,BX MOV AL,BP本讲稿第十四页,共六十四页默认段地址寄存器情况为:默认段地址寄存器情况为:当当EA在在BP中时中时,段地址寄存器为,段地址寄存器为SS当当EA在在BX、SI、DI之一寄存器中时之一寄存器中时,段地址寄存器为段地址寄存器为DS。物理地址物理地址PA计算方法如下:计算方法如下:PA=(DS)
8、X 16+(SI)SI作变址寄存器。(DS)X 16+(DI)DI作变址寄存器(DS)X 16+(BX)BX作基址寄存器(SS)X 16+(BP)BP作基址寄存器本讲稿第十五页,共六十四页寄存器间接寻址寄存器间接寻址例:例:MOV AX,BX 本讲稿第十六页,共六十四页执行指令:MOV AX,BP 执行后:(AX)=?,(BP)=?,(SS)=?,(20030H)=?MOV BX,AX 执行指令后,(AX)?【例例2.2】寄存器和存储器内容分别为:寄存器和存储器内容分别为:(AX)=0,(,(BP)=0030H,(,(SS)=2000H,(20030H)=1234H,(,(DS)=3000H,
9、(BX)=20H返回本节返回本节本讲稿第十七页,共六十四页5 寄存器相对寻址 有效地址EA为寄存器的内容加位移量,即EA包含两部分。操作数在存储器中。汇编格式:XR或X+R X表示位移量,是8位或16位数,也可以是符号地址,R是BX、BP、SI、DI之一。寻找操作数方式如图示:基址或变址寄存器基址或变址寄存器 位移量位移量指指 令令段基地址段基地址操作数操作数存储器存储器地址地址寄存器寄存器EA 例:MOV AX,BUFBX MOV AX,30BP MOV AX,BUF+BX本讲稿第十八页,共六十四页默认段地址寄存器情况为:P30当EA在BP中时,段地址寄存器为SS当EA在BX、SI、DI之一
10、寄存器中时,段地址寄存器为DS。有效地址EA计算方法如下:本讲稿第十九页,共六十四页寄存器相对寻址寄存器相对寻址 又称变址寻址。例:又称变址寻址。例:MOV AX,MASKSI本讲稿第二十页,共六十四页【例2.3】设执行前:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H 执行指令:ADD 6BX,AX执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?执行:(执行:(20036H)+(AX)20036H执行后:(执行后:(AX)=0040H,(,(BX)=0030H,(DS)=2000H,(,(20036H)=0090H。本讲稿
11、第二十一页,共六十四页6 基址变址寻址基基址址加加变变址址寻寻址址方方式式中中,操操作作数数的的偏偏移移地地址址EAEA是是指指令令中中基基址址寄寄存存器器(BXBX或或BPBP)内内容容、变变址址寄寄存存器器(SISI或或DIDI)内内容容二二项之和,项之和,EAEA包含两部分。包含两部分。汇编格式:汇编格式:BR+IRBR+IR或或BRIRBRIR寻找操作数图形表示:寻找操作数图形表示:基址寄存器基址寄存器 变址寄存器变址寄存器指指 令令段基地址段基地址操作数操作数存储器存储器基地址基地址基址寄存器基址寄存器EA变址值变址值变址寄存器变址寄存器例:MOV AX,BXSI MOV AL,BP
12、+SI本讲稿第二十二页,共六十四页默认段地址寄存器情况为:默认段地址寄存器情况为:当基址寄存器是当基址寄存器是BP时时,段地址寄存器为,段地址寄存器为SS当基址寄存器是当基址寄存器是BX时时,段地址寄存器为,段地址寄存器为DS。有效地址有效地址EA计算方法如下:计算方法如下:EA=BX+SI BX基址寄存器,SI作变址寄存器。BX+DIBX基址寄存器,DI作变址寄存器BP+SI BP基址寄存器,SI作变址寄存器BP+DI BP基址寄存器,DI作变址寄存器本讲稿第二十三页,共六十四页基址加变址寻址基址加变址寻址例:例:MOV AX,BXSI本讲稿第二十四页,共六十四页7 相对基址变址寻址基基址址
13、变变址址寻寻址址方方式式中中,操操作作数数的的有有效效地地址址EAEA是是指指令令中中基基址址寄寄存存器器内内容容、变变址址寄寄存存器器内内容容、位位移移量量三三项项之之和和,EAEA包包含含三部分。三部分。汇编格式:汇编格式:XBR+IRXBR+IR或或X+BR+IRX+BR+IR或或XBRIRXBRIR基址寄存器基址寄存器 变址寄存器变址寄存器 位移量位移量指指 令令段基地址段基地址操作数操作数存储器存储器基址值基址值基址寄存器基址寄存器EA变址值变址值变址寄存器变址寄存器例:MOV AX,BUFBXSIMOV AL,BUFBP+DI本讲稿第二十五页,共六十四页默认段地址寄存器情况为:P3
14、2当基址寄存器是BP时,段地址寄存器为SS当基址寄存器是BX时,段地址寄存器为DS。有效地址EA计算方法如下:本讲稿第二十六页,共六十四页相对基址加变址寻址相对基址加变址寻址例:例:MOV AX,MASKBXSI本讲稿第二十七页,共六十四页8 跨段问题按前述规定:若选用BP作基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用段超越前缀指明操作数的段寄存器名。汇编格式:段寄存
15、器名:操作数地址。功能:段寄存器名指明操作数属哪个段。本讲稿第二十八页,共六十四页【例2.7】段超越前缀示例。MOVMOVAXAX,DSDS:BP BP MOVMOVCXCX,SSSS:SI SI 该该例例中中,DSDS:,SSSS:均均为为段段超超越越前前缀缀,此此时时默默认认状状态态无无效效,操操作作数数的的物物理理地地址址PAPA由由段段寄寄存存器器内内容容左左移移4 4位位加加偏偏移移EAEA形形成成。上述。上述2 2条指令的源操作数物理地址分别为:条指令的源操作数物理地址分别为:PA1 =PA1 =(DSDS)左移)左移4 4位位+(BPBP)PA2 =PA2 =(SSSS)左移)左
16、移4 4位位+(SISI)本讲稿第二十九页,共六十四页汇总名称名称 格式格式 例子例子 立即寻址立即寻址 n mov ax,356 寄存器寻址寄存器寻址 R mov ax,bx 直接直接寻址寻址 EA或符号地址或符号地址 mov ax,0356 或或 mov ax,aa1寄存器寄存器间接间接寻址寻址 R mov ax,BX寄存器寄存器相对相对寻址寻址 XR 或或X+R mov ax,10BX mov ax,aa1BX基址加变址寻址基址加变址寻址 BR+IR 或或BRIR mov ax,BXSI相对基址加相对基址加变址寻址变址寻址 XBR+IR X+BR+IR XBRIR mov ax,10BX
17、+SI mov ax,aa1BXSI本讲稿第三十页,共六十四页 【例3.1】设变量buf1和buf2定义在同一个段中,偏移地址分别是102H和3ACH,两个变量对应的缺省段寄存器都是ES,寄存器BX和BP的值分别是2000H和3000H,试计算下列各指令中源操作数的偏移地址值,并判断缺省段寄存器是哪一个。(1)MOV AL,buf1+BX(2)MOV AL,BX+13(3)MOV AL,BP+buf1buf2(4)MOV AL,buf2+BP4000H本讲稿第三十一页,共六十四页【解】(1)偏移地址为102H2000H2102H段寄存器为buf1对应的缺省段寄存器ES。(2)偏移地址为2000
18、H13200DH段寄存器为BX对应的缺省段寄存器DS。(3)偏移地址为3000H102H3ACH2D56H段寄存器为BP对应的缺省段寄存器SS。(4)偏移地址为3ACH3000H4000H0F3ACH段寄存器为buf2对应的缺省段寄存器ES。本讲稿第三十二页,共六十四页 【例3.2】设arr是一个整型数组变量,其中存放了10个字型带符号整数,用C语言写出相应的变量定义,编写程序段显示该数组的各元素值;并说明如果使用汇编语言的寄存器相对寻址方式arr+BX,分别去取各元素,BX应如何变化。【解】C的变量定义为 int arr10 程序段可写作:for(i=0;i16b 字乘法:(AX)*(SRC
19、)(DX:AX);16b*16b=32b功能:若是字节数据相乘,(AL)与(SRC)相乘得到字数据存入AX中;若是字数据相乘,则(AX)与(SRC)相乘得到双字数据,高字存入DX、低字存入AX中。不可能有溢出。仅影响标志位CF、OF。运算结果高8(16)位不=0,则CF=OF=1本讲稿第四十六页,共六十四页【例2.25】无符号数0B4H与11H相乘。MOVAL,0B4H;(AL)=0B4H=186DMOVBL,11H;(BL)=11H=17DMULBL ;(AX)=0BF4H=3060D注意:不是单操作数,目的操作数在累加器中,结果在累加器及DX中。3.2.5 DIV指令指令 【指令格式】DI
20、V d 【功能】完成无符号数的除法运算。返回节目录本讲稿第四十七页,共六十四页无符号数除法指令DIV语句格式:DIV SRC (SRC:reg,mem)执行的操作:字节除法:(AX)/(SRC)的商(AL);16b/8b=8b (AX)/(SRC)的余数-(AH)字除法:(DX:AX)/(SRC)的商-(AX);32b/16b=16b (DX:AX)/(SRC)的余数-(DX)对所有标志位均无定义。如溢出,则产生0号溢出中断。例:写出实现无符号数0400H/0B4H运算的程序段。MOVAX,0400H;(AX)=0400H=1024DMOVBL,0B4H;(BL)=0B4H=180DDIVBL
21、 ;商(AL)=05H,余数(AH)=7CH 注意:不是单操作数,源和目的操作数长度还不一样;目的操作数在累加器中,结果在累加器及DX中。本讲稿第四十八页,共六十四页3.3 单个字符的输入输出单个字符的输入输出 汇编语言处理输入输出的方法与高级语言有类似之处,由操作系统(本书以DOS为基本环境)在启动时把其基本功能部分调入内存,并长期留在内存中。3.3.1 DOS的的1号子功能号子功能单字符字符输入入 【功能】从键盘上读取一个按键的ASCII码值。【入口参数】AH中放子功能号1。【出口参数】AL中是按键的ASCII码。本讲稿第四十九页,共六十四页 【例3.8】编写一个程序段,从键盘读入一个按键
22、(假定是数字键中的一个),计算出对应的数值,放入寄存器DL中。【解】程序段如下:MOV AH,1 INT 21H;调用DOS的1号子功能 SUB AL,0;把读入键的ASCII值减 去数符0的ASCII值 MOV DL,AL;结果放到DL中本讲稿第五十页,共六十四页 3.3.2 DOS的的2号子功能号子功能单字符字符输出出 【功能】在屏幕上光标当前所在位置显示一个字符,并把光标向后移一格。【入口参数】AH中放子功能号2,DL中放待输出字符的ASCII值。【出口参数】无。本讲稿第五十一页,共六十四页 【例3.9】编写程序段完成回车换行功能。【解】程序段如下:MOV AH,2 MOV DL,13;
23、回车符的ASCII码值 INT 21H MOV DL,10;换行符的ASCII码值 INT 21H;输出回车符时已把AH 放2,且调用后未变返回节目录本讲稿第五十二页,共六十四页3.4 源程序的基本格式源程序的基本格式 3.4.1 行的格式行的格式 “行”是程序编写的基本单位,每一行可以是一条指令、伪指令,也可以是变量定义。一个指令行的基本格式如下:标号:指令助记符操作数,操作数;注释 其中的方括号表示可选项,操作数部分由指令本身规定是有一个操作数、两个操作数,还是根本没有操作数。标号用来表示一行指令所在的起始地址,后面的冒号不可省略。本讲稿第五十三页,共六十四页 3.4.2 段的格式段的格式
24、 每个段中可以写若干行指令,这样的段称为代码段或指令段,也可以写若干变量定义,这样的段称为数据段。3.4.3 程序格式程序格式 一个汇编语言源程序由至少一个段和表示程序结束的伪指令END构成。3.4.4 完整程序完整程序实例例 例3.10本讲稿第五十四页,共六十四页3.5 顺序程序设计顺序程序设计 一个程序通常都是从外部读取一些数据,然后进行处理,再把处理的结果送到输出设备上。对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言描述清楚,让计算机按指令编写的次序从头到尾一条条执行即可,这样的程序结构称为顺序结构。顺序结构的程序是把程序从第1条指令开始,一条接一条地依次做下去,直到控制权交
25、还给操作系统为止。返回节目录本讲稿第五十五页,共六十四页例:3.11用10进制输出一个按键的ASCII值.A=6565/10=66+0=66,53.12 从键盘读入2个一位数,显示它们的积.3,2(3-0=3)3*2=66例3.13从键盘读入一个2位数,显示它的平方值的十位数字.3,23*10+2=3232*32=10242练习3.4(2)上机题本讲稿第五十六页,共六十四页本本 章章 要要 点点 汇编语言程序有固定的程序结构:程序由若干个段和一个表示程序结束的“END”伪指令构成,每个段中可以写多个变量定义或多条指令。“行”是汇编语言程序的基本单位,一行可以是一个变量定义,也可以是一条指令,后
26、面还可以加注释以增加程序的易读性。一个指令行只能写一条指令。最常用的指令有完成数据传递的MOV指令和完成算术运算的ADD、SUB、MUL、DIV等指令。汇编语言的一条指令一般都由助记符和操作数两部分构成,指令本身对操作数的数量和使用方法有明确规定。返回节目录本讲稿第五十七页,共六十四页习习 题题 三三 3.1 说明下面指令的功能,并指出其中源操作数和目的操作数的寻址方式,如果操作数是内存型,还要指出段地址和偏移地址的来源。(1)MOV AX,BX (2)ADD BX,AX(3)DIV va (4)MUL vy(5)SUB vc+BX,1 (6)DIV WORD PTR BP+SI(7)MUL
27、vz+SI+4 (8)MOV BP,SP本讲稿第五十八页,共六十四页 3.2 下面的指令都不符合汇编语言的语法规定,说明各违背了哪些规定。(1)ADD AX,DS (2)MOV DS,30H(3)SUB BX,FF (4)MUL AL,AL(5)DIV 20D (6)MOV BX+SI+4,va(7)ADD vx,va+BX(8)MOV IP,CX(9)MOV CS,DX (10)MUL DI(11)MOV DX,AX (12)SUB 80H,SS:BX(13)SUB SI+DI,3 (14)ADD AX,BX+BP本讲稿第五十九页,共六十四页 3.3 设DS2000H,ES3000H,SS4
28、000H,SI00A0H,BX0100H,BP0010H,变量va的偏移地址为0050H,指出下列指令中源操作数的寻址方式,对内存型操作数计算出其物理地址。(1)MOV AX,0AH (2)MOV BX,CL(3)MOV AX,WORD PTR va(4)MOV AX,SS:va(5)MOV AX,ES:BX (6)MOV BX,BX(7)MOV AX,BP (8)MOV AX,SI+BP(9)MOV DI,BX+10 (10)MOV DH,va+BX(11)MOV DS,BX+SI (12)MOV AL,va+BX+SI本讲稿第六十页,共六十四页 3.4 编写程序段,完成下列表达式计算。(1
29、)vc vavb6 (2)vx vxvyvz,取余数 (3)va (vxvyvz)(vbvc),取商 (4)vc (vavb)256,取余数 3.5 编写完整程序,把从键盘读入的一个小写字母转换成相应的大写字母,并输出。3.6 编写程序,从键盘读入一个符号,如果它的ASCII值是偶数则输出0,是奇数则输出1。提示:输出除以2的余数本讲稿第六十一页,共六十四页 3.7 从键盘读入一个小写字母,输出字母表中倒数与该字母序号相同的那个字母。例如输入首字母a则输出最后一个字母z,输入第4个字母d则输出倒数第4个字母w。3.8 编写一个程序段,把AL中的高4位与低4位交换位置。返回节目录本讲稿第六十二页
30、,共六十四页 3.1.3.1 直接寻址直接寻址 这种寻址方式是在指令中直接写明操作数所在的偏移地址。在汇编语言中,这个偏移地址通常以变量的形式出现,在指令中就直接写变量的名字。同C中访问变量 3.1.3.2 寄存器间接寻址寄存器间接寻址 这种寻址方式是把一个基地址寄存器或变址寄存器中的字型数据当作偏移地址,写法是以该寄存器的名字加上方括号。3.1.3.3 寄存器相对寻址寄存器相对寻址 又称作变址寻址,是以一个基址寄存器或变址寄存器中的值,与一个16位数据相加,相加的结果作为偏移地址。本讲稿第六十三页,共六十四页 3.1.3.4 基址变址基址变址 这种寻址方式是用一个基址寄存器与一个变址寄存器的值相加,计算结果作为操作数的偏移地址。3.1.3.5 相对基址变址相对基址变址 这种寻址方式是把一个基址寄存器和一个变址寄存器的值以及一个16位数据三者相加,结果作为操作数的偏移地址。3.1.4 外外设型型寻址方式址方式 给操作对象逐个编号是计算机的基本处理方法。在8088系统中把内存的每个字节进行编号,形成内存的物理地址,类似地也把控制各种外部设备的接口中的各部件编排号码,每个号码对应的一个外设部件称为一个外设端口,号码本身就是外设地址。返回节目录本讲稿第六十四页,共六十四页