汇编实验报告Word格式.docx
《汇编实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《汇编实验报告Word格式.docx(35页珍藏版)》请在冰豆网上搜索。
功能
调用参数
结果
1
键盘输入并回显
AL=输出字符
2
显示单个字符(带Ctrl+Break检查)
DL=输出字符
光标在字符后面
6
显示单个字符(无Ctrl+Break检查)
8
从键盘上读一个字符
AL=字符的ASCII码
9
显示字符串
DS:
DX=串地址,
‘$’为结束字符
光标跟在串后面
4CH
返回DOS系统
AL=返回码
例如,实现键盘输入并回显的完整代码:
MOVAH01H
INT21H
三、实验结果
1.将指定数据区的字符串数据”Letusgo!
”以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示:
2.在屏幕上显示自己的学号姓名信息
四、实验原理
DATASEGMENT
MESDB'
NUMBER:
03099018'
0AH,0DH,'
NAME:
Feng
Xiaokang'
$'
CENTDB'
Letusgo!
'
'
ENTEDB0AH,0DH,'
INFODB'
Origin:
'
ASCIDB'
ASCII:
MSG1DB'
Ifyouwanttoquitpleasepress...q/Q...'
MSG2DB0AH,0DH,'
Char:
$'
RSDB'
ASCII:
SDDB'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA;
存储数据
MOVDS,AX
MOVDX,OFFSETMES;
显示数据
MOVAH,09H
INT21H
MOVDX,OFFSETMSG1
MOVAH,09H
MOVDX,OFFSETCENT
MOVSI,DX
T:
MOVAL,[SI]
CMPAL,'
JZC1
ANDAL,0F0H;
取高4位
MOVCL,4
SHRAL,CL
CMPAL,0AH;
是否是A以上的数
JBA
ADDAL,07H
A:
ADDAL,30H
MOVDL,AL;
showcharacter
MOVAH,02H
INT21H
;
MOVAL,DS:
[SI]
MOVAL,[SI]
ANDAL,0FH;
取低4位
CMPAL,0AH
JBB
ADDAL,07H
B:
ADDAL,30H
MOVDL,AL
INT21H
INCSI
LOOPT
C1:
MOVDX,OFFSETMSG2
MOVAH,01h
INT21h
CMPAL,'
q'
JEexit
Q'
JEexit
MOVSD,AL
MOVDX,OFFSETRS;
showmessage
MOVSI,OFFSETSD
MOVAL,[SI]
JBC2
C2:
ADDAL,30H
MOVAL,DS:
JBC3
C3:
LOOPC1
C:
INT21H
LOP:
MOVAH,08H
INT21H
CMPAL,'
JMPLOP
EXIT:
MOVAX,4C00H;
gobacktodos
CODEENDS
endSTART
五、实验流程图
六、实验总结
这是我学习汇编以来,第一次用汇编写程序,费了我不只一个实验课时,纠结了不只一天。
同样是助记码,真的不懂如何组织的。
郁闷之下,用C写出来发泄一下,才猜想应该跟C的思考方式完全不同。
后来开始研究代码,真的不愧是底层啊,详细到一个字节高低位的安排,如此地考验硬件知识。
实验二数码转换实验
1.掌握不同进制数及编码相互转换的程序设计方法。
2.掌握运算类指令编程及调试方法。
3.掌握循环程序的设计方法。
二、实验设备
PC机一台。
三、实验内容及说明
1.重复从键盘输入不超过5位的十进制数,按回车键结束输入;
2.将该十进制数转换成十六进制数;
结果以16进制数的形式显示在屏幕上;
3.如果输入非数字字符,则报告出错信息,重新输入;
4.直到输入“Q”或‘q’时程序运行结束。
四、实验结果
1.输入3306
2.结果0CEA
3.输入一个较大的数65537
4.显示456A6
5.输入非法值
五、实验原理图
源代码:
NUMBERDB'
No.:
Fengxiaokang'
ERRORDB0AH,0DH,'
ERROR!
PLEASETRYAGAIN!
INPDB0AH,0DH,'
Pleaseinputanumber,youcanexitbyinputing"
q"
or"
Q"
XPDB0AH,0DH,'
CODESEGMENT
DATA
start:
MOVAX,DATA
MOVDX,OFFSETNUMBER
MOVBX,0H
MOVDX,OFFSETINP
input:
MOVAH,01H
INT21H
CMPAL,0DH;
数字输入完毕
JEchange
CMPAL,'
;
退出
JEEXIT
JEEXIT
CMPAL,030h;
非数字
jlerrors
cmpAL,039h
jgerrors
SUBAL,30H;
运算
pushAX
movAX,BX
movDX,0000AH
mulDX
movBX,AX
popAX
addBL,AL
CMPBX,00H
JZZERO
jmpinput
errors:
MOVDX,OFFSETERROR
jmpinput
ZERO:
MOVCL,4
JMPLOOPS
change:
CMPBX,00H
JZERRORS
loops:
MOVDX,BX
ANDDX,0F000H
SHRDX,12
CMPDX,0AH;
JLC2
ADDDX,07H
ADDDX,30H
;
showchArActer
SHLBX,4
LOOPloops
MOVDX,OFFSETXP
JMPINPUT
MOVAX,4C00H
ENDSTART
原理
十进制数可以表示为:
Dn*10n+Dn-1*10n-1+…+D0*100=Di*10i
其中Di代表十进制数1、2、3、…、9、0。
上式可以转换为:
Di*10i=(((Dn*10n+Dn-1)*10+Dn-2)*10+…+D1)*10+D0
由上式可归纳出十进制数转换为二进制数的方法:
从二进制数的最高位Dn开始做乘10加次位的操作。
依此类推,则可求出二进制数结果。
数码转换对应关系
十六进制
BCD码
二进制机器码
ASCII码
七段码
共阳
共阴
0000
30H
40H
3FH
0001
31H
79H
06H
0010
32H
24H
5BH
3