微机原理及应用第四章-课件_第1页
微机原理及应用第四章-课件_第2页
微机原理及应用第四章-课件_第3页
微机原理及应用第四章-课件_第4页
微机原理及应用第四章-课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

NanjingUniversityofScience&Technology微机原理及应用1NanjingUniversityofScience第3章汇编语言程序设计微机原理及应用汇编语言程序设计汇编语言伪指令汇编语言的基本元素汇编及汇编语言2第3章汇编语言程序设计微机原理及应用汇编语言程序设计汇编语精品资料3精品资料3你怎么称呼老师?如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进?你所经历的课堂,是讲座式还是讨论式?教师的教鞭“不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见爹娘……”“太阳当空照,花儿对我笑,小鸟说早早早……”44汇编语言用汇编语言编写源程序,经过汇编程序和连接程序生成目标程序和执行程序

文件名.ASM文件名.OBJ文件名.EXE汇编语言源程序汇编目标程序连接执行程序编辑程序EDIT.EXE汇编程序MASM.EXE连接程序LINK.EXE5汇编语言用汇编语言编写源程序,经过汇编程序和连STACKSEGMENT DB100DUP(?)STACKENDSDATASEGMENT SURDB?DISDB?SQTABDB0,1,4,9,16,25,36,49,64,81DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX LEABX,SQTAB;取平方表基地址

MOV AH,0 MOV AL,SUR;AL=X ADD BX,AX;计算地址偏移

MOV AL,[BX];取出X的平方值

MOV DIS,ALCODEENDS ENDBEGIN汇编语言程序示例6STACKSEGMENT汇编语言程序示例6汇编语言的语句格式

汇编语言的语句有指令语句、伪指令和宏指令。指令:在程序运行期间由计算机来执行,汇编程序汇编后可产生机器指令代码的语句。伪指令:在汇编程序对源程序汇编期间由汇编程序处理的操作,伪指令主要完成数据定义、分配存储区、指示程序结束等操作。宏指令:是源程序中一段有独立功能的程序代码。7汇编语言的语句格式汇编语言的语句有指令语句、伪指令和宏指令汇编语言的基本元素

汇编语言的语句格式如下:格式:[标识符]

助记符操作数[;注释]汇编语言源程序中可以用下列字符来表示标识符: 字母:A~Z,a~z

数字:0~9

专用字符:?·@_$说明:1、标识符不能以数字打头,名字中用到·则必须是第1个字符。2、符号常量、标号或变量等都是标识符。3、标识符不能和关键词重名。8汇编语言的基本元素汇编语言的语句格式如下:8常量、变量和标号

常量:指在汇编时已经有确定数值的量。l数值常量:二进制、十进制、十六进制和ASCII码字符如:01100101B234D(或234)456Q1234H‘AB’符号常量:用伪指令EQU实现 例如:PEQU314

伪指令PURGE可用于释放由EQU伪指令定义的符号常量,这样这些常量就可以被重新定义了。EQU伪指令定义的符号在PURGE伪指令解除前,不能重新定义。 例:PURGE

符号名1,符号名2,…符号名N

等号赋值伪指令“=”

功能与EQU相似,可对已定义的符号名重新定义而无须先释放。如:P=3149常量、变量和标号常量:指在汇编时已经有确定数值的量。9常量、变量和标号

变量:是存储器中的数据地址或数据区地址的符号表示。变量名即是数据的地址或数据区的首地址。标号:是指令地址的符号表示或过程名。过程名是过程入口地址的符号表示。标号经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。标号的定义:用“:”定义,直接写在指令前。 如:NEXT:MOVAL,[SI]说明:1、标号代表指令的符号地址,

在代码段中定义和使用;2、变量是数据存储单元的符号表示,

在数据段、附加段和堆栈段中定义。10常量、变量和标号变量:是存储器中的数据地址或数据区地址的符数据定义伪操作指令

变量的定义(重点)格式:[变量名]数据定义伪指令表达式数据定义伪指令:DB,DW,DD,DQ,DT表达式:确定了变量的初值,所使用的表达式可以是以下几种:(1)

数值表达式 W1DW-5,1994H(2)

ASCII码字符串B1DB‘AB$’(3)

地址表达式 W2DWB1(4)

