8088汇编语言程序设计微机原理第2版课后答案_第1页
8088汇编语言程序设计微机原理第2版课后答案_第2页
8088汇编语言程序设计微机原理第2版课后答案_第3页
8088汇编语言程序设计微机原理第2版课后答案_第4页
8088汇编语言程序设计微机原理第2版课后答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 8088汇编语言程序设计本章的主要内容是汇编语言语句行的构成,源程序的结构,汇编语言程序设计方法。3.1 重点与难点本章的学习重点是结构化程序设计思想,顺序、分支、循环结构的程序设计,子程序结构的设计与调用,中断指令的应用。另外,汇编语言伪指令的使用、源程序的结构等也是必须掌握的。3.1.1 汇编语言语句行的构成1.标记(1)标识符:由数字、字母和下划线组成,且不能以数字开头,最大长度不超过31个字符。(2)保留字:汇编语言中保留下来的具有特殊用途的字串,如指令、伪指令、寄存器名等都是保留字。保留字不可用作标识符。(3)界符:程序或指令中两个部分的分隔符号。汇编语言源程序中可用的界符:

2、 ; , : ? $ ( ) + - = * / (4)常量:数字常量,可以使用不同的进制D、B、H、Q;字符串常量,由引号引起来的字符串,相当给出字符所对应的ASCII码串。2.符号及其属性(1)寄存器:8086/8088 CPU的寄存器可以作为指令的操作数。(2)变量:即内存单元的符号地址。变量不能与保留字、段名重名。它有三个属性:段属性,指变量所在段的段地址;偏移量,指变量所在段的起始地址到变量地址之间的字节数,即偏移(有效、逻辑)地址。类型,指指变量具有的字节数,包括BYTE、WORD、DWORD、QWORD和TBYTE等。(3)标号:即代码段中某条指令的符号地址,由编程者根据需要确定

3、的。标号不能与保留字重名,可使用字母、数字及下划线,但不允许用数字开头,字符个数不超过31个。标号作为符号地址也有三个属性:段、偏移量和类型(NEAR、FAR)。3.表达式表达式是作为语句的一个操作数,在汇编时一个表达式得到一个值。(1)操作数数据常数、符号常量;存储单元地址常用符号地址表示。(2)运算符算术运算符:+、-、*、/、MOD。对地址的运算仅有+(加)、-(减)运算符。逻辑运算符:AND、OR、NOT和XOR。注意,不要将其和同样名称的指令操作码相混淆。关系运算符:EQ、NE、LT、GT、LE和GE。参与关系运算的两个操作数必须都是数值,或同一段中的两个存储单元地址,运算结果为0F

4、FFFH(真,True)或0(假,False)。分析运算符:0FFSET取一个标号或变量的偏移地址;SEG取一个标号或变量所在段的段地址;TYPE取变量和标号的类型(BYTE、WORD、DWORD或NEAR、FAR);SIZE计算一个存储区的字节总数;LENGTH计算存储区中数据单元的数目,只对数据定义中的DUP操作有效。 综合运算符:PTR用于暂时改变变量或标号的原有属性,只在当前语句中有效;THIS和PTR类似,用于改变存储区的类型;SHORT指定一个标号为短标号。4.语句指令语句:主要由CPU指令组成,每条语句在汇编过程中都会产生对应的目标代码。伪操作或伪指令语句:为汇编程序提供信息,让

5、汇编程序在汇编过程中执行特定的功能。两者本质区别在于,伪指令在汇编过程中不形成任何代码。这里仅对伪指令进行总结。(1)符号定义伪指令(赋值语句)格式:符号常量 EQU 表达式或 符号常量 表达式功能:把表达式的值赋给符号名。说明:在程序中,用EQU语句赋值的符号名不能被重新赋值,但用“”号赋值的符号名可以被重新赋值。若要重新赋值,必须使用解除伪指令PURGE。(2)内存数据定义伪指令格式:变量名 数据定义 表达式或数据项表功能:可为数据项分配存储单元,并根据需要设置其初值。还可用符号代表数据项。说明:数据定义符有字节DB、单字DW、双字DD、8字节DQ、10字节DT;DUP()表示数据重复,“

