汇编语言程序例题知识讲解.docx
《汇编语言程序例题知识讲解.docx》由会员分享,可在线阅读,更多相关《汇编语言程序例题知识讲解.docx(23页珍藏版)》请在冰豆网上搜索。
![汇编语言程序例题知识讲解.docx](https://file1.bdocx.com/fileroot1/2022-9/30/e1ef83c7-0df2-4cae-ac07-8cfae5114dd2/e1ef83c7-0df2-4cae-ac07-8cfae5114dd21.gif)
汇编语言程序例题知识讲解
程汇题例序言语编.
精品文档
【例5.1】试编写一程序计算以下表达式的值。
w=(v-(x*y+z-540))/x
式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图5.1所示。
DATASEGMENT
DW200X
DWY100
DWZ3000
DWV10000
DW
2DUP(?
)W
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
收集于网络,如有侵权请联系管理员删除.
精品文档
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;DATA→AX
X,MOVAX
AX(*Y)→DX:
IMULY
;(X)
MOVCX,AX
MOVBX,DX;(DX:
AX)→(BX:
CX)
Z,MOVAX)符号扩展;(ZCWD
ADDCX,AX
ADCBX,DX
;(BX:
CX)+(DX:
AX)→(BX:
CX)
SUBCX,540
SBBBX,0;(BX:
CX)-540→(BX:
CX)
V
,MOVAXCWD;(V)符号扩展
SUBAX,CX
SBBDX,BX
;(DX:
AX)-(BX:
CX)→(DX:
AX)
;(DX:
AX)/X
IDIVX
MOVW,AX;商→W
;余数DX
MOVW+2,DX→W+2
收集于网络,如有侵权请联系管理员删除.
精品文档
MOVAH,4CH
INT21H
ENDS
;退出DOS状态CODE
ENDSTART
【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序如下:
STACKSEGMENTSTACK
DB
200DUP(0)
STACKENDS
DATASEGMENT
TABDB80,85,86,71,79,96
DB83,56,32,66,78,84
NO
DB10
DB?
ENGLIST
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
BEGIN:
MOVAX,DATA
MOVDS,AX
LEABX,TAB
MOVAL,NO
DELAL
XLATTAB
MOVENGLISH,AL
MOVAH,4CH
INT21H
CODE
ENDS
收集于网络,如有侵权请联系管理员删除.
精品文档
ENDBEGIN
【例5.3】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
题目分析:
根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。
8086/8088指令系统中有专门的求相反数的指令NEG。
DATASEGMENT
XDB-25
RESULTDB?
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
;初始化
MOVAL,X;X取到AL中
;测试AL正负TESTAL,80H
JZNEXT;为正,转NEXT
收集于网络,如有侵权请联系管理员删除.
精品文档
NEGAL;否则AL求补
NEXT:
MOVRESULT,AL;送结果
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
【例5.4】编写计算下面函数值的程序:
1X>0
Y=0X=0
-1
X<0
设输入数据为X、输出数据Y,且皆为字节变量。
程序流程图如下图所示。
DATASEGMENT
XDB-25
YDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
收集于网络,如有侵权请联系管理员删除.
精品文档
MOVDS,AX;初始化
MOVAL,X;X取到AL中
CMPAL,0;Al中内容和0比较
JGE
BIG
;大于等于0,转BIG
MOVBL,-1;否则为负数,-1送BL
JMP
EXIT;转到结束位置
EE
;Al中内容是否为0,为0转EE
BIG:
JE
MOVBL,1;否则为大于0,1送BL
JMP
EXIT;转到结束位置
BL,0;0送BL
EE:
MOV
EXIT:
MOVY,BL;BL中内容送Y单元
MOVAH,4CH
INT21H;程序结束
CODEENDS
;汇编结束ENDSTART
【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。
中存储。
程序流程图如下图Z、Y、X设三个带符号数分别在三个字变量所示
收集于网络,如有侵权请联系管理员删除.
精品文档
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
DATASEGMENT
XDW00ABH
YDW–5
DW200
Z
DW?
MAX
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
,XMOVAXY;AX,YX>?
CMP
L1
JG
;MOVAXZY>?
,Y
CMPAX,Z
JG
EXIT
L2:
MOVAX,Z
JMPEXIT
收集于网络,如有侵权请联系管理员删除.
精品文档
L1:
CMPAX,Z;X>Z?
L2
JLE
EXIT:
MOVMAX,AX
AH,4CH
MOV
INT21H
CODEENDS
ENDSTART
【例5.6】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。
程序流程如图下所示。
DATASEGMENT
TABDWP1,P2,P3,P4,P5,P6,P7,P8
NDB5
DATAENDS
STACKSEGMENT
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
收集于网络,如有侵权请联系管理员删除.
精品文档
START:
MOVAX,DATA
MOVDS,AX
┆
MOVAL,N
DELAL
ADDAL,AL
MOVBL,AL
MOVBH,0
JMPTAB[BX]
P1:
……
┆
JMPEXIT
P2:
……
┆
JMPEXIT
P2:
……
┆
JMPEXIT
P3:
……
┆
JMPEXIT
┆
P8:
……
┆
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。
收集于网络,如有侵权请联系管理员删除.
精品文档
显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。
其程序流程图如下图所示。
例5.8】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000。
流程图如下图SUMCN为止。
统计被累加的自然数的个数送单元,累加和送所示。
收集于网络,如有侵权请联系管理员删除.
精品文档
DATASEGMENT
SUMDW?
CNDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;初始化
;0送MOVAX,0
AX
MOVBX,0;0送BX
LP:
INCBX;BX加1
ADDAX,BX;求累加和
;比较CMPAX,1000
JBELP;≤1000转
MOVSUM,AX
MOVCN,BX
;送结果
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
;汇编结束
【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。
收集于网络,如有侵权请联系管理员删除.
精品文档
我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。
可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,……整个排序过程最多需(N-1)遍。
如下面的4个数即是采用冒泡排序比较的例
子。
数108169032
第一遍816190320
第二遍890132610
第三遍32
8
916
0
10
程序流程图如图5.9所示。