“?”表示所定义变量无确定初值B2DB?(5)

nDUP(表达式)如:DATA1DB20DUP(5)其中n是重复因子,只能取正整数,它表示定义了n个表达式,表达式的类型由数据定义伪指令确定。此处表示定义了20个字节,并全部初始化为5。11数据定义伪操作指令变量的定义(重点)11数据定义伪操作指令

例1: DATA2DW10DUP(?)

表示定义了10个字,但没有初始化。例2: BUFFERDB100DUP(0);表示以BUFFER为首地址的100个字节中存放00H

例3:V1DB100DUP(3,5,2DUP(10),35),24,‘NUM’

表示V1为首地址的区域中存放了(3,5,10,10,35)100次,和24,‘NUM’12数据定义伪操作指令例1: DATA2DW10D数据定义伪操作指令

例4:S1 DB‘ABCDEF’S2 DW‘AB’,‘CD’,‘EF’S3 DD‘AB’,‘CD’这几个变量在存储器中存放情况如下:注意:定义多于两个以上字符的字符串时,只能使用DB伪指令,不能使用DW和DD等伪指令。41H42H43H44H45H46H42H41H44H43H46H45H42H41H00H00H44H43H00H00HS1S2S313数据定义伪操作指令例4:S1 DB‘ABCDEF变量的属性

变量有三种属性:

段地址SEG

偏移地址OFFSET

类型TYPE变量的类型:存取该变量中的数据所需要的字节数。例如:用DB定义的变量,其类型为1;用DW定义的变量,其类型为2;用DD定义的变量,其类型为4;依次类推。14变量的属性变量有三种属性:14标号的属性

l

标号也有3种属性:即段地址、偏移地址和标号的类型(NEAR,FAR)。段地址:标号的段起始地址,此值必须在CS中;偏移地址:是16位无符号数,它代表从段起始地址到定义标号的位置之间的字节数。类型:NEAR:段内转移或调用,只需要改变IP值,不需要改变CS值。标号返回值为-1(0FFFFH)FAR:指段间转移和调用。IP和CS都将改变,标号返回值为-2(0FFFEH)15标号的属性l

标号也有3种属性:即15汇编语言的运算符

宏汇编允许对常量进行算术、逻辑和关系3种运算,构成的数值表达式在汇编时完成计算。

算术运算符:+、—、*、/、MOD、SHL和SHR

如:PIEQU31416/10000

逻辑运算符:AND、OR、NOT、XOR

如:ANDAL,MASKBANDOFH和逻辑运算指令的区别:由逻辑运算符构成的表达式在汇编时完成计算,而指令在运行时才会执行。关系运算符:EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)注:关系运算符比较两个操作数并产生一个逻辑值。如果关系成立,则结果为真(0FFFFH);否则为假(0000H)。16汇编语言的运算符宏汇编允许对常量进行算术、逻汇编语言的运算符值返回运算符1.$运算符:返回汇编器当前地址计数器的值。如: BLOCKDB‘Readafterme!’ NUMEQU$-BLOCK

结果NUM的值为字符串的长度14

又如: W2DW-5,1994H C1EQU($-W2)/2 ;

C1表示变量W2中元素的个数。2.SEG和OFFSET运算符:返回变量或标号的段地址和偏移地址。例如:MOVAX,SEGTABLE MOVBX,OFFSETTABLE(相当于LEABX,TABLE)17汇编语言的运算符值返回运算符17汇编语言的运算符3.TYPE运算符:用于返回变量和标号的类型例如:MOVAX,TYPETABLE

若TABLE为字节变量,则返回值为14.LENGTH和SIZE运算符

LENGTH:返回分配给该变量的元素的个数;

SIZE:返回分配给该变量的字节数。即返回变量的长度LENGTH与类型TYPE之积。说明:这两个运算符只对用DUP定义的变量有意义。例如:TABLEDW100DUP(?) MOVCX,LENGTHTABLE;CX=100 MOVDX,SIZETABLE ;DX=20018汇编语言的运算符3.TYPE运算符:用于返回变量和标号的类型汇编语言的运算符属性运算符1.PTR运算符:忽略变量或标号的当前属性,而给出一个临时的类型或属性。例1: SLOTDW25 MOVAL,BYTRPTRSLOT例2:MOVBYTEPTR[BX],5或MOVWORDPTR[BX],52.THIS运算符:可用来建立一个特殊的变量,而不为其分配存储空间。该变量的段地址和偏移地址就是后面一个变量的段和偏移地址,其类型在THIS运算符后面指定。例: F1=THISBYTE F2DW1234HMOVAX,TYPEF1 ;AX=1 MOVBL,F1 ;BL=34H19汇编语言的运算符属性运算符19汇编语言的段定义

