汇编语言程序例题文档格式.docx
- 文档编号:20727052
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:15
- 大小:172.85KB
汇编语言程序例题文档格式.docx
《汇编语言程序例题文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言程序例题文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
CX)
MOVAX,Z
CWD;
(Z)符号扩展
ADDCX,AX
ADCBX,DX
;
(BX:
CX)+(DX:
SUBCX,540
SBBBX,0;
CX)-540→(BX:
MOVAX,V
(V)符号扩展
SUBAX,CX
SBBDX,BX
;
AX)-(BX:
CX)→(DX:
AX)
IDIVX;
AX)/X
MOVW,AX;
商→W
MOVW+2,DX;
余数DX→W+2
MOVAH,4CH
INT21H
CODEENDS;
退出DOS状态
ENDSTART
【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序如下:
TABDB80,85,86,71,79,96
DB83,56,32,66,78,84
NODB10
ENGLISTDB?
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
BEGIN:
MOVAX,DATA
MOVDS,AX
LEABX,TAB
MOVAL,NO
DELAL
XLATTAB
MOVENGLISH,AL
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
【例5.3】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
题目分析:
根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;
要计算一个数的相反数,需要完成减法运算,即用0减去这个数。
8086/8088指令系统中有专门的求相反数的指令NEG。
XDB-25
RESULTDB?
ASSUMEDS:
DATA,CS:
START:
MOVAX,DATA
MOVDS,AX;
初始化
MOVAL,X;
X取到AL中
TESTAL,80H;
测试AL正负
JZNEXT;
为正,转NEXT
NEGAL;
否则AL求补
NEXT:
MOVRESULT,AL;
送结果
MOVAH,4CH
INT21H;
返回DOS
ENDSTART
【例5.4】编写计算下面函数值的程序:
1X>
Y=0X=0
-1X<
设输入数据为X、输出数据Y,且皆为字节变量。
程序流程图如下图所示。
DATASEGMENT
XDB-25
YDB?
ASSUMECS:
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX;
MOVAL,X;
CMPAL,0;
Al中内容和0比较
JGEBIG;
大于等于0,转BIG
MOVBL,-1;
否则为负数,-1送BL
JMPEXIT;
转到结束位置
BIG:
JEEE;
Al中内容是否为0,为0转EE
MOVBL,1;
否则为大于0,1送BL
EE:
MOVBL,0;
0送BL
EXIT:
MOVY,BL;
BL中内容送Y单元
MOVAH,4CH
INT21H;
程序结束
ENDSTART;
汇编结束
【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。
设三个带符号数分别在三个字变量X、Y、Z中存储。
程序流程图如下图所示
STACKSEGMENTSTACK
DATASEGMENT
XDW00ABH
YDW–5
ZDW200
MAXDW?
DATAENDS
CODESEGMENT
CODE
MOVDS,AX
MOVAX,X
CMPAX,Y;
X>Y?
JGL1
MOVAX,Y;
Y>Z?
CMPAX,Z
JGEXIT
L2:
MOVAX,Z
JMPEXIT
L1:
CMPAX,Z;
X>Z?
JLEL2
EXIT:
MOVMAX,AX
MOVAH,4CH
INT21H
ENDSTART
【例5.6】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。
程序流程如图下所示。
TABDWP1,P2,P3,P4,P5,P6,P7,P8
NDB5
STACKSEGMENT
MOVDS,AX
┆
MOVAL,N
DELAL
ADDAL,AL
MOVBL,AL
MOVBH,0
JMPTAB[BX]
P1:
……
JMPEXIT
P2:
P3:
……
P8:
【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。
显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。
其程序流程图如下图所示。
例5.8】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。
统计被累加的自然数的个数送CN单元,累加和送SUM。
流程图如下图所示。
DATASEGMENT
SUMDW?
CNDW?
ASSUMECS:
MOVAX,0;
0送AX
MOVBX,0;
0送BX
LP:
INCBX;
BX加1
ADDAX,BX;
求累加和
CMPAX,1000;
比较
JBELP;
≤1000转
MOVSUM,AX
MOVCN,BX;
MOVAH,4CH
INT21H;
CODEENDS
ENDSTART;
【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。
我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;
如次序不对则使这两个数交换位置。
可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;
第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;
第三遍只需比较(N-3)次,……整个排序过程最多需(N-1)遍。
如下面的4个数即是采用冒泡排序比较的例子。
数108169032
第一遍101690328
第二遍169032108
第三遍903216108
程序流程图如图5.9所示。
BUFDW3,-4,6,7,9,2,0,-8,-9,-10,20
N=($-BUF)/2
STACKSEGNMENTSTACK
ASSUMECS:
CODE,DS:
MOVCX,N
DECCX
LOOP1:
MOVDX,CX
MOVBX,0
LOOP2:
MOVAX,BUF[BX]
CMPAX,BUF[BX+2]
JGEL
XCHGAX,BUF[BX+2]
MOVBUF[BX],AX
L:
ADDBX,2
JNELOOP2
MOVCX,DX
LOOPLOOP1
程序运行后,BUF区中的内容如下:
20,9,7,6,3,2,0,-4,-8,-9,-10
若要对N个无符号数按由大到小的顺序排列,只需将指令“JGEL”改为“JAEL”即可。
【例5.10】将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。
如二进制数10010011转换成字符串为‘10010011’。
要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。
入口参数:
DX存放待转换的二进制数
CX存放待转换数的位数(8位或16位)
DI存放ASCII码首地址
出口参数:
转换后的字符串存放在以DI作指针的字节存贮区中
程序清单:
NUM8DB93H
NUM16DW0ABCDH
ASCBUFDB20DUP(0)
CODE,SS:
MOVDX,0
MOVDL,NUM8;
转换二进制数送DX
MOVCX,8;
置位数8
LEADI,ASCBUF;
字符串首址→DI
CALLBTASC;
调用子程序BTASC
MOV[DI],BYTEPTR0DH
MOV[DI+1],BYTEPTR0AH
MOV[DI+2],BYTEPTR‘$’
LEADX,ASCBUF
MOVAH,9
MOVDX,NUM16
MOVCX,16;
置位数16
LEADI,ASCBUF
CALLBTASC
MOV[DL],BYTEPTR0DH
MOV[DL+1],BYTEPTR0AH
MOV[DL+2],BYTEPTR‘$’;
显示转换后的字符串
LEADX,ASCBUF
MOVAH,9
BTASCPROC
PUSHAX;
保存AX
MOVAL,0
CMPCX,8;
比较8位数
JNEL1;
直接转换16位数
MOVDH,DL;
8位数转换送DH
ROLDX,,1;
DX最高位移入CF
RCLAL,1;
CF移入AL最低位
ADDAL,30H
MOV[DI],AL
INCDI
LOOPL1
POPAX
RET
BTASCENDP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序 例题