32位实验.docx
- 文档编号:3907778
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:14
- 大小:28.76KB
32位实验.docx
《32位实验.docx》由会员分享,可在线阅读,更多相关《32位实验.docx(14页珍藏版)》请在冰豆网上搜索。
32位实验
查找最大值
DATASEGMENT;数据段定义
BUFDB30,25,56,100,78,97,45,34,44
COUNTEQU$-BUF
MAXDB?
MINDB?
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT;代码段定义
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVCX,COUNT;数据个数
MOVSI,OFFSETBUF
MOVAL,[SI]
DECCX;循环次数为个数减1
AGA:
INCSI
CMPAL,[SI]
JANEXT
MOVAL,[SI]
NEXT:
LOOPAGA
MOVMAX,AL;结果处理
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
7实验问题探讨
(1)伪指令中的表达式是在什么阶段进行运算得出结果的?
(2)如果数据为一组有符号数,如何修改?
(3)如果在查找最大值的同时查找最小值并存于MIN单元中,应如何实现?
DATASEGMENT;数据段定义
BUFDB30,25,56,100,78,97,45,34,44
COUNTEQU$-BUF
MAXDB?
MINDB?
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT;代码段定义
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVCX,COUNT;数据个数
MOVSI,OFFSETBUF
MOVAL,[SI]
MOVBL,[SI]
DECCX;循环次数为个数减1
AGA:
INCSI
CMPAL,[SI]
JANEXT2
MOVAL,[SI]
NEXT2:
CMPBL,[SI]
JBNEXT
MOVBL,[SI]
NEXT:
LOOPAGA
MOVMAX,AL;结果处理
MOVMIN,BL;结果处理
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
运行时:
-u0-u-g=02b-d0
3.实验内容
(1)利用汇编语言实现以下过程:
首先在屏幕显示Whatisyourname:
然后等待用户从键盘输入姓名存入内存指定区间,输出回车换行后,显示ok!
。
(2)从键盘输入一串字符以空格为结束标记,并按逆序显示输出。
实验内容
(1)参考程序
DATASEGMENT;数据段定义
STR1DB'Whatisyouname:
$'
STR2DB'OK!
$'
STR3DB20
DB?
DB20DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVDX,OFFSETSTR1;显示
MOVAH,9
INT21H
MOVDX,OFFSETSTR3;接受输入字符
MOVAH,10
INT21H
MOVDL,0DH;输出回车换行
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
MOVDX,OFFSETSTR3;显示ok!
MOVAH,9
INT21H
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
(1)实验内容
(2)参考程序
DATASEGMENT;数据段定义
BUFDB100DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,0
AGA:
MOVAH,1;接受字符
INT21H
CMPAL,'';是否是空格
JZNEXT
MOV[SI],AL;存入字符
INCSI
INCCX
JMPAGA
NEXT:
MOVDL,0DH;输出回车换行
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
LOP1:
DECSI;逆序输出
MOVDL,[SI]
MOVAH,2
INT21H
LOOPLOP1
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
6.思考题
(1)利用堆栈实现程序2的要求。
(2)利用9号调用编写DOS界面下的简易菜单项。
答案:
DATASEGMENT;数据段定义
STR1DB'Whatisyouname:
$'
STR2DB'OK!
$'
STR3DB20
DB?
DB20DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVDX,OFFSETSTR1;显示
MOVAH,9
INT21H
MOVDX,OFFSETSTR3;接受输入字符
MOVAH,10
INT21H
MOVDL,0DH;输出回车换行
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
MOVDX,OFFSETSTR2;显示ok!
MOVAH,9
INT21H
MOVSI,OFFSETSTR3
INCSI
MOVCH,0
MOVCL,[SI]
LOP1:
INCSI;输出
MOVDL,[SI]
MOVAH,2
INT21H
LOOPLOP1
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
实验内容
(1)键盘输入一字符,以二进制形式显示其ASCII值。
例如:
输入字符A在屏幕显示01000001。
(2)键盘输入一串数字串,以空格为结束标记,统计其中数字字符的个数存入CX中,求这些数字之和存入BX中。
例如:
输入1234则CX=4BX=0AH.
(3)键盘输入十进制整数(假定范围为0-32767),然后转换成二进制格式存储。
.流程框图和参考程序
(1)实验内容
(1)参考程序
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVAH,1
INT21H
MOVBL,AL
MOVCX,8
AGA:
SHLBL,1
MOVDL,30H
ADCDL,0
MOVAH,2
INT21H
LOOPAGA
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
)实验内容
(2)参考程序
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVCX,0
MOVBX,0
INPUT:
MOVAH,1
INT21H
CMPAL,''
JZEXIT
CMPAL,30H
JBINPUT
CMPAL,39H
JAINPUT
INCCX
SUBAL,30H
MOVAH,0
ADDBX,AX
JMPINPUT
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
(2)实验内容(3)参考程序
图3-4ASCII码转换为二进制数
DATASEGMENT;数据段定义
KEY_BUFDB10
DB?
DB10DUP(?
)
DATA1DW?
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段定义
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVDX,OFFSETKEY_BUF;
MOVAH,0AH
INT21H
MOVSI,OFFSETKEY_BUF+1;
MOVBL,[SI]
INCSI
MOVAX,0
TRANS:
MOVDX,10
MULDX
MOVDH,0
MOVDL,[SI]
ANDDL,0FH
ADDAX,DX
INCSI
DECBL
JNZTRANS
MOVDATA1,AX
CALLOUTPUT
RET
MAINENDP
CODEENDS
ENDSTART
实验原理图
6实验步骤
(1)流水灯实验:
实验连线
图4-4流水灯实验接线图
Ø该模块的WR、RD分别连到PC104总线接口模块的IOWR、IORD。
Ø该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到PC104总线接口模块的数据(D0~D7)、地址线(A0~A7)。
Ø8255模块选通线CE连到PC104总线接口模块的IOY0。
Ø8255的PA0~PA7连到发光二极管的L1~L8;8255的PB0~PB7连到发光二极管的L9~L16。
②编写程序,实现流水灯功能。
参考程序
(1)流水灯参考程序
P8255_AEQU0180H;BaseAddressRegister2
P8255_BEQU0181H
P8255_CEQU0182H
P8255_MODEEQU0183H
DELAY_SETEQU40H;延时常数
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
LADB?
LBDB?
MY_DATAENDS
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATAASSUMESS:
MY_STACK
MAIN:
MOVAX,MY_DATA
MOVDS,AX
MOVDX,P8255_MODE
MOVAL,80H
OUTDX,AL
MOVDX,P8255_A
MOVAL,7FH
OUTDX,AL
MOVLA,AL
MOVDX,P8255_B
MOVAL,0FEH
OUTDX,AL
MOVLB,AL
CALLDELAY
A1:
MOVAL,LA
RORAL,1
MOVLA,AL
MOVDX,P8255_A
OUTDX,AL
MOVAL,LB
ROLAL,1
MOVLB,AL
MOVDX,P8255_B
OUTDX,AL
CALLDELAY
CALLBREAK
JMPA1
MY_PROCENDP
DELAYPROCNEAR
MOVCX,DELAY_SET
D1:
MOVAX,-1
D2:
DECAX
JNZD2
LOOPD1
RET
DELAYENDp
BREAKPROCNEAR
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
RET
BREAKENDP
MY_CODEENDS
ENDMAIN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 32 实验