段定义伪指令格式:段名

SEGMENT[定位类型][组合类型][‘类别’]

…………

段名

ENDS说明:三个可选项一般情况下可不用。但如果需要用连接程序把本程序与其它程序模块相连接时,就需要使用这些说明。20汇编语言的段定义段定义伪指令20汇编语言的段定义

定位类型:如何将组合后的段定位到存储器中。PARA:这是隐含的定位方式,段首址的最低4位为0;BYTE:本段可从任何地址开始;WORD:本段要从偶地址开始;PAGE:段首址的低8位为0。连接方式:表明本段和其它段的组合关系(共6种,见P119)类别:必须用单引号括起来,连接时LINK将类别名相同的所有段(它们不一定同段名)存放在连续的存储区域中。典型的类别名有:data,stack,code。21汇编语言的段定义定位类型:如何将组合后的段定位到存储器中。汇编语言的过程定义

过程定义伪指令一个代码段可以由一个或几个过程组成。过程的定义格式形式如下:过程名 PROC

[NEAR]或FAR

RET

过程名 ENDPNEAR:默认状态,为段内过程FAR:为段际过程22汇编语言的过程定义过程定义伪指令22设定段寄存器伪指令ASSUME

几乎所有访问存储器的指令都仅使用偏移地址。而段地址来自某个段寄存器,所以源程序在程序代码段的开始就要对段寄存器与段之间的关系做假定。确定段寄存器与段的关系的伪指令ASSUME格式:ASSUMESEGREGNAME:SEGNAME,……例如:assumess:stack,cs:code,ds:data注意:伪指令ASSUME只是指定某个段分配给哪个段寄存器,它并不能把段地址装入到段寄存器中。因此要在程序中用两条MOV指令完成这一操作,但代码段不需要这样做,CS的内容将程序初始化时由系统自动完成。23设定段寄存器伪指令ASSUME几乎所有访问汇编语言源程序结构中断向量表ROMBIOS数据区DOS常驻部分PSP(256Byte)程序数据DOS暂驻部分视频RAMROMBIOSRAM底端DS、ESCSRAM高端EXE文件:分段结构的可执行文件。EXE文件除了程序、数据外,还包含了一个文件头,叫程序段前缀PSP(programsegmentprefix),占256个字节。

PSP的256个字节包含三部分的信息:有被装入程序与操作系统连接时使用的信息,有供装入程序使用的参数,还有供操作系统本身使用的信息。24汇编语言源程序结构中断向量表ROMBIOSDOS常驻部分PS标准程序前奏当执行EXE文件时,操作系统像调用子程序一样,把控制权转移给EXE文件,EXE文件执行完之后也应像子程序返回调用程序一样将控制权返回操作系统。EXE文件返回DOS的两种方法:(1)

使用4CH功能调用即在EXE文件的最后使用以下指令:

MOVAH,4CH INT21H(2)

用软中断INT20H,其指令机器码是CD2025标准程序前奏当执行EXE文件时,操作系统像调用标准程序前奏

PSP的头两个字节即为一条INT20H指令,即返回操作系统指令。当程序运行结束时,可以通过把程序流程转移到PSP的这条指令而终止自己的进程。因此需要在程序一开始把PSP的起点地址压入堆栈:

PUSHDS XORAX,AX PUSHAX这三条指令称为标准程序前奏。这样当程序执行到最后一条RET指令时,它将从堆栈顶部弹出PSP的起点地址送CS和IP,使得INT20H指令得以执行,从而把控制权交还给操作系统。当不把代码段中的程序写成过程时,这三行语句是不必要的,但若将其写成DOS调用的过程,则必须加上这三条标准程序前奏。26标准程序前奏PSP的头两个字节即为一条INT20结束用户程序返回DOS的方法