6、$”表示地址计数器当前值,“?”用于预留存储空间;数据项允许为字符串。(3)段定义伪指令格式:段名SEGMENT 定位方式连接方式类别名 段体段名 ENDS功能:为程序汇编和链接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB。属性参数定义:定位方式,指定段的起始地址边界。有四种方式:页边界PAGE、段边界PARA(系统隐含)、字边界WORD、字边界BYTE。连接方式,告诉连接程序本段与其他段的连接方式。系统隐含为不写,表示本段不与任何段链接。STACK表示此段为堆栈段。类别名,是合法的自定义符,长度不超过40。凡是类别名相

7、同的段在连接时均按先后顺序连接在相邻存储区中。说明:段名的命名规则和变量名以及标号一样;单模块程序中属性参数可省略不写。 (4)段址寄存器说明伪指令格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2,功能:告诉汇编程序在汇编时,段寄存器CS、DS、SS和ES应具有的符号段基址。段寄存器实际值(CS除外)由传送指令在执行程序时赋值。(5)过程(子程序)定义伪指令格式:过程名 PROC NEAR(或FAR) 过程名 ENDP说明:过程名是自定义符。调用格式为:CALL 过程名过程中的RET指令,实现从过程返回调用处。选NEAR,过程是段内调用,过程中的RET是段内返回。选FAR,过程是

8、段间调用,过程中的RET是段间返回。系统默认是近过程。(6)模块开始伪指令格式:NAME 模块名功能:该伪指令指明程序模块的开始,并指出模块名。模块名是自定义符,不能与系统保留字同名。每次汇编只能出现一次。若该伪指令不写,则取TITLE语句中的页标题前6个字符;若没有TITLE语句,则取源程序文件名为模块名。(7)建立标题伪指令格式:TITLE 标题功能:建立每页标题。(8)模块结束伪指令格式:END 启动标号或过程名功能:告诉汇编程序源文件结束,并给出执行程序的入口。仅用于主模块才有意义。(9)定位伪指令格式:ORG 表达式功能:把该伪指令以下所定义的内存数据或程序,从表达式的值所指定的起点

9、开始连续存放,直至遇到新的ORG指令。表达式的值是一个无符号数。(10)系统隐含进位制伪指令格式:RADIX 表达式功能:定义在源程序中书写数据时隐含进位制方式。表达式的值是216之间的十进制数,要遇到新的RADIX伪指令以后才改变隐含进位制。3.1.2 汇编语言源程序的结构1.源程序结构8088汇编语言源程序采用分段结构的形式,一个完整的汇编语言源程序通常由若干个逻辑段组成,包括数据段、附加数据段、堆栈段和代码段。 2源程序基本框架DSEG SEGMENT ;数据定义(DB/DW/DD)DSEG ENDSESEG SEGMENT ESEG ENDSSSEG SEGMENT STACKDW 5

10、12 DUP(?);堆栈段大小为1024BSSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG;指定段寄存器与段之间的对应关系START:MOV AX,DSEG MOV DS,AXMOV AX,ESDGMOV ES,AX;DS、ES段寄存器初始化 ;程序部分MOV AX,4C00H;8088/8086为MOV AH,4CHINT 21H;程序结束,返回DOSCSEG ENDS END START说明:CS段寄存器的初值,由系统自动指定为END后的地址; ES段寄存器的初值,可以用类似DS的方法设置,或由系统指定为定义了STACK属性的段。若未

11、定义堆栈段,则系统默认使用系统堆栈。3.1.3 汇编语言程序设计的方法1.顺序结构程序设计的方法顺序结构是最基本的结构。其特点是CPU按指令排列的顺序逐条执行。2.分支(选择)结构程序设计的方法分支结构,根据不同的条件转到不同的程序段执行。3.循环结构程序设计的方法循环结构,完成需要重复执行的工作。通常由三部分组成:初始化部分,完成对地址指针寄存器、计寄存器等循环中用到的寄存器及存储器置初值;循环体,完成需重复执行的工作;循环控制,用于判断循环是否结束,若结束则跳出循环,未结束则修改地址指针和计数器值,为下一轮循环做准备。4混合结构程序设计方法混合结构程序设计是指上述三种设计方法的组合应用,也

