程序.docx
- 文档编号:29988891
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:30
- 大小:26.96KB
程序.docx
《程序.docx》由会员分享,可在线阅读,更多相关《程序.docx(30页珍藏版)》请在冰豆网上搜索。
程序
1、f(X)=5X3+4X2-3X+2,要求编制程序计算自变量X=5时函数f(X)的值。
DATASEGMENT
XDW5
RESULTDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
MOVAX,5
MULX;5*X
ADDAX,4;5*X+4
MULX;(5*X+4)X
SUBAX,3;(5*X+4)X-3
MULX;((5*X+4)X-3)X
ADDAX,2;((5*X+4)X-3)X+2
MOVRESULT,AX;保存运算结果
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
2、比较两个无符号数的大小。
DATASEGMENT
ADB20H
BDB92H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,A;取数送AL
CMPB,AL;比较二数
JABGA;若B>A转BGA
MOVDL,‘A’
MOVBL,‘B’;准备显示A>B
JMPDISP
BGA:
MOVDL,‘B’
MOVBL,‘A’;准备显示B>A
DISP:
MOVAH,2
INT21H
MOVDL,‘>’
INT21H
MOVDL,BL
INT21H;显示比较结果
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
3、某应用程序主菜单有8个可选项,其入口地址分别记为R0、R1…R7。
要求编制程序根据变量N的值转向相应的处理程序(N为入口编号)。
DATASEGMENT
BASEDWR0,R1,R2,R3
DWR4,R5,R6,R7
NDB5
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,N;入口编号N送AL
ADDAL,AL;2×N→AL
MOVAH,0
MOVBX,OFFSETBASE;跳转表首地址送BX
ADDBX,AX;得到Rn的存放地址
MOVAX,[BX];入口地址送AX
JMPAX;跳转到相应的处理程序
R0:
┇;R0的处理程序
JMPOK
R1:
┇;R1的处理程序
JMPOK
┇
R7:
┇;R7的处理程序
OK:
MOVAH,4CH
INT21H;返回DOS操作系统
CODEENDS
ENDSTART
4、从BUF单元开始存有20个8位带符号数,要求统计其中的负数个数放在NEGA字节单元,并显示在CRT上(设负数个数在0~9之间)。
DATASEGMENT
BUFDB2,-1,56,-38,4,┅
COUNTEQU20
NEGADB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF;置数据指针SI
MOVDL,0;计数器清零
MOVCX,COUNT;置循环次数
LP:
MOVAL,[SI];取数送AL
ANDAL,AL;置标志位
JNSNEXT;为正,转NEXT
INCDL;为负,计数器加1
NEXT:
INCSI;修改指针
LOOPLP;未完,继续
MOVNEGA,DL;存结果
ORDL,30H;转换成ASCII码
MOVAH,2
INT21H;显示这组数中负数的个数
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
5、已知在内存中从STR单元开始放有一串字符,以‘$’作为结束标志,长度不超过100字节,要求统计该字符串的长度,并存于LEN单元。
DATASEGMENT
STRDB‘ABCDJKLLHH┅$’
LENDB0
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
STTDB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSP,SIZESTT
LEADI,STR;字符串首址送DI
MOVAL,‘$’;结束标志送AL
LP:
CMPAL,[DI];将串中字符与结束标志比较
JZSTOP;是‘$’字符,转STOP
INCLEN;不是‘$’字符,串长计数器加1
INCDI;修改地址指针
JMPLP;继续循环
STOP:
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
6、:
将内存区域中的两个单字节数相加,结果送第3字节,并将结果转换成十进制数送CRT显示(假设结果小于100)。
DATASEGMENT
LISTDB16,48,?
DATAENDS
CODESEGNENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CALLADSUB;两数相加并存放结果
CALLOUTPR;显示结果
MOVAH,4CH
INT21H;返回DOS
ADSUBPROC
MOVAL,LIST;取数送AL
ADDAL,LIST+1;两数相加
MOVLIST+2,AL;存结果
RET
ADSUBENDP
DISPLPROC
ORDL,30H
MOVAH,2
INT21H;显示DL中的字符
RET
DISPLENDP
OUTPRPROC
MOVAL,LIST+2;取数送AL
MOVAH,0;AH清零
MOVBL,10
DIVBL
MOVDL,AL;高位送DL
MOVBH,AH;低位送BH保存
CALLDISPL;显示高位
MOVDL,BH
CALLDISPL;显示低位
RET
OUTPRENDP
CODEENDS
ENDSTART
7、有两个多字节的压缩型十进制数分别存于从A和B单元开始的数据区中,试将其相加并将十进制结果存于从C单元开始的数据区中。
设压缩型十进制数长度为10个字节,被加数、加数和结果的低字节均存于低地址单元。
DATASEGMENT
ADB12H,38H,63H,…;10个被加数
BDB88H,27H,42H,…;10个加数
CDB10DUP(?
);结果单元
NEQU10;运算数据的字节数
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETA;置被加数的地址指针
MOVDI,OFFSETB;置加数的地址指针
MOVBX,OFFSETC;置结果地址指针
MOVCX,N
CLC
NEXT:
MOVAL,[SI];取被加数一个字节
ADCAL,[DI];与加数对应字节相加
DAA;十进制调整
MOV[BX],AL;存结果
INCSI
INCDI
INCBX;调整地址指针
LOOPNEXT;未完,继续
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
8、已知从DATA1单元开始存有10个字节的压缩BCD码,要求编程将其转为ASCII码并显示在CRT上。
DATASEGMENT
DATA1DB34H,68H,76H,…
NEQU$-DATA1;$代表当前地址,减去DATA1地址即为10。
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
STADB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVBX,OFFSETDATA1;BCD码首址送BX
MOVCX,N;置循环次数
LP:
MOVAL,[BX];取一个BCD码送AL
MOVDH,AL;保存此数
PUSHCX;保存CX
MOVCL,4
SHRAL,CL;将AL中BCD码的高位移到低位
POPCX;恢复CX
ORAL,30H;将AL中的高位BCD码转换为ASCII码
MOVDL,AL
MOVAH,2
INT21H;显示高位BCD码
ANDDH,0FH;取BCD的低位
ORDH,30H;将低位BCD码转换成ASCII码
MOVDL,DH
INT21H;显示低位BCD码
MOVDL,‘’
INT21H;显示空格
INCBX;修改指针
LOOPLP;未完,继续
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
9、编程实现把BUF开始100个单元中的正数(均小于100)转换为压缩格式的BCD码,并连续地放在BUF1起始的单元中。
DATASEGMENT
BUFDB56,78,89,…
BUF1DB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARE:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVDI,OFFSETBUF1
MOVDL,100
NEXT:
MOVAL,[SI]
MOVAH,0
MOVDH,10
DIVDH
MOVCL,4
SHLAL,CL
ORAL,AH
MOV[DI],AL
INCDI
INCSI
DECDL
JNZNEXT
XOVAH,4CH
INT21H
CODEENDS
ENDSTARE
10、在缓冲区BUF地址起有一字符串,其长度存于COUNT单元。
要求删除其中所有的‘A’字符,修改字符串长度并存回COUNT单元。
DATASEGMENT
COUNTDB20
BUFDB‘TTEQFSCFASDA┅’;共20个字符
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
STTDB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
MOVES,AX;装填附加段
MOVAX,STACK
MOVSS,AX;装填堆栈段
MOVCX,0;CX清零
MOVCL,COUNT;取字符串长度
MOVBL,CL;字符串原长送BL
LEADI,BUF;DI指向字符串首地址
MOVAL,‘A’;关键字送AL
CLD;清方向标志
LP:
REPNESCASB;检索‘A’字符
JZFOUND;找到转FOUND
JMPDONE;未找到,转DONE
FOUND:
MOVSI,DI;SI指向移动块源首址
DECDI;DI指向移动块目的首址
PUSHDI;保存原指针
PUSHCX;保存CX
REPMOVSB;剩余字符依次向前替补(删去‘A’字符)
DECBL;串长减1
POPCX;取回剩余字符数
POPDI;取回原‘A’字符地址
JMPLP;继续
DONE:
MOVCOUNT,BL;存删除后的字符串长度
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
11、从ARRAY开始的单元中存有10个16位无符号数,试编一完整程序找出其中最小数并存入MIN单元。
DATASEGMENT;数据段开始
ARRAYDW0F454H,4540H,0D214H,8354H,8210H,
0A673H,5656H,0021H,0567H,4228H
MINDW?
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
LEABX,ARRAY;传送变量的地址
MOVAX,[BX]
MOVCX,9
LP1:
INCBX
INCBX
CMPAX,[BX]
JBCONT1;AX<[BX],转移
MOVAX,[BX];AX>=[BX],AX←[BX]
CONT1:
LOOPLP1
MOVMIN,AX
MOVAH,4CH
INT21H;返回DOS
CODEENDS;代码段结束
ENDSTART;源程序结束
12、从DAT开始的数据区中放有100个8位的无符号数,编程统计其中奇数的个数,将结果存入RESULT单元。
【解】程序代码如下:
DATASEGMENT;数据段开始
DATDB26,45,44,32,90,2,1,81,2,120,5……
RESULTDB?
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
LEABX,DAT;传送变量的地址
XORAX,AX
XORDX,DX
MOVDL,2
MOVCX,100
LP1:
MOVAL,[BX]
DIVDL;余数在AH中
CMPAH,0
JECONT1
INCDH;DH用作计数器
CONT1:
INCBX
LOOPLP1
MOVRESULT,DH
MOVAH,4CH
INT21H;返回DOS
CODEENDS;代码段结束
ENDSTART;源程序结束
13、利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。
【解】调用1号系统功能,键入的字符送AL寄存器,并送屏幕显示输出。
调用2号系统功能,将DL寄存器中的内容送屏幕显示输出。
程序代码如下:
CODESEGMENT;代码段开始
ASSUMECS:
CODE
START:
XORAX,AX
INPU:
MOVAH,1
INT21H;键盘输入单字符送AL
MOVBL,‘$’
CMPAL,BL
JEEXT
SUBAL,20H;转换成大写字母
MOVDL,AL
MOVAH,2
INT21H;将DL中的字符送屏幕显示
JMPINPU
EXT:
MOVAH,4CH
INT21H;返回DOS
CODEENDS;代码段结束
ENDSTART;源程序结束
14、建立两个过程:
一个过程将16进制数变换成ASCII码,一个过程将ASCII码字符在屏幕上显示输出。
【解】程序代码如下:
DATASEGMENT;数据段开始
LISTDB?
;存储一个十六进制数(1位)
ASCDB?
;存储转换的ASCII码
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
CALLCHANGE
CALLOUTPTR
MOVAH,4CH
INT21H;返回DOS
CHANGEPROC
MOVAL,LIST
CMPAL,9
JANEXT1;AL>9,转移
ORAL,30H
JMPNEXT2
NEXT1:
ADDAL,37H
NEXT2:
MOVASC,AL
RET
CHANGEENDP
OUTPTRPROC
MOVDL,ASC
MOVAH,2
INT21H
RET
OUTPTRENDP
CODEENDS;代码段结束
ENDSTART;源程序结束
15、在AX中存放着压缩BCD码的十进制数。
要求:
(1)将AH中的数转换成二进制数。
(2)求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。
【解】
(1)将AH中的数转换成二进制数,结果存于DX中。
程序代码如下:
CODESEGMENT;代码段开始
ASSUMECS:
CODE
START:
MOVBX,AX;保存AX中的数据
ANDAH,0FH;千位置0
MOVAL,AH
MUL100
MOVDX,AX;百位结果存于DX中
MOVAH,BH
MOVCL,4;移位次数
SHRAH,CL;千位移到低4位
MOVAL,AH
MUL1000
ADDAX,DX
MOVDX,AX;百位加千位结果存于DX中
MOVAH,4CH
INT21H;返回DOS
CODEENDS;代码段结束
ENDSTART;源程序结束
(2)求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。
程序代码如下:
CODESEGMENT;代码段开始
ASSUMECS:
CODE
START:
MOVBX,AX;保存AX中的数据
MOVCL,4;移位次数
SHRAH,CL;千位移到AH低4位
ADDAH,30H;转换成ASCII码
MOVDL,AH
MOVAH,2
INT21H;调用2号系统功能,输出单字符
MOVAH,BH
ANDAH,0FH;取低4位
ADDAH,30H;转换成ASCII码
MOVDL,AH
MOVAH,2
INT21H;调用2号系统功能,输出单字符
MOVAL,BL
MOVCL,4;移位次数
SHRAL,CL;十位移到低4位
ADDAL,30H;转换成ASCII码
MOVDL,AL
MOVAH,2
INT21H;调用2号系统功能,输出单字符
MOVAL,BL
ANDAL,0FH;取低4位
ADDAL,30H;转换成ASCII码
MOVDL,AL
MOVAH,2
INT21H;调用2号系统功能,输出单字符
MOVAH,4CH
INT21H;返回DOS
CODEENDS;代码段结束
ENDSTART;源程序结束
16、已知从BUF单元开始存放着10个8位无符号数,要求编写汇编语言程序将这10个数去掉一个最大的,再去掉一个最小的,将其余的数的算术平均值计算出来并存于AVERG单字节单元。
【解】注意:
10个8位无符号数的累加和有可能超过8位,需要16位的寄存器存储。
寄存器分配:
DL:
最小值;DH:
最大值;CX:
循环次数;AX:
累加和。
本题的思路:
找出最小值,暂时存于DL,找出最大值,暂时存于DH,求10个数的和,再减去最小值和最大值,求8个数的平均值。
程序代码如下:
DATASEGMENT;数据段开始
BUFDB23H,26H,44H,98H,32H,72H,39H,62H,75H,48H
AVERGDB?
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
LEABX,BUF;传送变量的地址
XORAX,AX
MOVCX,9
MOVDL,[BX]
MOVDH,[BX]
MOVAL,[BX]
LP1:
INCBX
CMPDL,[BX];ifDL>[BX],thenDL←[BX]
JBECONT1;ifDL<=[BX],转移
MOVDL,[BX]
CONT1:
CMPDH,[BX];ifDH<[BX],thenDH←[BX]
JAECONT2;ifDL>=[BX],转移
MOVDX,[BX]
CONT2:
ADDAL,[BX]
ADCAH,0
LOOPLP1
SUBAL,DL
SBBAH,0
SUBAL,DH
SBBAH,0
MOVBL,8
DIVBL;平均值在AL中
MOVAVERG,AL
MOVAH,4CH
INT21H;返回DOS
CODEENDS;代码段结束
ENDSTART;源程序结束
17、从TABLE字节单元开始存有100个无符号数,试编程把数组中出现次数最多的数存入CH中,其出现次数存入CL中。
【解】程序代码如下:
DATASEGMENT;数据段开始
TABLEDB100DUP(?
)
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUME
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序