1.INT20H2.程序转移到程序段前缀PSP的开始处来返回DOS,

在子程序中应有如下程序段:

PUSHDS XORAX,AX PUSHAX MOVAX,DATA MOVDS,AX ………… RET3.用4CH功能调用

MOVAH,4CH INT21H若程序中用到附加段ES,则还应有将附加段首址送ES的指令27结束用户程序返回DOS的方法1.INT20H若程序中用到ORG伪指令

ORG:伪指令用于指定段内程序或数据代码存放的起始偏移地址,即用语句中表达式的值作为起始偏移地址,此后的程序或数据代码将连续存放,除非遇到另一个新的ORG语句。一般格式为:

ORG<表达式>例如:DATASEGMENT BUFF1 DB 23,56H,‘EOF’

ORG 2000H BUFF2 DB ‘STRING’ DATAENDS28ORG伪指令ORG:伪指令用于指定段内程序或数据代码存放的汇编结束伪指令语句END

汇编结束伪指令语句ENDEND伪指令用在源程序的最后,用以表示整个源程序的结束,即告诉汇编程序,汇编工作到此结束。格式:END[表达式]说明:表达式为程序第一条可执行指令的地址。如果不带表达式,则该程序不能单独执行,只是供其他程序调用的子模块。29汇编结束伪指令语句END汇编结束伪指令语句END29汇编语言源程序结构PSP(256Byte)0000RAM底端CS,DS,ES,SSIP=0100HSP=0FFFEHRAM高端COM文件所占存储空间比EXE文件小,不允许超过64K。COM文件不分段,且不允许定义堆栈段,占有的空间所有的过程均应定义为NEAR,其入口点必须是0100H。只能用来编制较小的程序。由于其小而简单,装入速度比EXE文件要快。64KB30汇编语言源程序结构PSP(256Byte)0000RAM底例题详解

某程序中的数据定义如下:

DAT1 DW?,18DUP(9)

DAT2 DB90,67,12,176,100,8 DAT3 DD?,?,15 CNT1 EQU $-DAT2 CNT2 EQU$-DAT3问CNT1、CNT2的值以及上述数据定义占用多少字节的内存?答案:CNT1=18CNT2=12

共占用字节:56个字节31例题详解某程序中的数据定义如下:答案:CNT1=1831执行以下程序段后,AX的内容为:

ORG0000HTABLEDW12H,34H,56H,$+1018,78H,90HCOUNTEQU3LEABX,TABLEMOVDX,4[BX]MOVAX,[BX+2*COUNT]SUBAX,DXBX=0000HDX=0056HAX=0400HAX=03AAH注意:$+1018中的1018是十进制数,即十六进制数3FA例题详解

32执行以下程序段后,AX的内容为:BX=0000H注意:$执行以下程序段后,CL和AX的内容各为:STR1 DW ‘AB’STR2 DB16DUP(?)CNT EQU $-STR1 MOVCX,CNT MOVAX,STR1 HLT答案:CL=12HAX=4142H例题详解

33执行以下程序段后,CL和AX的内容各为:答案:例题详解33求下列数据段中每个符号或变量所对应的值:DATA SEGMENTORG 1000HMAX EQU0FFHONE EQUMAXMOD10TWOEQUONE*4SIZE EQU((TWOLT20H)AND10H)+10HBUF DBSIZE*2DUP(?)COUNTEQU$-BUFDATAENDSMAX=FFHONE=05HTWO=14HSIZE=20HBUF=1000HCOUNT=40H例题详解

34求下列数据段中每个符号或变量所对应的值:MAX=FFH例题详汇编程序设计

在汇编语言程序中,最常见的结构有:

l

顺序结构

l

分支结构

l循环结构

l子程序结构

