汇编语言实验4涉及压缩BCD码数据的转换程序及DEBUG练习_第1页
汇编语言实验4涉及压缩BCD码数据的转换程序及DEBUG练习_第2页
汇编语言实验4涉及压缩BCD码数据的转换程序及DEBUG练习_第3页
汇编语言实验4涉及压缩BCD码数据的转换程序及DEBUG练习_第4页
汇编语言实验4涉及压缩BCD码数据的转换程序及DEBUG练习_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ASCII码与BCD码之间的转换1)字符的ASCII码表示计算机中存储的信息很多,其中一部分是用于数学计算的数据,另一部分则是表示某种含义的字符或字符串。由于从键盘输入的或屏幕显示的信息,都是用字符串的形式表示的。因此,微机中必须能够存储和处理字符和字符串。计算机中使用的字符包括有如下4类:字母:A、B、C、Y、Z、a、b、c、y和z。数字:0、1、2、3、9。专用符号:!、 控制字符:BEL(响铃)、LF(换行)、CR(回车) 这些字符在计算机内部都由特定的二进制数表示。目前在微机中,最常用的字符表示法是ASCII码(American Standard Code for Informatio

2、n Interchange,美国标准信息交换码)。在这种表示法中,每一个字符可以表示为一个8位的二进制数,即一个字节。其中。低7位用于表示该字符的ASCII值,最高位未定义,一般可用作奇偶校验位。常用字符的ASCII码表见表1.2。2)、十进制数的BCD码表示BCD码(Binary Code Decimal),又称“二进制表示的十进制数”,是一种非常适合数据输出的编码。一般而言,它可分为如下两种:(1)、压缩型BCD码:它用4位二进制数表示一位十进制数。即采用二进制数00001001分别表示十进制数中的09,而另6种组合10101111在BCD中则不允许出现;(2)、非压缩型BCD码:它用8位

3、二进制数,即一个字节表示一位十进制数。其高4位固定为0,而低4位采用二进制数00001001分别表示十进制数中的09。亦即用0000 00000000 1001分别表示十进制数中的09。而其余组合则不允许出现。表1列出了十进制数与BCD编码的对应关系。表1 BCD编码表BCD编码十进制数BCD编码十进制数00000001001000110100010101100111012345671000100110101011110011011110111189这六种情况在BCD码中不允许出现实验程序1.按如下步骤操作,了解 DEBUG 命令及其使用方法。 (1)打 DEBUG 进入 DEBUG 控制,显

4、示提示符 _ 。(2)用命令 F100 10F A 将A的ASCII码填入内存。(3)用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。再用命令 D100 观察内存情况,之后接用二个命令D 观察内存情况。再用命令D100:10F 观察内存区的情况,说明这次与上次内存区各个段地址是什么,为什么?(4)用命令 F110:11F A 重复上二项实验,设法用D命令找到并观察结果,进行比较。(5)用命令 E100 30 31 32 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? (6)用H命令检查下列各组1

5、6进制数加减结果并和你的手算结果比较: 34H,22H56H,78HA5,79H1284H,5678HA758,347FH 例如: H 34 22(7)用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。 (8)用R命令将AX,BX内容改写为1050H及23A8H。(9)用A命令在内存100H处键入下列内容: MOV BX, 8275HMOV AX,3412HADD BX,92A5HADC AX,2F65HADD BX,EAE6HADC AX,9C88H 用U命令检查键入的程序并记录,特别注意左边的机器码。 用T命令逐条运行这些指令,每运行一行检

6、查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。标志位显示10 CF CYNC ZF ZRNZ SF NGPL AF ACNA OF OVNV PF PEPO DF DNUP IF EIDI(1)对照书本中关于 debug操作的介绍对以上实验内容进行总结。(2)G命令的功能是什么?有那几种格式?(3)D命令的功能是什么?有那几种格式?(4)用P命令逐条运行上述指令,与T命令进行比较,阅看书本中关于这二个命令的说明,它们之间有什么不同,在本实验中为什么没有体现?本试验未体现2.在编译与连接生成执行程序之后利用DEBUG调试该程序,了解不同变量数据存储情况,了解变量的三种含义及用法,了解

