8086汇编语言程序设计Word格式.docx
《8086汇编语言程序设计Word格式.docx》由会员分享,可在线阅读,更多相关《8086汇编语言程序设计Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
请编程完成此功能。
数据缓冲区参考数据定义如下:
EXAMSCOREDB01;
学号
DB89,76,54,77,99;
单科成绩
DW?
;
该学生的总分
DB02;
DB79,88,64,97,92;
实验4综合程序设计
2.掌握汇编语言程序的设计方法。
1.编写汇编程序接收用户从键盘键入的月份数,在终端上显示该月的英文缩写名。
当用户按下ESC键时,程序退出,返回DOS。
参考程序执行过程如下:
month?
5/MAYmonth?
9/SEPmonth?
2.按15行X16列的表格形式显示ASCII码为10H〜FFH的所有字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码为0)分隔。
3.在第2题程序的基础上进行修改。
将显示表格的行、列数由固定的15行16列改
为由用户从键盘输入。
然后,按用户输入的行列值进行显示。
4.编写汇编程序将内存数据区保存的若干个带符号16位数据按从大到小的顺序排列后,以十进制真值的形式在屏幕上显示。
1.1******************************************************************DATASEGMENT
xDB3
yDB1zdw?
wdb23
rdb6
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOVAX,DATAMOVDS,AXmoval,wsubal,[x]cbwmovbl,5idivblsubal,[y]movbl,raddbl,2imulblmov[z],ax
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
1.2******************************************************************DATASEGMENT
xdb63
ydb?
MOVAX,DATAMOVDS,AXmoval,[x]shrdl,1shral,1
rcldl,1
mov[y],dl
2.1******************************************************************
DATASEGMENT
STRINGDB'
g3tRfdtfTR34'
MESSAGEONEDB'
Pleaseinputthenumberofstring(<
10):
$
MESSAGETWODB'
Thenumberofstringis:
$'
DATA
START:
MOVAX,DATA
MOVDS,AX
movah,9
movdx,offsetmessageoneint21h
MOVAH,1
MOVBL,AL
MOVDL,10
MOVAH,2
SUBBL,30H
CBW
MOVCX,BX
MOVAL,0
MOVBX,OFFSETSTRING
BEGIN:
MOVDL,[BX]
CMPDL,'
a'
JBRE
z'
JARE
INCAL
RE:
INCBX
LOOPBEGIN
ADDAL,30H
movbl,al
movdx,offsetmessagetwoint21h
MOVDL,BL
2.2******************************************************************DATASEGMENT
MAXLENDB32
ACTLENDB?
STRINGONEDB32DUP⑺
STRINGTWODB32DUP⑺
Pleaseinputthestring(<
31):
Theencrypticstringis:
MOVDS,AXmovah,9movdx,offsetmessageoneint21h
MOVDX,OFFSETMAXLEN
MOVAH,0AH
SUBCH,CH
MOVCL,ACTLEN
ADDDX,2
MOVBX,DX
MOVBP,OFFSETSTRINGTWO
SUBDL,20HMOV[BP],DL
INCBP
movAL,'
MOV[BP],AL
MOVAH,9
MOVDX,OFFSETSTRINGTWO
3.1******************************************************************
MAINPROCFAR
CODE
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,0101111010010101B
CALLDISPDEC
CALLCRLF
CALLDISPHEX
RET
MAINENDP
DISPDECPROCNEAR
PUSHBX
PUSHCX
PUSHDX
PUSHF
MOVBX,AX
MOVCX,10000D
CALLDEC_DIV
MOVCX,1000D
MOVCX,100D
MOVCX,10D
CALLDEC_DIVMOVCX,1DCALLDEC_DIVPOPFPOPDXPOPCXPOPBXPOPAXRET
DEC_DIVPROCNEARMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRET
DEC_DIVENDPDISPDECENDP
DISPHEXPROCNEAR
PUSHAXPUSHBXPUSHCXPUSHDXPUSHFMOVBX,AXMOVCH,4MOVCL,4
ROTATE:
ROLBX,CLMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLPRINTITADDAL,7H
PRINTIT:
MOVDL,ALMOVAH,2INT21H
DECCH
JNZROTATE
POPF
POPDX
POPCX
POPBX
POPAX
RETDISPHEXENDP
CRLFPROCNEARPUSHAXPUSHDXMOVDL,0AHMOVAH,2INT21HPOPDX
POPAXRET
CRLFENDP
3.2******************************************************************
EXAMSCOREDB01
DB89,76,54,77,99
DB02
DB79,88,64,97,92
DB03
DB43,45,67,87,98
DB04
DB76,65,27,76,98
DB05
DB67,78,23,87,87
MOVCX,5
MOVBX,OFFSETEXAMSCORE
CALLSUM
ADDBX,2
LOOPRE
SUMPROCNEAR
MOVAX,0
BEGAIN:
MOVDH,0
ADCAX,DX
LOOPBEGAIN
MOV[BX],AX
SUMENDP
MOVCX,1D
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVDL,AL
ADDDL,30H
DEC_DIVENDP
DISPDECENDP
CRLFPROCNEAR
MOVDL,0AH
实验3扩展************************************************************
.**********************************
datasegment
string。
db'
error!
stringldb'
inputdecnumber:
string2db'
inputhexnumber:
string301db'
outputdecnumber
(1):
$string302db'
outputdecnumber
(2):
$XDB5DUP⑺
string4db'
outputhexnumber:
dataends
.***********************************;
;
***********************************;
CALLKEY_DEC
CALLCRLF
CALLDISPDECZ
CALLKEY_HEX
.********************************;
:
********************************
输入十进制数并用二进制存储在BX^KEY_DECPROCNEAR
REERR:
MOVDX,OFFSETSTRING1
MOVBX,0
DEC_RE:
CMPAL,0DH
JEDEC_EXIT
SUBAL,30H
JLDEC_ERR
CMPAL,9
JGDEC_ERR
XCHGAX,BX
MOVCX,10
MULCX
ADDBX,AX
JMPDEC_RE
DEC_ERR:
CALLERROR
JMPREERR
DEC_EXIT:
KEY_DECENDP
.**********************************;
**********************************
输入十六进制数并用二进制存储在B>
e
KEY_HEXPROCNEAR
HEX_REERR:
MOVDX,OFFSETSTRING2
MOVBX,0HEX_RE:
JEHEX_EXIT
JLHEX_ERR
CMPAL,0AHJLNEXTSUBAL,7CMPAL,0AHJLHEX_ERRCMPAL,10HJLNEXTSUBAL,20HCMPAL,0AHJLHEX_ERRCMPAL,10HJNLHEX_ERRNEXT:
MOVCL,4
SHLBX,CL
MOVAH,0
JMPHEX_REHEX_ERR:
JMPHEX_REERRHEX_EXIT:
POPAXRETKEY_HEXENDP.********************************;
********************************;
用十进制输出BX^二进制的数方法
DISPDECPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHF
MOVDX,OFFSETSTRING301MOVAH,9INT21H
MOVCX,10000DCALLDEC_DIVMOVCX,1000DCALLDEC_DIVMOVCX,100DCALLDEC_DIVMOVCX,10DCALLDEC_DIVMOVCX,1DCALLDEC_DIVPOPF
POPDXPOPCXPOPBXPOPAXRETDEC_DIVPROCNEAR
MOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRET
DEC_DIVENDPDISPDECENDP.**********************************;
**********************************;
用十进制输出BX^二进制的数方法二DISPDECZPROCNEAR
PUSHAXPUSHBX
MOVDX,OFFSETSTRING302
movBX,0dispdecz_re:
MOVX[BX],DL
cmpax,0
JNEDISPDECZ_REdispdecz_next:
CMPBX,0
JEDISPDECZ_EXIT
DECBX
MOVDL,X[BX]
JMPDISPDECZ_NEXTDISPDECZ_EXIT:
DISPDECZENDP.******************************;
*******************************;
用十六进制输出BX^二进制数DISPHEXPROCNEAR
MOVDX,OFFSETSTRING4
MOVCH,4
ROLBX,CL
MOVAL,BL
ANDAL,0FH
CMPAL,3AH
JLPRINTIT
ADDAL,7H
DISPHEXENDP
.******************************;
******************************;
输出换行符
MOVDL,0DH
输出错误提示
ERRORPROCNEAR
MOVDX,OFFSETSTRING0
MOVAH,9INT21H
ERRORENDP
4.1******************************************************************
MONTHDB
'
JAN'
'
FEB'
MAR'
APR'
MAY'
JUN'
JUL'
AUG'
SEP'
OCT'
NOV'
DEC'
NUMDB2DUP⑺
STRONEDB'
month?
10,$
STRTWODB'
monthERROR!
10,'
MOVDX,OFFSETSTRONE
MOV[NUM],BL
M