这几种程序的设计方法是汇编程序设计的基础。35汇编程序设计在汇编语言程序中,最常见的结构有:35顺序结构程序设计顺序结构程序设计是没有分支,没有循环的直线运行程序,它的执行顺序和指令的排列顺序完全一致。例1:利用查表法计算平方值。已知0~9的平方值连续存在以SQTAB开始的存储区域中,求SUR单元内容X的平方值,并放在DIS单元中。假定0≤X≤9且为整数。解:(1)了解平方表的存放位置;(2)根据X的值,找到X对应X2在表中位置。36顺序结构程序设计顺序结构程序设计是没有分支,没有循环的直线运DATASEGMENT SURDB2DISDB?SQTABDB0,1,4,9,16,25,36,49,64,81DATAENDS顺序结构程序设计数据段的定义部分:根据题目要求,定义SUR、DIS、SQTAB三个变量STACKSEGMENT DB100DUP(?)STACKENDS堆栈段的定义部分:37DATASEGMENT顺序结构程序设计数据段的定义部CODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKBEGINPROCFAR PUSHDS XORAX,AX PUSHAX MOVAX,DATA MOVDS,AX LEABX,SQTAB ;取平方表基地址

MOV AH,0 MOV AL,SUR ;AL=X ADD BX,AX ;计算地址偏移

MOV AL,[BX] ;取出X的平方值

MOV DIS,AL RETBEGINENDPCODEENDS ENDBEGIN顺序结构程序设计代码段的定义部分:标准程序前缀38CODESEGMENT顺序结构程序设计代码段的定义部为使程序精练,可采用查表指令XLAT,代码段如下:BEGIN:PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX LEABX,SQTAB MOVAL,SUR;AL=X XLATSQTAB MOVDIS,AL顺序结构程序设计39为使程序精练,可采用查表指令XLAT,代码段如下:顺序结构程分支结构程序设计

分支结构:分支程序经常利用改变标志位的指令和转移指令来实现。如采用比较指令CMP和测试指令TEST,产生相应的状态标志,选择适当的条件转移指令,实现不同情况的分支转移。40分支结构程序设计分支结构:分支程序经常利用改变标志位的指令分支结构程序设计实例

=0?

BX=0BX=1BX=–1YY

>0?例编程实现符号函数。

1X>0Y=0X=0–1X<041分支结构程序设计实例=0?BX=0BX=1BX根据上述要求的程序段为:START:MOVAX,BUFFER ;取变量X OR AX,AX ;产生状态标志

JE ZERO ;X=0则转移ZERO:MOVBX,0

JMPCONT1CONT1:……

JMPCONT1 ;转向出口

JNSPLUS ;X为正则转移

MOVBX,0FFFFH ;BX=–1 PLUS:MOVBX,1分支结构程序设计实例

42根据上述要求的程序段为:ZERO:MOVBX,0循环结构

顺序结构和分支结构程序中的指令,最多只执行一次,若要重复执行某些指令,需用循环结构实现。循环程序由4个功能部分组成:(1)循环准备:对循环体要使用的工作单元及寄存器置初值,如建立地址指针、设置计数器初值、将工作寄存器或工作单元清零等。(2)循环处理:重复进行数据处理操作。(3)循环控制:为下一轮循环处理修改数据地址指针和计数器值等,并判断结束条件是否满足。(4)结果处理:分析并转存处理结果。43循环结构顺序结构和分支结构程序中的指令,最多只执行循环结构

例:设内存BUFF开始的单元中依次存放着30个8位无符号字节数,求它们的和并存放在SUM单元中。程序如下:

MOV SI,BUFFMOV CX,30XOR AX,AXAGAIN:ADD AL,[SI] ADC AH,0 INC SI DEC CX;可用LOOPAGAIN JNZ AGAIN MOV SUM,AX44循环结构例:设内存BUFF开始的单元中依次存放着30个8例:在DS数据段中,从偏移地址BUFFER起,顺序存放着100个无符号16位数,编写程序将这100个字数据从大到小排序。解法一:

LEA DI,BUFFER;取首地址

MOV BL,99;须经N-1次排序NEXT0:MOV SI,DI;SI恢复指向首地址

MOV CL,BL;每次排序的比较次数NEXT3:MOV AX,[SI];当前16位数放在AX中

ADD SI,2;SI指向下一个16位数

CMP AX,[SI];当前数与下一个数比较

JNC NEXT5;大于等于则不交换

MOV DX,[SI];小于则交换

MOV [SI–2],DX;可XCHG[SI],AX MOV [SI],AX;MOV[SI-2],AXNEXT5:DEC CL;计算比较次数

JNZ NEXT3 DEC BL;每次排序的比较次数减一