7、加法、乘法运算方法及对标志位的影响。(在某些句后给出了单步执行该句后需要思考与记录的问题)。DATA SEGMENT A DW 35H,9AC9H DB 34H B DW 4CBEH,8872H DB 34H C DD 8A607H DB 34H D DD 98AB457H DB 34H E DB -48HDATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA ;数据段在那里?怎样看数据段中的内容? MOV DS,AX;在执

8、行一次单步后查看数据区,记录数据是怎样存放的。;对以下每句运行后分析:这一句的意义是什么?; 如果是加法,相加的数据是什么?在存储区什么位置?; 处理的结果在那里?; 对标志位的影响如何?; 观察一下,如果去掉“WORD PTR ”编译时会如何? MOV AX,OFFSET A+2 ;AX中值是多少?意义是什么? LEA AX,A+2 ; AX中值是多少?意义是什么? MOV AX,A+2 ADD AX,B+2 ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV BX,A ADC BX,B ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV AX,WORD PTR C AD

9、D AX,WORD PTR D ;多少加多少 MOV AX,WORD PTR C+2 ADC AX,WORD PTR D+2 ;多少加多少;对以下每句分析:数据是如何存放的?; 相乘结果在那里?; 对CF与OF的影响如何?特别注意进位与符号扩展并不完全对应 MOV AL,E MOV BL,-3 MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E MOV BL,3 MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E MOV BL,-3 IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么?

10、MOV AL,E MOV BL,-1 IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,E MOV BL,3 IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV BL,-1 MUL BL ;-1=ffh,cf=1。为什么? MOV AL,58h MOV BL,-1 iMUL BL ;-1,cf=0,高位全1。为什么? MOV AL,90h MOV BL,-1 MUL BL ;-1=ffh,cf=1。为什么? MOV AL,90h MOV BL,-1 IMUL BL ;-1,cf=0,高位全0。为什么? MOV AL,5

11、8h MOV BL,1 MUL BL ;*1,cf=0,高位全0。为什么? MOV AL,58h MOV BL,1 iMUL BL ;*1,cf=0,高位全0。为什么? MOV AL,90h MOV BL,1 MUL BL ;*1,cf=0,高位全0。为什么? MOV AL,90h MOV BL,1 IMUL BL ;*1,cf=0,高位全1。为什么? MOV AH,4CH INT 21HCODE ENDS END START(1)乘法运算时使CF与OF为0的情况其实不多见,你能否总结一下大致在什么情况下会出现它们为0的情况?(2)如果要看到数据中数据的存放情况,一种方法是用D ,另一种方法是

12、用DDS:。你用什么方法得到段地址?试用这二种方法观察数据区中数据存放情况,A、B、C、D、E的地址各是多少,为什么?3.检查下面那些指令是错误的,说明原因并改正。(用MASM对该程序进行编译,观察那些语句报错,报的是什么错?再看语句,根据语法与句法分析实际是什么错,在语句后加简单注释,说明错误原因,尝试进行修改,要求尽量使修改结果符合原设计意图。最终要求全部修改后能通过编译。)DATA SEGMENT BUF DB 3 DA1 DB ? C DB B,0DH,0AH,$ COUNT EQU $-CDATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK

13、ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AXMOV DL,255H INC COUNT MOV CS,DX CMP 280,BL PUSH DX LEA AL,C MOV BX,DA1DX SUB DI,SI ADD DX,BX MOV 80H,AX MOV DA1,AX ADD DI,10H MOV BX,OFFSET DA1 MOV SI+DI,BX INC CS MOV ES,DSPOP AHROL AX,2MOV BX,DA1DI MOV AH,4CH INT 21HCODE EN

