汇编语言实验4涉及压缩bcd码数据的转换程序及debug练习Word文件下载.docx
- 文档编号:18726246
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:16
- 大小:169.53KB
汇编语言实验4涉及压缩bcd码数据的转换程序及debug练习Word文件下载.docx
《汇编语言实验4涉及压缩bcd码数据的转换程序及debug练习Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言实验4涉及压缩bcd码数据的转换程序及debug练习Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
0000
0001
0010
0011
0100
0101
0110
0111
1
2
3
4
5
6
7
1000
1001
1010
1011
1100
1101
1110
1111
8
9
这六种
情况在
BCD码
中不允
许出现
实验程序
1.按如下步骤操作,了解DEBUG命令及其使用方法。
(1)打DEBUG进入DEBUG控制,显示提示符'
_'
。
(2)用命令F10010F'
A'
将'
的ASCII码填入存。
(3)用命令D10010F观察存中的16进制码及屏幕右边的ASCII字符。
再用命令D100观察存情况,之后接用二个命令D观察存情况。
再用命令D100:
10F观察存区的情况,说明这次与上次存区各个段地址是什么,为什么?
(4)用命令F110:
11F'
重复上二项实验,设法用D命令找到并观察结果,进行比较。
(5)用命令E100303132……3F将30H-3FH写入地址为100开始的存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?
(6)用H命令检查下列各组16进制数加减结果并和你的手算结果比较:
①34H,22H②56H,78H③A5,79H④1284H,5678H⑤A758,347FH
例如:
H3422
(7)用R命令检查各寄存器容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的容。
(8)用R命令将AX,BX容改写为1050H及23A8H。
(9)用A命令在存100H处键入下列容:
MOVBX,8275H
MOVAX,3412H
ADDBX,92A5H
ADCAX,2F65H
ADDBX,EAE6H
ADCAX,9C88H
用U命令检查键入的程序并记录,特别注意左边的机器码。
用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
标志位显示10
CFCYNC
ZFZRNZ
SFNGPL
AFACNA
OFOVNV
PFPEPO
DFDNUP
IFEIDI
(1)对照书本中关于debug操作的介绍对以上实验容进行总结。
(2)G命令的功能是什么?
有那几种格式?
(3)D命令的功能是什么?
(4)用P命令逐条运行上述指令,与T命令进行比较,阅看书本中关于这二个命令的说明,它们之间有什么不同,在本实验中为什么没有体现?
本试验未体现
2.在编译与连接生成执行程序之后利用DEBUG调试该程序,了解不同变量数据存储情况,了解变量的三种含义及用法,了解加法、乘法运算方法及对标志位的影响。
(在某些句后给出了单步执行该句后需要思考与记录的问题)。
DATASEGMENT
ADW35H,9AC9H
DB34H
BDW4CBEH,8872H
CDD8A607H
DDD98AB457H
EDB-48H
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA;
数据段在那里?
怎样看数据段中的容?
MOVDS,AX
;
在执行一次单步后查看数据区,记录数据是怎样存放的。
对以下每句运行后分析:
这一句的意义是什么?
如果是加法,相加的数据是什么?
在存储区什么位置?
处理的结果在那里?
对标志位的影响如何?
观察一下,如果去掉“WORDPTR”编译时会如何?
MOVAX,OFFSETA+2;
AX中值是多少?
意义是什么?
LEAAX,A+2;
AX中值是多少?
MOVAX,A+2
ADDAX,B+2;
多少加多少,结果在那里?
等于多少?
有没有标志改变?
MOVBX,A
ADCBX,B;
MOVAX,WORDPTRC
ADDAX,WORDPTRD;
多少加多少
MOVAX,WORDPTRC+2
ADCAX,WORDPTRD+2;
对以下每句分析:
数据是如何存放的?
相乘结果在那里?
对CF与OF的影响如何?
特别注意进位与符号扩展并不完全对应
MOVAL,E
MOVBL,-3
MULBL;
多少乘多少,结果在那里?
为什么?
MOVBL,3
MOVBL,-3
IMULBL;
MOVBL,-1
MOVBL,-1
-1=ffh,cf=1。
MOVAL,58h
iMULBL;
-1,cf=0,高位全1。
MOVAL,90h
-1,cf=0,高位全0。
MOVBL,1
*1,cf=0,高位全0。
*1,cf=0,高位全1。
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(1)乘法运算时使CF与OF为0的情况其实不多见,你能否总结一下大致在什么情况下会出现它们为0的情况?
(2)如果要看到数据中数据的存放情况,一种方法是用D<
段地址>
<
偏移地址>
,另一种方法是用DDS:
<
偏移地址>
你用什么方法得到段地址?
试用这二种方法观察数据区中数据存放情况,A、B、C、D、E的地址各是多少,为什么?
3.检查下面那些指令是错误的,说明原因并改正。
(用MASM对该程序进行编译,观察那些语句报错,报的是什么错?
再看语句,根据语法与句法分析实际是什么错,在语句后加简单注释,说明错误原因,尝试进行修改,要求尽量使修改结果符合原设计意图。
最终要求全部修改后能通过编译。
)
BUFDB3
DA1DB?
CDB'
B'
0DH,0AH,'
$'
COUNTEQU$-C
MOVAX,DATA
MOVDL,255H
INCCOUNT
MOVCS,DX
CMP280,BL
PUSHDX
LEAAL,C
MOVBX,DA1[DX]
SUB[DI],[SI]
ADD[DX],BX
MOV80H,AX
MOVDA1,AX
ADD[DI],10H
MOVBX,OFFSETDA1
MOV[SI+DI],BX
INCCS
MOVES,DS
POPAH
ROLAX,2
MOVBX,DA1[DI]
ASCII码与压缩型BCD码的相互转换
4.十进制数的ASCII码转换为压缩型BCD码
令数据段中自ASC_BUF开始的缓冲区存放着若干个ASCII码表示的十进制数(每个单元存放一位十进制数),要求将这些ASCII码表示的十进制数转换为BCD码,并把两个相邻单元的BCD码合并在一个存储单元(若ASCII码的个数为奇数,则将首地址单元的十进制数对应的BCD码单独存放一个单元,其余的按统一的方法处理)。
应用DEBUG跟踪执行程序,当程序执行到语句MOVAH,4CH时,查看数据区的容,分析运行结果。
通过执行过程深入理解存储器分段的概念。
本程序中因有的位置使用了中文符号,在编译时会报错,观察是如何报错的?
检查问题出现在什么地方,将之改正后重新编译直到通过。
DATASEGMENT
ASC_BUFDB‘71542185’
COUNTEQU$-ASC_BUF
BCDBUFDB10DUP(?
DATAENDS
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
MOVAX,DATA
MOVSI,OFFSETASC_BUF
MOVDI,OFFSETBCDBUF
MOVCX,COUNT
MOVBX,CX
SHRBX,1;
BX右移一位,等效于除2
JNCEVEN1;
(CF)=0,则CX为偶数
MOVBL,[SI];
对首位单独进行处理
ANDBL,0FH
MOV[DI],BL
DECCX
INCSI
INCDI
EVEN1:
MOVAL,[SI]
ANDAL,0FH;
清高4位为0
MOVBL,[SI+1]
ANDBL,0FH;
MOVDL,16
MULDL
ADDAL,BL
MOV[DI],AL
ADDSI,2
JNZEVEN1
(1)画出本程序程序流程图。
(2)将‘71542185’改为‘471542185’,观察结果有何不同,分析程序中判断数字个数奇偶并“对首位单独进行处理”的意义与程序设计方法。
(3)总结将二个十六进制字符拼成一个八位二进制数的程序设计方法。
5.压缩BCD码转换为十进制数的ASCII码
将数据段中字节变量BCD_BUF为首地址的缓冲区中一个八位十进制数对应的压缩BCD码转换为ASCII码,并显示。
BCD_BUFDB34H,25H,12H,97H;
十进制数97122534
CODE,DS:
MAINPROCNEAR
PUSHDS
SUBAX,AX
MOVDS,AX
MOVCX,4
MOVSI,OFFSETBCD_BUF
ADDSI,3
MOVDH,0
CHG_OUT1:
PUSHCX
MOVAL,[SI];
取压缩BCD码
DECSI;
修改指针
MOVBL,AL;
保存AL
MOVCL,4
RORAL,CL
ANDAL,0FH;
取高半字节BCD码
ADDAL,30H;
生成ASCII码
MOVDL,AL
MOVAH,2
INT21H;
标准设备输出
MOVAL,BL;
从BL所保存的AL恢复AL
取低半字节BCD码
POPCX
JNZCHG_OUT1
RET
MAINENDP
END
(1)对本程序不用执行执行文件的方式,而分别用DEBUG单步跟踪、分断点运行等二种方式操作,记录操作过程与执行结果。
(2)总结从一个字节16进制数据获得其二个16进制数码的程序设计方法。
二进制数与BCD码之间的转换
6.二进制数转换为压缩BCD码
将DX寄存器中存放的无符号二进制数(0-65535)转换为压缩BCD码(在程序中自行加一条语句,将一个数保存到DX中),保存在BCD_BUF缓冲区中。
应用DEBUG跟踪执行程序,查看数据区的容,分析运行结果
BCD_BUFDB3DUP(0)
MOVDI,OFFSETBCD_BUF
MOVAL,0
MOVCX,5
CLEAR_BUF:
MOV[DI],AL;
初始化缓冲区
INCDI
DECCX
JNZCLEAR_BUF
CHG_BCD1:
MOVAX,DX;
转换开始
MOVDX,0
MOVCX,10
DIVCX
MOVBL,DL
SHLDL,CL;
左移4位,等效于乘以16
ANDDL,0F0H
ORDL,BL;
组合BCD码
MOV[DI],DL;
存储BCD码
MOVDX,AX
CMPDX,0
JNZCHG_BCD1
(1)假如保持在DX中数为6440,用debug调试,运行G=040,再用DDS:
0观察结果。
又更换DX中数为26440,用同样方法再看结果。
说明结果是怎样存放的。
7.压缩BCD码转换为二进制数
将BX寄存器中的四位压缩型BCD码转换为二进制数,并存放到DX中。
应用DEBUG跟踪执行程序,分析运行结果
CODESEGMENT
START:
MOVBX,3698H
MOVSI,BX
XORAX,AX
MOVCX,4;
BCD码共4位
CHG_AGAIN1:
MOVDI,0
PUSHCX
每个BCD码对应四位2进制数
CHG_AGAIN2:
SHLSI,1;
SI左移,最高位送CF
RCLDI,1;
CF最高位送DI
JNZCHG_AGAIN2;
将某位BCD码送DI
MULCX
ADDAX,DI;
二进制数合并
POPCX
JNZCHG_AGAIN1
MOVAH,4CH
INT21H
(1)将以上实验3、4、5、6所要求的压缩BCD码改为要求非压缩BCD码,求设计程序。
(2)第5、6题提到的数说明为二进制数,如果提到的数说明为十六进制数,意义是否相同?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 涉及 压缩 bcd 数据 转换 程序 debug 练习