JNZ NEXT0 HLT循环结构

45例:在DS数据段中,从偏移地址BUFFER起,顺序存放着10解法二:LEADI,BUFFER;取首地址

MOVCOUNT,100;排序元素的个数

CLD;地址递增排序NEXT1:MOVBX,1;交换标记

DEC COUNT;每次排序的比较次数减1JZEXIT;比较次数为0则结束

MOVSI,DI;SI恢复指向首地址

MOVCX,COUNT;每次排序的比较次数NEXT2:LODSW;当前数→AX,SI→下一个数

CMPAX,[SI];当前数与下一个数比较

JNCNEXT3;大于等于则不交换

XCHG[SI],AX;小于则交换

MOV[SI–2],AX;大数存入上一位置

XORBX,BX;有交换则交换标记清零NEXT3:LOOPNEXT2;一次排序是否结束?

CMPBX,0;一次排序是否有交换?

JENEXT1;有交换则继续EXIT:MOVAX,4C00H INT21H循环结构

46解法二:LEADI,BUFFER例题详解例:下面是实现8A0BH和D705H两个数相加的程序,请在空白处填写正确的指令:DATASEGMENTFIRSTDB____,____,0HSECONDDB____,____DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,____MOVSI,0______答案:0BH8AH05HD7H2CLC0NEXT:MOVAL,SECOND[SI]ADCFIRST[SI],ALINCSILOOPNEXTMOVAL,0ADCAL,____MOVFIRST[SI],ALMOVAH,4CHINT21HCODEENDSENDSTART47例题详解例:下面是实现8A0BH和D705H两个数相加的程序子程序结构

循环程序设计技术解决了同一程序中连续多次有规律重复执行某个或某些程序段的问题。但对于无规律的重复就不能用循环程序实现。更多的情况是在不同的程序中或在同一个程序的不同位置常常要用到功能完全相同的程序段,如数制之间的转换、代码转换、初等函数计算等。对于这样的程序段,为避免编制程序的重复劳动,节省存储空间,往往把它独立出来附加少量额外的指令,将其编制成可供反复调用的公用的独立程序段,并通过适当的方法把它和其它程序段连接起来。

48子程序结构循环程序设计技术解决了同一程序中子程序结构主程序与子程序间的参数传递:(1)寄存器法:传递的参数和出口参数都在约定的寄存器中,当所传递的参数较少时,一般用这种方法。(2)堆栈法:在调用子程序前,入口参数由主程序送入堆栈中,子程序从堆栈中取得这些参数,并将处理结果送到堆栈中,返回主程序后,主程序从堆栈取得结果。(3)参数赋值法:若主程序和子程序在同一代码段时,可把参数存放在主程序调用子程序指令后面的一串单元中。49子程序结构主程序与子程序间的参数传递:49子程序结构各种参数传递方法的比较

优点:在参数的传递方法中,寄存器法最简单,堆栈法最节省存储单元,参数赋值法最直观;缺点:寄存器法不能传递较多的参数,堆栈法和参数赋值法编程较麻烦。经验证明,参数不多时,用寄存器法最适宜;参数较多时用堆栈法或参数赋值法。50子程序结构各种参数传递方法的比较50主程序和子程序公用寄存器的处理问题子程序不可避免地要使用一些寄存器,因此子程序执行后,某些寄存器的内容会发生变化,如果主程序在这些寄存器中已经存放了有用的数据,则从子程序返回主程序后,主程序的运行势必会因原存放信息被破坏而出错。子程序结构51主程序和子程序公用寄存器的处理问题子程序结构51主程序和子程序公用寄存器的处理问题解决这个问题的方法是使用这些寄存器之前,将其内容保存起来,使用之后再将其还原。前者称为保护现场,后者称为恢复现场。该工作一般在子程序中完成。如:

PUSHAX PUSHBX

POPBX POPAX子程序结构52主程序和子程序公用寄存器的处理问题子程序结构52全国三级PC技术上机考题题目要求:请编制程序,其功能是:内存中连续存放着20个ASCII字符,如果是小写字母a-z之间的字符,请将其转换成相应的大写字符;若为其他字符,不作转换。例如:内存中有

61H('a'),62H('b'),31H('1')41H('

温馨提示

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

评论

0/150

提交评论