14、DS END STARTASCII码与压缩型BCD码的相互转换4.十进制数的ASCII码转换为压缩型BCD码令数据段中自ASC_BUF开始的缓冲区内存放着若干个ASCII码表示的十进制数(每个单元存放一位十进制数),要求将这些ASCII码表示的十进制数转换为BCD码,并把两个相邻单元的BCD码合并在一个存储单元(若ASCII码的个数为奇数,则将首地址单元的十进制数对应的BCD码单独存放一个单元,其余的按统一的方法处理)。应用DEBUG跟踪执行程序,当程序执行到语句MOV AH,4CH 时,查看数据区的内容,分析运行结果。通过执行过程深入理解内存储器分段的概念。本程序中因有的位置使用了中文符号,

15、在编译时会报错,观察是如何报错的?检查问题出现在什么地方,将之改正后重新编译直到通过。 DATA SEGMENT ASC_BUF DB COUNT EQU $-ASC_BUF BCDBUF DB 10 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ASC_BUF MOV DI,OFFSET BCDBUF MOV CX,COUNT MOV BX,CX SHR BX,1 ;BX右移一位,等效于除2 JNC EVEN1 ;(CF)=0,则CX为

16、偶数 MOV BL,SI ;对首位单独进行处理 AND BL,0FH MOV DI,BL DEC CX INC SI INC DIEVEN1: MOV AL,SI AND AL,0FH ;清高4位为0 MOV BL,SI+1 AND BL,0FH ;清高4位为0 MOV DL,16 MUL DL ADD AL,BL MOV DI,AL ADD SI,2 INC DI DEC CX JNZ EVEN1 MOV AH,4CH INT 21HCODE ENDS END START(1)画出本程序程序流程图。(2)将改为,观察结果有何不同,分析程序中判断数字个数奇偶并“对首位单独进行处理”的意义与程序

17、设计方法。(3)总结将二个十六进制字符拼成一个八位二进制数的程序设计方法。5.压缩BCD码转换为十进制数的ASCII码将数据段中字节变量BCD_BUF为首地址的缓冲区中一个八位十进制数对应的压缩BCD码转换为ASCII码,并显示。DATA SEGMENTBCD_BUF DB 34H,25H,12H,97H ;十进制数DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATAMAIN PROC NEAR PUSH DS SUB AX,AXMOV AX,DATAMOV DS,AXMOV CX,4MOV SI,OFFSET BCD_BUFADD SI,3MOV DH,

18、0CHG_OUT1: PUSH CXMOV AL,SI ;取压缩BCD码DEC SI ;修改指针MOV BL,AL ;保存ALMOV CL,4ROR AL,CLAND AL,0FH ;取高半字节BCD码ADD AL,30H ;生成ASCII码MOV DL,ALMOV AH,2INT 21H ;标准设备输出MOV AL,BL ;从BL所保存的AL恢复ALAND AL,0FH ;取低半字节BCD码ADD AL,30H ;生成ASCII码MOV DL,ALMOV AH,2INT 21H ;标准设备输出 POP CX DEC CXJNZ CHG_OUT1RETMAIN ENDPCODE ENDS EN

19、D (1)对本程序不用执行执行文件的方式,而分别用DEBUG单步跟踪、分断点运行等二种方式操作,记录操作过程与执行结果。(2)总结从一个字节16进制数据获得其二个16进制数码的程序设计方法。二进制数与BCD码之间的转换6.二进制数转换为压缩BCD码将DX寄存器中存放的无符号二进制数(065535)转换为压缩BCD码(在程序中自行加一条语句,将一个数保存到DX中),保存在BCD_BUF缓冲区中。应用DEBUG跟踪执行程序,查看数据区的内容,分析运行结果DATA SEGMENTBCD_BUF DB 3 DUP(0) DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATAMAIN PROC NEAR PUSH DS SUB AX,AXMOV AX,DATAMOV DS,AXMOV DI,OFFSET BCD_BUFMOV AL,0MOV CX,5CLEAR_BUF: MOV DI,AL ;初始化缓冲区INC DIDEC CXJNZ CLEAR_BUFMOV DI,OFFSET BCD_BUFCHG_BCD1: MOV AX,DX ;转换开始MOV DX,0MOV CX,10DIV CXMOV BL,DLMOV DX,0MOV CX,10DIV CXMOV CL,4SHL DL,CL ;左移4位,等效于乘以1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论