西电微机原理大作业.docx
《西电微机原理大作业.docx》由会员分享,可在线阅读,更多相关《西电微机原理大作业.docx(16页珍藏版)》请在冰豆网上搜索。
西电微机原理大作业
微机原理与接口技术
大作业
姓名:
021215班
学号:
第一次上机:
在全屏幕编辑软件下,建立以下汇编语言源程序。
执行结果:
指令
SRC寻址方式
SRC的地址
AX推算值
AX实际值
MOVAX,CX
寄存器寻址
无
0005
0005
MOVAX,500H
立即寻址
无
0500
0500
MOVAX,TABLE
直接寻址
DS:
0004
A5A4
A5A4
MOVAX,ES:
[BX]
寄存器间接寻址
ES:
0004
C5C4
C5C4
MOVAX,[BX+05H]
寄存器相对寻址
DS:
0009
AAA9
AAA9
MOVAX,SS:
[BX]+03H
寄存器相对寻址
SS:
0007
B8B7
B8B7
MOVAX,TABLE[BX]
寄存器相对寻址
DS:
0008
A9A8
A9A8
MOVAX,07H[BX]
寄存器相对寻址
DS:
000B
ACAB
ACAB
MOVAX,[BP]
寄存器间接寻址
SS:
0003
B4B3
B4B3
MOVAX,TABLE[BP]
寄存器相对寻址
DS:
0007
A8A7
A8A7
MOVAX,08H[BP]
寄存器相对寻址
SS:
000B
BCBB
BCBB
MOVAX,[BP+06H]
寄存器相对寻址
SS:
0009
BAB9
BAB9
MOVAX,DS:
[BP+03H]
寄存器相对寻址
DS:
0006
A7A6
A7A6
MOVAX,[BP]+05H
寄存器相对寻址
SS:
0008
B9B8
B9B8
MOVAX,ES:
[SI+03H]
寄存器相对寻址
ES:
0005
C6C5
C6C5
MOVAX,[DI+06H]
寄存器相对寻址
DS:
0007
A8A7
A8A7
MOVAX,[DI]+05H
寄存器相对寻址
DS:
0006
A7A6
A7A6
MOVAX,TABLE[SI]
寄存器相对寻址
DS:
0006
A7A6
A7A6
MOVAX,[SI]
寄存器间接寻址
DS:
0002
A3A2
A3A2
MOVAX,TABLE[DI]
寄存器相对寻址
DS:
0005
A6A5
A6A5
MOVAX,[SI]+05H
寄存器相对寻址
DS:
0007
A8A7
A8A7
MOVAX,[BX][DI+01H]
基址变址且相对寻址
DS:
0006
A7A6
A7A6
MOVAX,[BX][SI]+03H
基址变址且相对寻址
DS:
0009
AAA9
AAA9
MOVAX,TABLE[BX][SI]
基址变址且相对寻址
DS:
000A
ABAA
ABAA
MOVAX,ES:
[BX][DI]
基址变址寻址
ES:
0005
C6C5
C6C5
MOVAX,[BP][DI+02H]
基址变址且相对寻址
SS:
0006
B7B6
B7B6
MOVAX,TABLE[BP][DI]
基址变址且相对寻址
DS:
0008
A9A8
A9A8
MOVAX,ES:
[BP][SI]
基址变址寻址
ES:
0005
C6C5
C6C5
MOVAX,[BP][SI+05H]
基址变址且相对寻址
SS:
000A
BBBA
BBBA
MOVAX,03H[BP][DI]
基址变址且相对寻址
SS:
0007
B8B7
B8B7
MOVAX,[BP][SI]
基址变址寻址
SS:
0005
B6B5
B6B5
MOVAX,[BP+02H][DI+03H]
基址变址且相对寻址
SS:
0009
BAB9
BAB9
MOVAX,TABLE[BP+02H][DI+03H]
基址变址且相对寻址
DS:
000D
AEAD
AEAD
第二次上机:
1.编写求十进制数02121451与19931029之和的程序,并将和以十进制数的形式送屏幕显示。
编程要求与提示:
[1]两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2]和以压缩十进制数的形式存入SUM以下单元。
[3]将和送到屏幕显示部分功能的实现采用子程序的形式。
代码如下:
STACKSEGMENTSTACK'STACK'
DW100HDUP(?
)
STACKENDS
DATASEGMENT
ADD1DD02121451H;加数以组合十进制形式存放在双字单元
ADD2DD19931029H
SUMDD?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEASI,ADD1
LEADI,ADD2
LEABX,SUM
MOVAL,[SI]
ADDAL,[DI];最低位的一个字节相加
DAA;加法组合BCD码调整
MOV[BX],AL;结果存放在SUM第一个字节
MOVAL,[SI+1];第二个字节相加
ADCAL,[DI+1]
DAA
MOV[BX+1],AL
MOVAL,[SI+2]
ADCAL,[DI+2]
DAA
MOV[BX+2],AL
MOVAL,[SI+3]
ADCAL,[DI+3]
DAA
MOV[BX+3],AL
MOVDL,00;最高位字节有进位则显示"01"
ADCDL,00
CALLDISPSUM
MOVAH,4CH;返回DOS
INT21H
DISPSUMPROCNEAR;结果显示子程序
PUSHAX
PUSHBX
PUSHCX
PUSHSI
MOVSI,4
PUSHDX
MOVCX,5
LAB:
PUSHCX
PUSHBX
MOVAL,DL
MOVBL,DL
MOVCL,4;显示高位字节
SHRAL,CL
ADDAL,30H
MOVAH,02
MOVDL,AL
INT21H;显示一位字符
ANDBL,0FH;显示低位字节
ADDBL,30H
MOVAH,02
MOVDL,BL
INT21H
POPBX
POPCX
DECSI
MOVDL,[BX][SI];结果显示
LOOPLAB
POPDX
POPSI
POPCX
POPBX
POPAX
RET
DISPSUMENDP
CODEENDS
ENDSTART
运行截图:
2.有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
编程要求及提示:
[1]参加排序的数据及个数由学生自己定义。
[2]要将排序前的数组和排序后的数组在屏幕上显示出来。
代码如下:
STACKSEGMENTSTACK
DB256DUP(?
)
STACKENDS
DATASEGMENT
DATA1DW0,2,1,2,1,4,5,1
STRING1DB'Theoriginalnumbers:
',0DH,0AH,'$'
STRING2DB'Thenumbersfromlargetosmall:
',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,8
LEASI,DATA1;显示初始数据
L1:
MOVAX,[SI]
ADDSI,2
CALLDISPAX
CALLDISPCR
LOOPL1
MOVCX,7
LEASI,DATA1
ADDSI,14;指针指向最后一个数据
LP1:
PUSHCX
PUSHSI
LP2:
MOVAX,[SI];数据排序
CMPAX,[SI-2]
JBENOXCHG
XCHGAX,[SI-2];交换操作
MOV[SI],AX
NOXCHG:
DECSI;不需排序时继续
DECSI
LOOPLP2
POPSI
POPCX
LOOPLP1
LEADX,STRING2;显示字符串
MOVAH,09H
INT21H
MOVCX,8;显示排好序后数据
LEASI,DATA1
L2:
MOVAX,[SI]
ADDSI,2
CALLDISPAX
CALLDISPCR
LOOPL2
MOVAH,4CH
INT21H
DISPALPROC;显示AL内容子程序
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;十六进制数转换为ASCII码
CMPAL,10
JNGECHANG1
ADDAL,7
CHANG1:
ADDAL,30H
RET
CHANGENDP
DISPAXPROC;显示AX内容子程序
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
运行截图:
第三次上机:
编写如下程序,并在机器上调试成功。
程序采用菜单式选择,可以接收用户从键盘输入的五个命令(1-5),各命令功能分别为:
(1)按下“1”键,完成字符串小写字母变成大写字母。
用户输入一由英文大小写字母或数字0-9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其他字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单