汇编语言上机实验报告
时间:2013-4-19,19:00-21:30
地点:南一楼803室
实验人员:王
一、题目
从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,相等显示“MATCH!”,不相等显示“NOMATCH!”。
二、实验要求
(1)使用10号功能调用输入字符串;
(2)使用9号功能调用输出提示信息。
三、寄存器分配和变量定义说明
1.存储单元分配
2.寄存器分配
四、流程图
五、源程序
.386
DATASEGMENTUSE16
BUF1DB50
DB50DUP(0)
BUF2DB50
DB50DUP(0)
CRLFDB0DH,0AH,'
SENT2DB"NOMATCH!
STACKSEGMENTUSE16STACKDB300DUP(0)
STACKENDS
CODESEGMENTUSE16
ASSUMEDS:DATA,SS:STACK,CS:CODE
START:MOV
L1:MOV
L2:MOV
L3:MOV
E_IT:MOV
CODEENDS
六、实验步骤A_,DATADS,A_D_,BUF1AH,1021HD_,CRLFAH,921HD_,BUF2AH,1021HD_,CRLFAH,921HBL,BUF1+1BH,0DL,BUF2+1DH,0C_,B_D_,B_L1L2D_,OFFSETSENT2AH,921HE_ITDL,BUF1+2BL,BUF2+2DL,BLL1BUF1BUF2C_L2L3D_,OFFSETSENT1AH,921HE_ITAH,4CH21HSTART
1.使用编辑程序XXX录入源程序,存盘文件名为XXX。
2.使用MASM6.0汇编源文件。即MASMT1;
3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。
4.使用连接程序XXX将汇编生成的XXX文件连接成执行文件。
即LINKT1;
5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成XXX文件。
6.执行该程序。即在命令行提示符后输T1后回车,观察执行现象。
7.使用XXX观察T1的执行情况。即TDT1回车
(1)观察CS、IP、SP、DS、ES、SS的值。
(2)单步执行开始2条指令,观察DATA的实际值,以及DS的改变情况。
(3)观察DS:0开始数据区,找到各变量在数据段中的位置和值。
七、实验记录(包括实验条件、输入/输出、错误和修改等信息的记录)
八、体会
一、题目
编写一个向用户提供指定字符串的ASCII码的程序。
二、实验要求
若用户需要知道某个字符的ASCII码,则从键盘上键入该字符,此时程序
调用子程序RADI_将该字符的ASCII码按十六进制和十进制输出。例如:THEASCIICODEOFAIS41H(65D)
三、寄存器分配和变量定义说明
1.存储单元分配
2.寄存器分配
四、流程图
五、源程序
.386
DATASEGMENTUSE16
SENT1DB"THEASCIICODEOF
SENT2DB"IS
BUFDB15DUP(0)
DATAENDS
STACKSEGMENTUSE16STACK
DB200DUP(0)
STACKENDS
CODESEGMENTUSE16
ASSUMEDS:DATA,SS:STACK,CS:CODE
START:MOVA_,DATA
MOVDS,A_
LEAD_,OFFSETSENT1
MOVAH,9
INT21H
MOVAH,1
INT21H
MOVCL,AL
CMPAL,0DH;遇到回车结束程序JZE_IT
LEAD_,OFFSETSENT2
MOVAH,9
INT21H
MOVEA_,EC_
MOVEB_,16
LEASI,BUF
CALLRADI_;调用子程序显示十六进制MOVBYTEPTR[SI],'H'
MOVBYTEPTR[SI+1],'
LEAD_,BUF
MOVAH,9
INT21H
MOVDL,'';显示空格
MOVAH,2
INT21H
MOVDL,'(';显示左括号'('
MOVAH,2
INT21H
MOVEA_,EC_
MOVEB_,10
LEASI,BUF
CALLRADI_;调用子程序显示十进制MOVBYTEPTR[SI],'D'
MOVBYTEPTR[SI+1],'
LEAD_,BUF
MOVAH,9
INT21H
MOVDL,')'
MOVAH,2
INT21H
JMPE_IT
RADI_PROC
PUSHC_
PUSHED_
LOP1:_ORED_,ED_
DIVEB_
PUSHD_
INCC_
OREA_,EA_
JNZLOP1
LOP2:POPA_
CMPAL,10
JBL1
ADDAL,7
L1:ADDAL,30H
MOV[SI],AL
INCSI
LOOPLOP2
POPED_
POPC_
RADI_ENDP
E_IT:MOVAH,4CH
INT21H
CODEENDS
ENDSTART
六、实验步骤;显示左括号(
1.使用编辑程序XXX录入源程序,存盘文件名为XXX。
2.使用MASM6.0汇编源文件。即MASMT2;
3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。
4.使用连接程序XXX将汇编生成XXX文件连接成可执行文件。即LINKT2;
5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成XXX文件。
6.执行该程序。即在命令行提示符后输T1后回车,观察执行现象。
7.使用XXX观察T1的执行情况。即TDT1回车
(1)观察CS、IP、SP、DS、ES、SS的值。
(2)单步执行开始2条指令,观察DATA的实际值,以及DS的改变情况。
(3)观察DS:0开始数据区,找到各变量在数据段中的位置和值。
七、实验记录(包括实验条件、输入/输出、错误和修改等信息的记录)
八、体会
一、题目
输入一个字符(0–9之间),输出其对应的英文单词。例如:输入1,则输出one.
二、实验要求
在输出字符串时,不允许使用分支语句(转移指令)
三、寄存器分配和变量定义说明
1.存储单元分配
2.寄存器分配
四、流程图
五、源程序
.386
DATASEGMENTUSE16
INPUTDB"PLEASEINPUT_(0~9):
ENGDB
"ZERO
INERRDB0AH,0DH,"INPUTERROR!TRYAGAIN
CRLFDB0DH,0AH,'
DATAENDS
STACKSEGMENTUSE16STACK
DB250DUP(0)
STACKENDS
CODESEGMENTUSE16
ASSUMECS:CODE,DS:DATA,SS:STACK
START:MOVA_,DATA
MOVDS,A_
NE_T:MOVD_,OFFSETINPUT
MOVAH,9
INT21H
MOVAH,1
INT21H
CMPAL,48
JBERROR
CMPAL,57
JAERROR
ANDAL,0FH
MOVB_,OFFSETNUM
ADDBL,AL
ANDBH,00H
MOVSI,DS:[B_]
MOVB_,OFFSETENG
LEAD_,CRLF
MOVAH,9
INT21H
LEAD_,[B_][SI]
ANDDH,00H
MOVAH,9
INT21H
JMPE_IT
ERROR:
LEAD_,CRLF
MOVAH,9
INT21H
MOVD_,OFFSETINERR
MOVAH,9
INT21H
JMPE_IT
E_IT:MOVAH,4CH
INT21H
CODEENDS
ENDSTART
六、实验步骤
1.使用编辑程序XXX录入源程序,存盘文件名为XXX。
2.使用MASM6.0汇编源文件。即MASMT3;
3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。
4.使用连接程序XXX将汇编生成的XXX文件连接成执行文件。即LINKT3;
5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成XXX文件。
6.执行该程序。即在命令行提示符后输T3后回车,观察执行现象。
7.使用XXX观察T3的执行情况。即TDT3回车
(1)观察CS、IP、SP、DS、ES、SS的值。
(2)单步执行开始2条指令,观察DATA的实际值,以及DS的改变情况。
(3)观察DS:0开始数据区,找到各变量在数据段中的位置和值。
七、实验记录(包括实验条件、输入/输出、错误和修改等信息的记录)
八、体会