12、是程序设计中最常用的方法, 5子程序的设计方法子程序(或过程)是完成某项特殊功能的程序模块,可以在程序中的任何地方多次被调用。用CALL指令调用子程序,用RET指令返回主程序;用伪指令PROC和ENDP定义子程序。主、子程序关系RETCALL子程序主程序(1)参数传递方式通过寄存器传递,适用于传递参数个数少的情况;通过程序存储器中的参数表传递,在主程序中把要传送的参数直接放在调用指令的后面,而在子程序中到堆栈中取返回地址,以获得参数。通过堆栈传递,适用于参数较多,且子程序有嵌套、递归调用的情况。主程序将要传递的参数压入堆栈,子程序中再将这些参数从堆栈中弹出。(2)寄存器和存储单元的内容保护(保

13、护现场)在主程序中用到的寄存器或存储单元,要在子程序里被用到,而主程序并不希望这些单元的内容被修改,此时必须在子程序入口处将这些单元内容压入堆栈保护起来。6其它设计方法介绍(1)DOS和BIOS中断功能调用DOS和BIOS为用户提供了两组系统服务程序,用户可以采用软中断指令INT N来调用。DOS调用与BIOS调用相比,不依赖于硬件,通用性较好,但执行效率较低。DOS和BIOS中断功能调用的使用方法如图所示:置功能号n (AH)置入口参数执行INT 21H分析出口参数(2)宏指令条件汇编条件伪操作的一般格式如下:IF条件(语句组1)ELSE;可选的(语句组2)ENDIF如果条件为真,则汇编语句

14、组1,否则如有ELSE则汇编语句组2,如无ELSE则不生成条件块。ENDIF表示结束条件汇编。下表给出了汇编语言的条件伪操作及其意义。表3 条件伪操作及其意义 条件伪操作意义IF表达式如果汇编程序求出的表达式非0,条件为真IFE表达式如果汇编程序求出的表达式等于0,条件为真IF1如果是第一遍扫描,条件为真IF2如果是第二遍扫描,条件为真IFDEF符号如果符号在程序中有定义或被说明为EXTRN,条件为真IFNDEF符号如果符号在程序中无定义或未用EXTRN说明,条件为真IFB变元如果变元是空白符,条件为真(变元要求带尖括号)IFNB变元如果变元不是空白符,条件为真IFIDN变元1,变元2如果变元

15、1的字符串和变元2的字符串相同,条件为真IFNIDN变元1,变元2如果变元1的字符串和变元2的字符串不同,条件为真3.2 例题解析1伪指令与指令的区别是什么?答:指令是在程序运行期间由CPU执行的,汇编后由对应的机器代码所代替。伪指令是不可执行的,它只在源程序汇编期间由汇编器处理的命令,用来指示汇编器为数据分配内存空间,或是为汇编器提供源程序结束或段定义等信息。二者本质区别在于,伪指令在汇编过程中不形成任何代码。2.设有数据段如下:DATASEGMENT BUF1DB1, 6, 3, 90H,A,G,V BUF2DW567, 9087, 100 DUP(?), 1, 4, BUF3DW100

16、DUP(?)DATAENDS试确定下列指令执行后寄存器AX的值。(1)MOV AX, TYPE BUF1(2)MOV AX, TYPE BUF2(3)MOV AX, SIZE BUF1(4)MOV AX, SIZE BUF2(5)MOV AX, SIZE BUF3(6)MOV AX, LENGTH BUF1(7)MOV AX, LENGTH BUF2(8)MOV AX, LENGTH BUF3解: LENGTH运算仅对数据定义中的DUP操作有意义。(1)AX=1(2)AX=2(3)AX=7(4)AX=208(5)AX=200(6)AX=1(7)AX=1(8)AX=1003.已知数据段定义如下:

