1、汇编语言程序例题知识讲解 程汇题例序言语编精品文档 【例5.1】试编写一程序计算以下表达式的值。 =(v-(*+-540)/x 式中x、v均为有符号字数据。 设、的值存放在字变量、V中,结果存放在双字变量之中,程序的流程图如图5.1所示。 DATA SEGMENT DW 200 X DW Y 100 DW Z 3000 DW V 10000 DW 2 DUP(?) W DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS 收集于网络,如有侵权请联系管理员删除精品文档 CODE SEGMENT ASSUME DS:DATA,CS: CODE
2、,SS:STACK START: MOV AX,DATA MOV DS,AX ;DATAAX X ,MOV AX AX (*Y)DX:IMUL Y ;(X) MOV CX,AX MOV BX,DX ;( DX:AX)(BX:CX) Z ,MOV AX )符号扩展 ;(Z CWD ADD CX ,AX ADC BX,DX ;(BX :CX)+(DX:AX)( BX:CX) SUB CX, 540 SBB BX,0 ;(BX:CX )-540(BX:CX) V ,MOV AX CWD ;( V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)- (BX:CX)(DX:AX) ;(
3、DX:AX )/X IDIV X MOV W,AX ;商W ;余数 DX MOV W+2,DXW+2 收集于网络,如有侵权请联系管理员删除精品文档 MOV AH,4CH INT 21H ENDS ;退出DOS 状态 CODE END START 【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80,85,86,71,79,96 DB 83,56,32
4、, 66,78,84 NO DB 10 DB ? ENGLIST DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE BEGIN:MOV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEL AL XLAT TAB MOV ENGLISH, AL MOV AH, 4CH INT 21H CODE ENDS 收集于网络,如有侵权请联系管理员删除精品文档 END BEGIN 【例5.3】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。 题目分析:根据数学中绝
5、对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。 DATA SEGMENT X DB -25 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX ;初始化 MOV AL,X ;X取到AL中 ;测试AL正负 TEST AL,80H JZ NEXT ;为正,转NEXT 收集于网络,如有侵权请联系管理员删除精品文档 NEG AL ;否则AL
6、求补 NEXT: MOV RESULT,AL ;送结果 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START 【例5.4】编写计算下面函数值的程序: 1 X0 Y= 0 X=0 -1 X0 设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如下图所示。 DATA SEGMENT X DB -25 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA 收集于网络,如有侵权请联系管理员删除精品文档 MOV DS,AX ;初始化 MOV AL,X ;X取到AL中 CMP
7、AL,0 ;Al中内容和0比较 JGE BIG ;大于等于0,转BIG MOV BL,-1 ;否则为负数,1送 BL JMP EXIT ;转到结束位置 EE ;Al中内容是否为0,为0转EE BIG: JE MOV BL,1 ;否则为大于0,1送BL JMP EXIT ;转到结束位置 BL,0 ;0送BL EE:MOV EXIT: MOV Y,BL ;BL中内容送Y单元 MOV AH,4CH INT 21H ;程序结束 CODE ENDS ;汇编结束 END START 【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 中存储。程序流程图如下图Z、Y、X设三
8、个带符号数分别在三个字变量 所示 收集于网络,如有侵权请联系管理员删除精品文档 STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT X DW 00ABH Y DW 5 DW 200 Z DW ? MAX DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX ,X MOV AX Y;AX,Y X?CMP L1 JG ;MOV AX ZY?,Y CMP AX ,Z JG EXIT L2: MOV AX,Z JMP EXIT
9、 收集于网络,如有侵权请联系管理员删除精品文档 L1: CMP AX,Z ;XZ? L2 JLE EXIT: MOV MAX,AX AH,4CH MOV INT 21H CODE ENDS END START 【例5.6】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。 程序流程如图下所示。 DATA SEGMENT TAB DW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5 DATA ENDS STACK SEGMENT DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,
10、CS:CODE 收集于网络,如有侵权请联系管理员删除精品文档 START: MOV AX,DATA MOV DS,AX MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TABBX P1: JMP EXIT P2: JMP EXIT P2: JMP EXIT P3: JMP EXIT P8: EXIT: MOV AH,4CH INT 21H CODE ENDS END START 【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。 收集于网络,如有侵权请联系管理员删除精品文档 显然,每个元素为一个8位有符号二进
11、制数,统计其中正元素的个数可用循环程序实现。其程序流程图如下图所示。 例5.8】编写程序完成求123N的累加和,直到累加和超过1000。流程图如下图SUMCN为止。统计被累加的自然数的个数送单元,累加和送 所示。 收集于网络,如有侵权请联系管理员删除精品文档 DATA SEGMENT SUM DW ? CN DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;初始化 ;0 送MOV AX,0 AX MOV BX,0 ;0送BX LP: INC BX ;BX加1 ADD AX,BX ;求
12、累加和 ;比较CMP AX,1000 JBE LP ; 1000转 MOV SUM,AX MOV CN,BX ;送结果 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START ;汇编结束 【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。 收集于网络,如有侵权请联系管理员删除精品文档 我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,整个排序过程最多需(N-1)遍。如下面的4个数即是采用冒泡排序比较的例 子。 数 10 8 16 90 32 第一遍 8 16 190 32 0 第二遍8 90 132 6 10 第三遍 32 8 916 0 10 程序流程图如图5.9所示。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1