西电微机原理上机作业完整版.docx
《西电微机原理上机作业完整版.docx》由会员分享,可在线阅读,更多相关《西电微机原理上机作业完整版.docx(22页珍藏版)》请在冰豆网上搜索。
西电微机原理上机作业完整版
上机作业〔一〕
指令
SRC寻址方式
SRC的地址
AX推算值
AX实际值
MOVAX,CX
存放器寻址
0005
0005
MOVAX,500H
立即寻址
0500
0500
MOVAX,TABLE
直接寻址
1541:
0004
A5A4
A5A4
MOVAX,ES:
[BX]
存放器间接寻址
1542:
0004
C5C4
C5C4
MOVAX,[BX+05H]
存放器相对寻址
1541:
0009
AAA9
AAA9
MOVAX,SS:
[BX]+03H
存放器相对寻址
153F:
0007
B8B7
B8B7
MOVAX,TABLE[BX]
存放器相对寻址
1541:
0008
A9A8
A9A8
MOVAX,07H[BX]
存放器相对寻址
1541:
000B
ACAB
ACAB
MOVAX,[BP]
存放器间接寻址
153F:
0003
B4B3
B4B3
MOVAX,TABLE[BP]
存放器相对寻址
1541:
0007
A8A7
A8A7
MOVAX,08H[BP]
存放器相对寻址
153F:
000B
BCBB
BCBB
MOVAX,[BP+06H]
存放器相对寻址
153F:
0009
BAB9
BAB9
MOVAX,DS:
[BP+03H]
存放器相对寻址
1541:
0006
A7A6
A7A6
MOVAX,[BP]+05H
存放器相对寻址
153F:
0008
B9B8
B9B8
MOVAX,ES:
[SI+03H]
存放器相对寻址
1542:
0005
C6C5
C6C5
MOVAX,[DI+06H]
存放器相对寻址
1541:
0007
A8A7
A8A7
MOVAX,[DI]+05H
存放器相对寻址
1541:
0006
A7A6
A7A6
MOVAX,TABLE[SI]
存放器相对寻址
1541:
0006
A7A6
A7A6
MOVAX,[SI]
存放器间接寻址
1541:
0002
A3A2
A3A2
MOVAX,TABLE[DI]
存放器相对寻址
1541:
0005
A6A5
A6A5
MOVAX,[SI]+05H
存放器相对寻址
1541:
0007
A8A7
A8A7
MOVAX,[BX][DI+01H]
基址变址且相对寻址
1541:
0006
A7A6
A7A6
MOVAX,[BX][SI]+03H
基址变址且相对寻址
1541:
0009
AAA9
AAA9
MOVAX,TABLE[BX][SI]
基址变址且相对寻址
1541:
000A
ABAA
ABAA
MOVAX,ES:
[BX][DI]
基址变址寻址
1542:
0005
C6C5
C6C5
MOVAX,[BP][DI+02H]
基址变址且相对寻址
153F:
0006
B7B6
B7B6
MOVAX,TABLE[BP][DI]
基址变址且相对寻址
1541:
0008
A9A8
A9A8
MOVAX,ES:
[BP][SI]
基址变址寻址
1542:
0005
C6C5
C6C5
MOVAX,[BP][SI+05H]
基址变址且相对寻址
153F:
000A
BBBA
BBBA
MOVAX,03H[BP][DI]
基址变址且相对寻址
153F:
0007
B8B7
B8B7
MOVAX,[BP][SI]
基址变址寻址
153F:
0005
B6B5
B6B5
MOVAX,[BP+02H][DI+03H]
基址变址且相对寻址
153F:
0009
BAB9
BAB9
MOVAX,TABLE[BP+02H][DI+03H]
基址变址且相对寻址
1541:
000D
AEAD
AEAD
1.编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
STACKSEGMENTSTACK'STACK'
DW100HDUP(?
)
TOPLABELWORD
STACKENDS;堆栈段
DATASEGMENT
ADD1DD12678532H
ADD2DD21736543H
SUMDD?
DATAENDS;数据段
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEASP,TOP
LEASI,ADD1
LEADI,ADD2
MOVAL,[SI]
ADDAL,[DI]
DAA
MOVBYTEPTRSUM,AL
MOVAL,[SI+1]
ADCAL,[DI+1]
DAA
MOVBYTEPTRSUM+1,AL
MOVAL,[SI+2]
ADCAL,[DI+2]
DAA
MOVBYTEPTRSUM+2,AL
MOVAL,[SI+3]
ADCAL,[DI+3]
DAA
MOVBYTEPTRSUM+3,AL
MOVAX,WORDPTRSUM+2
CALLDISPAX
MOVAX,WORDPTRSUM
CALLDISPAX
MOVAH,4CH
INT21H
DISPALPROCNEAR
PUSHAX
PUSHCX
PUSHDX
PUSHAX
MOVCL,4
SHRAL,CL
CALLCHANG
MOVAH,02
MOVDL,AL
INT21H
POPAX
ANDAL,0FH
CALLCHANG
MOVAH,02
MOVDL,AL
INT21H
POPDX
POPCX
POPAX
RET
DISPALENDP
CHANGPROCNEAR
CMPAL,10
JNGECHANG1
ADDAL,7
CHANG1:
ADDAL,30H
RET
CHANGENDP
DISPAXPROCNEAR
XCHGAL,AH
CALLDISPAL
XCHGAH,AL
CALLDISPAL
RET
DISPAXENDP
CODEENDS
ENDSTART
2.有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
STACKSEGMENTSTACK
DB256DUP(?
)
STACKENDS
DATASEGMENT
DATA1DW7800H,6832H,0000H,87H,1275H,0EC34H
STRING1DB'inputnumber:
',0DH,0AH,'$'
STRING2DB'Thenumbersfromlargetosmallis:
',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEADX,STRING1
MOVAH,09H
INT21H
MOVCX,6
LEASI,DATA1
L1:
MOVAX,[SI]
ADDSI,2
CALLDISPAX
CALLDISPCR
LOOPL1
MOVCX,5
LEASI,DATA1
ADDSI,10
LP1:
PUSHCX
PUSHSI
LP2:
MOVAX,[SI]
CMPAX,[SI-2]
ENOXCHG
XCHGAX,[SI-2]
MOV[SI],AX
NOXCHG:
DECSI
DECSI
LOOPLP2
POPSI
POPCX
LOOPLP1
LEADX,STRING2
MOVAH,09H
INT21H
MOVCX,6
LEASI,DATA1
L2:
MOVAX,[SI]
ADDSI,2
CALLDISPAX
CALLDISPCR
LOOPL2
MOVAH,4CH
INT21H
DISPALPROC
PUSHAX
PUSHCX
PUSHDX
PUSHAX
MOVCL,4
SHRAL,CL
CALLCHANG
MOVAH,02H
MOVDL,AL
INT21H
POPAX
ANDAX,0FH
CALLCHANG
MOVAH,02H
MOVDL,AL
INT21H
POPDX
POPCX
POPAX
RET
DISPALENDP
CHANGPROC
CMPAL,10
JNGECHANG1
ADDAL,7
CHANG1:
ADDAL,30H
RET
CHANGENDP
DISPAXPROC
XCHGAL,AH
CALLDISPAL
XCHGAH,AL
CALLDISPAL
RET
DISPAXENDP
DISPCRPROC
PUSHAX
PUSHDX
MOVAH,2
MOVDL,0AH
INT21H
MOVAH,2
MOVDL,0DH
INT21H
POPDX
POPAX
RET
DISPCRENDP
CODEENDS
ENDSTART
3.编写如下程序,并在机器上调试成功。
程序采用菜单式选择,可以接收用户从键盘输入的四个命令〔1-4〕,各命令功能分别为:
〔1〕按下“1〞键,完成字符串小写字母变成大写字母。
〔2〕按下“2〞键,完成找最大值
〔3〕按下“3〞键,完成排序
〔4〕按下“4〞键,完毕程序运行,返回系统提示符。
DISPLMACROSTR
PUSHDX
PUSHAX
LEADX,STR
MOVAH,09H
INT21H
POPAX
POPDX
ENDM
ISCONTINUEMACROL
DISPS15,10,SMENU
MOVAH,08H
INT21H
CMPAL,1BH
JNEL
JMPMAIN
ENDM
CURSORMACROCURX,CURY
PUSHAX
PUSHBX
PUSHDX
MOVAH,02H
MOVDH,CURX
MOVDL,CURY
MOVBH,0
INT10H
POPDX
POPBX
POPAX
ENDM
DISPSMACROX,Y,STR
PUSHAX
PUSHBX
PUSHDX
MOVAH,02H
MOVBH,00H
MOVDH,X
MOVDL,Y
INT10H
LEADX,STR
MOVAH,09H
INT21H
POPDX
POPBX
POPAX
ENDM
SCROLLMACRON,ULR,ULC,LRR,LRC,ATT
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,06H
MOVAL,N
MOVCH,ULR
MOVCL,ULC
MOVDH,LRR
MOVDL,LRC
MOVBH,ATT
INT10H
POPDX
POPCX
POPBX
POPAX
ENDM
PREPMACROT
LEASI,INBUF+1
LEADI,OUTBUF
SCROLL21,2,0,22,79,0FH
DISPS3,20,T
DISPS6,2,CAPION
DISPS8,2,INCAP
MOVAH,0AH
INT21H
MOVCH,0
MOVCL,[SI]
INCSI
ENDM
STACKSEGMENTSTACK'STACK'
DB100HDUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
BASEDWMAIN,LTC,FMV,SORTS,EXIT
WELCMDB'Welcometothisprogram!
$'
MMENUCDB'Pleaseinputthenumber!
$'
MMENU1DB'1-LowercaseLettersToCapitalLetters$'
MMENU2DB'2-FindTheMaximumfigure$'
MMENU3DB'3-Sort$'
MMENU4DB'4-Exit!
$'
SMENUDB'PressAnyKeyTorestart,Press"ESC"ToReturnToMainMenu!
$'
WROCAPDB'WRONG!
Youhavepress""key!
Pleaseinputanumberbetween1and4!
$'
CAPIONDB'PleaseInputYourStringsandEndWith"Enter"Key!
$'
INCAPDB'YourInputIs:
$'
INBUFDB100
DB?
DB100DUP(?
)
OUTCAPDB'MyOutputIs:
$'
OUTBUFDB100DUP(?
)
MAXCAPDB'ThecharofmaxASCIIis:
.$'
ERRINFDB'ERROR!
Pleasechecktheformatyouinput!
$'
TDINVDB'Invalidtimedata!
Inputagain!
$'
NODATCAPDB'Youhaveinputnothing!
$'
TIMEDB8DUP(':
'),12DUP('')
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEASP,TOP
LEADX,INBUF
CLC
MAIN:
SCROLL0,0,0,24,79,0
SCROLL25,0,0,24,79,50H
SCROLL21,2,0,22,79,0FH
DISPS8,20,MMENUC
DISPS10,20,MMENU1
DISPS12,20,MMENU2
DISPS14,20,MMENU3
DISPS16,20,MMENU4
ML:
CURSOR19,1DH
MOVAH,01H
INT21H
CMPAL,31H
JLERROR
CMPAL,35H
JGERROR
ANDAX,00FH
LEABX,BASE
SHLAL,1
ADDBX,AX
JMPWORDPTR[BX]
;CMPAL,'1'
;JELTC
;CMPAL,'2'
;JEFMV
;CMPAL,'3'
;JESORTS
;CMPAL,'4'
;JEEXIT
ERROR:
CMPAL,0DH
JEMCR
MOV[WROCAP+23],AL;Otherchar
MOV[WROCAP+24],''
JMPD
MCR:
MOVWORDPTR[WROCAP+23],'RC'
D:
DISPS20,5,WROCAP;Showthewronginformation
JMPML
LTC:
CALLLLTOCL
ISCONTINUELTC
FMV:
CALLFMAXV
ISCONTINUEFMV
SORTS:
CALLSORT
ISCONTINUESORTS
EXIT:
SCROLL0,0,0,24,79,0
MOVAH,4CH
INT21H
LLTOCLPROC
REFLASHL:
PREPMMENU1
CMPCL,0
JEREFLASHL
LL1:
MOVAL,[SI]
CMPAL,'a'
MTOB;NOCHANGE
CMPAL,'z'
JAMTOB
SUBAL,20H;Convert
MTOB:
MOV[DI],AL
INCSI
INCDI
LOOPLL1
MOVBYTEPTR[DI],'$'
DISPS10,2,OUTCAP
DISPS10,17,OUTBUF
RET
LLTOCLENDP
FMAXVPROC
PUSHBX
REFLASHF:
PREPMMENU2
CMPCL,0
JEREFLASHF
MOVAL,0
FL1:
CMPAL,[SI]
JANEXT
MOVAL,[SI]
NEXT:
INCSI
LOOPFL1
MOV[MAXCAP+26],AL
DISPS10,2,MAXCAP
POPBX
RET
FMAXVENDP
SORTPROC
PREPMMENU3
DECCX
ADDSI,CX
MOVBYTEPTR[SI+1],'$'
LP1:
PUSHCX
PUSHSI
LP2:
MOVAL,[SI]
CMPAL,[SI-1]
ENOXCHG
XCHGAL,[SI-1]
MOV[SI],AL
NOXCHG:
DECSI
LOOPLP2
POPSI
POPCX
LOOPLP1
DISPS10,2,OUTCAP
DISPS10,17,INBUF[2]
RET
SORTENDP
BCDASCPROCNEAR
PUSHBX
CBW
MOVBL,10
DIVBL
ADDAL,30H
MOVTIME[SI],AL
INCSI
ADDAH,30H
MOVTIME[SI],AH
INCSI
POPBX
RET
BCDASCENDP
CODEENDS
ENDSTART
按下4键