17、DATA SEGMENT D01 DW 1580H D01_ADR DW D01DATA ENDS请给出下列指令执行后BX的值。XOR SI, SIMOV BX, D01 ;(1) MOV BX, D01+2 ;(2) MOV BX, SI+D01 ;(3) MOV BX, OFFSET D01;(4) LEA BX, D01+2;(5)解:(1)BX=1580H (相当于MOV BX, 0000)(2)BX=0000H (相当于MOV BX,0000+2)(3)BX=1580H (相当于MOV BX,SI+0 (4)BX=0000H (5)BX=0002H 4.设有如下定义:VAR DW 1

18、0 DUP(?) 分别用LABEL、PTR、THIS和EQU实现将VAR的第0字节置0。解:(1) VAR0 LABEL BYTE VAR DW 10 DUP(?) MOV VAR0, 0(2) VAR DW 10 DUP(?) MOV BYTE PTR VAR, 0(3) VAR0 EQU THIS BYTE VAR DW 10 DUP(?) MOV VAR0, 06采用查表法,实现一位16进制数,转换为ASCII码显示。解:将0F的ASCII码顺序存放在数据区中,一个十六进制数本身恰好是其对应的ASCII码在数据区中的偏移量。源程序如下:DSEG SEGMENTASC DB 30h,31h

19、,32h,33h,34h,35h,36h,37h,38h,39h ;09的ASCII码DB 41h,42h,43h,44h,45h,46h ;AF的ASCII码HEX DB 04h,0Ah ;设两个数据DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEGSTART: MOV AX, DSEG MOV DS, AXMOV BX, OFFSET ASC;BX指向ASCII码表MOV AL, HEX;AL取得一位16进制数,也是ASCII码表中的偏移AND AL, 0FH;只有低4位有效,高4位清0XLAT;换码:ALDS:BXALMOV DL, AL;入口参数

20、:DLALMOV AH, 2;02号DOS功能调用INT 21H;显示一个ASCII码字符MOV al, HEX+1;转换并显示下一个数据AND al, 0FHXLATMOV DL, ALMOV AH, 2INT 21HMOV AH, 4CHINT 21HCSEG ENDS END START7设内存中有三个互不相等的无符号字数据,分别是放在DA开始的字单元,编制程序将其中最大值存入MAX单元。解: 数1和数2比较,将较大的数再与数3比较,就可以求三个无符号数中的最大值。源程序如下:DSEG SEGMENTDA DW 348AH, 5612H, 490EHMAX DW ?DESG ENDSCS

21、EG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART: MOV AX, DSEG MOV DS, AXLEA SI, DA MOV AX, SI;AX数1 MOV BX, SI+2;BX数2 CMP AX, BX ;比较AX、BX,确保AX较大的数JAE MAX1MOV AX, BXMAX1: CMP AX, SI+4JAE MAX2 MOV AX, SI+4MAX2: MOV MAX,AXMOV AH, 4CHINT 21HCSEG ENDS END START8在数据段定义首地址为A的10个字符,将这10个字符以相反次序传送到附加段首地址为B的内存单元中。解:源程序

22、如下:DSEG SEGMENTA DB 0123456789B DB 10 DUP(?)DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEG, ES:DSEGSTART: MOV AX, DSEG MOV DS, AX MOV ES, AXLEA SI, A;DS:SI指向A数据区的首字符 LEA DI, B ADD DI, 9;ES:DI指向B数据区的末字符 MOV CX, 10;循环次数为10次MOVE: CLD LODSB;按地址递增方向读取A数据区中的字符 STD STOSB;按地址递减方向将字符存入B数据区中 LOOP MOVE MOV AH,

23、4CH INT 21H;结束程序,返回DOSCSEG ENDS END START9编写程序,将无符号数10, 25, 16, 2, 18, 20, 3, 9, 11, 15由小到大排序。解:采用“冒泡法”排序。(1)第1轮,从第1个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素。比较9次后,最大的1个元素就排到了最后。(2)第2轮,除掉最后1个元素,其他元素依上述方法再进行比较,比较8次后,得到次大的元素排在后面,即已有2个元素排好顺序。(3)第9轮,除去第8轮后面已排好顺序的8个元素,剩下的第1个元素和第2个元素进行1比较,较大的排在后面,从而完成了整个排序过程。 这

24、是一个循环次数已知的双重循环程序。外层循环次数(即轮数)为数据总数减1,每一轮的内层循环次数等于当前轮的剩余外循环次数。10个数据,第1轮,外循环次数为9,内循环次数为9;第2轮中外循环剩余8次,内循环次数等于8,依次类推。源程序如下:DSEG SEGMENTARRAY DB 10, 25, 16, 2, 18, 20, 3, 9, 11, 15COUNT EQU ($-ARRAY)/(TYPE ARRAY);计算元素的个数DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEGSTART: MOV AX, DSEG MOV DS, AX MOV CX, CO

25、UNT;CX数组元素个数 DEC CX ;外循环次数OUTLP:MOV DX, CX ;DX内循环次数 MOV BX, OFFSET ARRAYINLP:MOV AL, BX ;取前一个元素 CMP AL, BX+1;与后一个元素比较 JNA NEXT ;前一个不大于后一个元素,则不进行交换 XCHG AL, BX+1;否则,进行交换 MOV BX, ALNEXT: INC BX;下一对元素 DEC DX JNZ INLP;内循环 LOOP OUTLP;外循环 MOV AH, 4CH INT 21H ;结束程序,返回DOSCSEG ENDS END START3.3 习题与参考答案1. 设有数

26、据段如下:DATASEGMENTBUFFER1DB1,6,3,90H,A,G,VBUFFER2DW567,9087,100 DUP(?),1,4,BUFFER3DW100 DUP(?)BUFFER4DW100 DUP(?),45,65,100,2000HDATAENDS试确定下列指令执行后寄存器AX的值。(1)MOVAX,TYPE BUFFER1(2)MOVAX,TYPE BUFFER2(3)MOVAX,SIZE BUFFER1(4)MOVAX,SIZE BUFFER2(5)MOVAX,LENGTH BUFFER1(6)MOVAX,LENGTH BUFFER2(7)MOVAX,LENGTH B

27、UFFER3(8)MOVAX,LENGTH BUFFER42. 设有数据段如下:DATASEGMENTORG1000HVAL1DB23,13,45H,5AHVAL2DB51 DUP(0)ORG1500HVAL3DW23,3FH,$-6,1,4,8,$+34,10DATAENDS假定经汇编和链接后,分配给DATA的实际段地址为3000H。试确定下列指令执行后寄存器BX的内容。(1)MOVBX,OFFSET VAL2(2)MOVBX,SEG VAL3(3)MOVBX,VAL3+4(4)MOVBX,VAL3+123. 假设下列指令中的所有标识符均是类型属性为字的变量名,请指出下列指令中哪些是合法的,

28、哪些是非法的?它们的错误是什么?(1) movbp,al(2) movword_opbx+4*3di,sp(3) movword_op1,word_op2(4) movax,word_op1dx(5) movsave_word,ds(6) mov sp,ss:data_wordbxsi(7) movbxsi,2(8) movax,word_op1+word_op2(9) movax,word_op1-word_op2+100(10)movword_op1,word_op1-word_op24. 执行下面的程序后,(A)= ?DATASEGMENT ADW0 BDW0 CDW10,20,30DA

29、TAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXLEABX,CMOVAX,BXMOVB,AXMOVAX,2BXADDAX,BMOVA,AXRETSTARTENDPCODEENDSENDSTART5. 已知小写字母的ASCII码的D5=1,大写字母的ASCII码的D5=0,阅读下列程序,试说明其完成的功能,并画出程序流程图。DATSEGSEGMENT ERR1DBINPUT IS ERROR!,0DH,0AH,$DATSEGENDSCODSEGSEGMENTASSUME

30、CS:CODSEG,DS:DATSEGSTART:MOVAX,DATSEGMOVDS,AXMOVAH,1INT21HCMPAL,aJBNEXTCMPAL,zJANEXTANDAL,0DFHMOVDL,ALMOVAH,2INT21HNEXT:MOVDX,EER1MOVAH,9INT21HMOVAH,4CHINT21HCODSEGENDSENDSTART6. 已知以BLOCK为首地址的存储区内存放了100个带符号的字数据,阅读以下的程序,试说明其完成的功能,并画出程序流程图。DATSEGSEGMENTBLOCKDW0123H,0A65BH,7078H,9802H,8974H,COUNTEQU$-B

31、LOCKDATSEGENDSCODSEGSEGMENTASSUMECS:CODSEG,DS:DATSEGSTART:MOVAX,DATSEGMOVDS,AXMOVDX,COUNTSHRDX,1LOP1:MOVCX,DXMOVSI,0LOP2:MOVAX,BLOCKSICMPAX,BLOCKSI+2JGENEXTXCHGAX,BLOCKSI+2MOVBLOCKSI,AXNEXT:ADDSI,2LOOPLOP2DECDXJNZLOP1MOVAH,4CHINT21HCODSEGENDSENDSTART7. 自1000H单元开始有一个100个字数据,若要把这批数据传送到自2000H开始的存储区中,可以

32、采用下列三种方法实现,试分别编制程序段以实现数据串的传送。(1)不用串处理指令;(2)用单个传送的串处理指令;(3)用REP前缀与串处理指令配合。8. 编写一个程序,把自1000H单元开始的100个字节数据传送到自1050H开始的存储区中去。(注意:数据区有重叠)9. 自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区中去,但在传送过程中要检查数的值,遇到第一个零就停止传送。10.在以Array为首地址的字节数组中,有100个无符号数。编一个程序求这100个数据的偶数之和与奇数之和,并把两个和分别放在Sum_e与Sum_o单元中(和用两字节表示)。11.在以Array为

33、首地址的字数组中,有100个带符号数。编一个程序把其中的最大偶数挑出来,存放在Max单元中。12.编制一个程序,计算100个正整数(字数据)之和,如果不超过机器数的范围(65535),则计算其平均值并存于RESULT,否则显示“overflow”。13.若在存储器中有数a、b、c、d(它们连续存放),编一个程序实现下面的运算:(a10+b)10+c)10+d(和65535)注:a10=a2+a8,可用逻辑左移指令实现乘法运算。14.设在变量X、Y、Z中存放有三个数,若三个数都不为0,则将三个数之和存入U中;若有一个为0,则将其它两个单元也清0。试编写此程序。15.在缓冲区Buffer连续放着1

34、00个学生的数学成绩,编程序统计其中85100、6084、60分以下者各有多少人,并把结果存到Result开始的三个字节单元。参考答案:1.(1)1 (2)2 (3)7 (4)208 (5)1 (6)1 (7) 100(8) 1002.(1)1004H (2)3000H (3)14FEH (4)152EH3.(1)错。数据类型不匹配。 (2)对。 (3)错。两操作数必须有一个采用寄存器寻址方式。(4)错。DX不作变址用。(5)对。(6)对。(7)错。目的操作数应为 word ptr bxdi,即必须指明其数据类型。(8)错。符号地址与符号地址不能相加,此处必须为立即数。(9)对。(10)对。4

35、. (A)= 30YYNN键盘输入字符 (AL)startend转换: (AL) DFH (AL)(AL)z?屏幕显示错误信息屏幕输出大写字母5. 答:此程序的功能是,将键盘输入的小写字母转换成大写字母在屏幕上显示出来。其流程图如下:6.答:其功能是,采用冒泡法将100个数据从大到小排序。其流程图如下:YYNN初始化:指针SI指向块首块长度2送DXstartend(DX)(CX)(AX)下一数?(CX)= 0 ?两数交换(SI)+2 (SI)取一个16位数(AX)(CX)-1(CX)(DX)-1(DX)(DX)= 0 ?YN7. 解:编程如下:(1)不用串处理指令,程序段如下:MOV SI,1

36、000HMOV DI,2000HMOV CX,100AGAIN:MOV AX,SIMOV WORD PTR DI,AXADD SI,2ADD DI,2LOOP AGAIN(2)用单个传送的串处理指令,程序段如下:MOV SI,1000HMOV DI,2000HMOV CX,100CLDAGAIN:LODSWSTOSWLOOP AGAIN(3) 用REP前缀与串处理指令配合,程序段如下:MOV SI,1000HMOV DI,2000HMOV CX,100CLDREP MOVSW8.解:对于源区和目的区有重叠的数据快的搬运,应从数据快的底部开始,程序如下:DATASEGMENTORG 1000HD

37、ATA1DB1,2,3,50 DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,100LEA SI,DATA1+99LEA DI,DATA+149STDREP MOVSBMOV AH,4CHINT 21HCODEENDSEND START9. 解:源程序如下:datasegmentorg0500Hbuffer1dbx1,x2,x3,x100org1000Hbuffer2db100 dup(?)dataendsstacksegmentparastackst

38、ackdb100 dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axmovax,stackmovss,axmovcx,100cldleasi,buffer1leadi,buffer2again:lodsbcmpal,0jestopstosbloopagainstop:retstartendpcodeendsendbegin10. 解:源程序如下:datasegmentarraydbx1,x2,

39、x100sum_edb2 dup(0)sum_odb2 dup(0)dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovsum_e,0movsum_e+1,0movsum_o,0movsum_o+1,0movcx,100movbx,0again:moval,arraybxtestal,01hjnz oddaddsum_e,aladcsum_e+1,0jmpshort addrodd:addsum_o,aladcsum_o+1,0addr:incbxloopagainmovah,4chint21hcodeendsendstart11.解:编程如下:datasegmentmemdwx1,x2,x100maxdw?dataendscodesegmentassumecs:code,ds:databegin:movax,datamovds,axleasi,memmovcx,100cldlodswmovmax,axdeccxnext:lodswtestax,0001hjnznnopcmpax,maxjlennopxchg ax,max

温馨提示

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

评论

0/150

提交评论