汇编语言实验4涉及压缩BCD码数据的转换程序及DEBUG练习

合集下载

汇编实验报告(-)调试程序DEBUG的使用

汇编实验报告(-)调试程序DEBUG的使用

汇编实验报告(-)调试程序DEBUG的使用《汇编语言程序设计》实验报告实验一调试程序DEBUG 的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。

二、内容及步骤1.DEBUG 命令使用表 1.1 DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16 进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug 的规则,则将以“error”提示,并用“^”指示错误位置。

许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。

其中,段基地址可以是段寄存器或数值;偏移地址是数值。

如果不输入段地址,则采用默认值,可以是缺省段寄存器值。

如果没有提供偏移地址,则通常就是当前偏移地址。

1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。

2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。

注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。

3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。

图1-1 Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L 字节长度”。

D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D [地址] ;显示当前或指定开始地址的主存内容D [范围] ;显示指定范围的主存内容图1-2 D命令调用左边部分是主存逻辑地址,中间是连续16 个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。

钱晓捷新版汇编语言程序设计习题答案(修改)详解

钱晓捷新版汇编语言程序设计习题答案(修改)详解

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.3、什么是汇编语言源程序、汇编程序、目标程序?1.4、汇编语言与高级语言相比有什么优缺点?1.5、将下列十六进制数转换为二进制和十进制表示(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6、将下列十进制数转换为BCD码表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示(1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)681.9、完成下列二进制数的运算(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001(5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。

1.13、什么是DOS和ROM-BIOS?1.14、简述PC机最低1MB主存空间的使用情况。

汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解1、显示命令D① D [地址]② D [范围]如不指定范围,一次显示8行×16个字节。

-D ;默认段寄存器为DS,当前偏移地址-D DS:100 / -D CS:200-D 200:100-D 200;200为偏移地址,默认段寄存器DS-D DS:100 110/ -D 100 L 102.修改命令E① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。

DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。

② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。

-E DS:100 F3 ‘AB’ 8D。

3.添充命令FF 范围数据表;将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。

-F DS:0 L5 01,02,03,04,05-F DS:0 L5 01 02 03 04 05(空格分隔)-F DS:0 L5 FF ;5个字节重复使用FF4.显示修改寄存器命令RR;★显示所有寄存器和标志位状态;★显示当前CS:IP指向的指令。

显示标志时使用的符号:标志标志=1 标志=0OF OV NVDF DN UPIF EI DISF NG PLZF ZR NZAF AC NAPF PE POCF CY NC5.汇编命令AA [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。

注释:①在DEBUG下编写简单程序即使用A命令。

②每条指令后要按回车。

③不输入指令按回车,或按Ctrl+C结束汇编。

④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。

6.反汇编命令U① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。

汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。

2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。

3.练习DEBUG常用命令的使用。

4.熟悉8086的寄存器。

5.了解程序的执行过程。

二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。

2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。

3.预习使用DEBUG单步、断点及连续执行程序的命令。

三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。

本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。

DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。

汇编语言程序设计实验DEBUG基本命令的使用

汇编语言程序设计实验DEBUG基本命令的使用
JMP RESTORE
ERROR:
MOV AH,9
LEA DX,WARN
INT 21H
JMP RESTINT 21H
CODES ENDS
END START
调试分析
运行截图
教师评阅:
年月日
评分
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
RESTORE:
MOV AH,9
LEA DX,HINT
INT 21H
MOV AH,10
LEA DX,STRING
INT 21H
MOV BL,STRING+1
MOV BH,0
LEA SI,STRING+2
MOV BYTE PTR [SI+BX],'$'
MOV CX,BX
MOV BL,2
CHECK:
CMP STRING[BX],'A'
JL ERROR
CMP STRING[BX],'Z'
JG ERROR
ADD BL,1
LOOP CHECK
MOV BL,STRING+1
MOV BH,0
MOV CX,BX
MOV BL,2
《微机原理与汇编语言程序设计》实验(上机)报告
班级·学号姓名实验日期任课教师
实验名称
实验一DEBUG基本命令的使用
验证型
实验目的及要求:
1. 掌握DEBUG的基本命令及功能;
实验内容:
1.编写一个小程序,从键盘接收一个大写字母,存放到指定内存单元BUF1,并转换成为对应的小写字符,存放到内存单元BUF2。上机编辑、汇编、连接并运行。

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

DEBUG命令练习

DEBUG命令练习

实验一、调试程序DEBUG实验目的:1、学习汇编语言的一种调试工具DEBUG 的使用方法2、以简单的传送指令(MOV)为例,掌握存储器操作数寻址方式书写格式3、掌握14个寄存器基本功能,理解存储器偏移地址,物理地址的概念实验内容:1、显示存储器单元内容的命令-D(书写格式,使用方法)2、显示和修改寄存器内容的命令-R(书写格式,使用方法)3、修改存储器单元内容的命令-E(书写格式,使用方法)4、反汇编命令–U,汇编命令–A(书写格式,使用方法)5、运行命令-T,-G,退出命令-Q等实验结果:实验二、汇编语言程序的上机过程实验目的:1、熟练掌握用汇编语言设计、编写、调试、运行程序的方法。

实验内容:1、编写出源程序、画出程序的流程图、2、用汇编程序MASM对源程序汇编产生目标文件*.OBJ,用连接程序LINK产生可执行文件*.EXE。

3、用DEBUG 进行调试。

MOV AX, 1234HMOV BX,5678HPUSH BXPUSH AXPOP BX ;执行后BX= (1)POP AX ;执行后AX= (2)MOV AX,6384H ;执行后AH= (3)MOV CL,4ROR AL,CL ;执行后AL= (4)AND AL,0F0H ;执行后AL= (5)实验三、数据传送指令实验目的:1、进一步加深对寄存器,存储器操作数、立即数概念理解。

2、掌握存储器操作数各种寻址方式的格式。

3、理解进栈出栈时指令的执行过程,累加器的端口地址表示。

4、理解地址传送指令源操作数都为存储器操作数。

5、理解标志寄存器传送指令。

实验内容:1. 若定义DAT DD 12345678H,则DAT+2字节单元的数据是()。

A. 78HB. 56HC.34HD. 12H2. 某计算机字长为16位,其内存容量为1M字节,按字(或字节)编址,它的寻址空间为()。

A. 512KBB. 512KC. 1024KD. 1024KB3.若程序中的数据定义如下:ORG 0030HDA T1 DB 10 DUP (?)DA T2 EQU 12HDA T3 EQU 34HDA T4 DW $+3 ,56H则数据项$+3 的值为()A. 003BHB. 003CHC. 003DHD. 003EH实验四、算术运算指令实验目的:1、掌握加法,减法和比较指令对OF,CF影响,进行一种简单的归纳。

汇编语言程序调试及工具软件DEBUG

汇编语言程序调试及工具软件DEBUG

15
15、S检索 格式:S 起始地址 结束地址 值表 S 起始地址 L字节数 值表 功能:在指定内存范围内检索值表指定的字符,如果找到,则显示 检索到的单元地址;如果没找到,则显示提示符。 例: 设内存DS:0000H开始存入1,2,3, ‘A’ , ‘B’ , ‘A’ , ‘B’ 要求检索字符‘A’ , ‘B’ , ‘F’ -SDS:0 06 A 1542:0003 1542:0005 -SDS:0 06 B 1542:0004 1542:0006 -SDS:0 06 F -
通过调试工具检查功能的正确性。
2
二、调试工具软件DEBUG
1、简介 面向汇编语言的动态调试工具,有19条命令。 通过跟踪、测试对.EXE和.COM文件动态跟踪调试。 查找文件中的错误及运行结果。 可以直接编写、调试小程序。 2、DEBUG的启动方式
(1)在DOS状态下直接输入
C:DEBUG ADD.EXE (2)在DOS状态下输入 C:DEBUG -NADD.EXE -L
17
16
16、C比较 格式:C 起始地址 结束地址 目的地址 C 起始地址 L字节数 目的地址 功能:比较两个数据块内容,如果不相同,则显示其内容和地址。 默认为数据段,目的地址只包含偏移地址。 例:把ES:0开始的10个字节内容与DS:100H开始的区域进行比较, 找出与之不同的内容。 -CES:0 LA DS:100 执行结果: 82DD:0000 03 2D 82CD:100 82DD:0002 00 02 82CD:102 82DD:0003 05 09 82CD:103 82DD:0008 04 66 82CD:108 17、Q退出 格式:-Q 功能:退出DEBUG命令。
9
例2:从CS:0004开始执行3条指令。 -T=4 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.. 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 Information Interchange,美国标准信息交换码)。

在这种表示法中,每一个字符可以表示为一个8位的二进制数,即一个字节。

其中。

低7位用于表示该字符的ASCII值,最高位未定义,一般可用作奇偶校验位。

常用字符的ASCII码表见表1.2。

2)、十进制数的BCD码表示BCD码(Binary Code Decimal),又称“二进制表示的十进制数”,是一种非常适合数据输出的编码。

一般而言,它可分为如下两种:(1)、压缩型BCD码:它用4位二进制数表示一位十进制数。

即采用二进制数0000~1001分别表示十进制数中的0~9,而另6种组合1010~1111在BCD中则不允许出现;(2)、非压缩型BCD码:它用8位二进制数,即一个字节表示一位十进制数。

其高4位固定为0,而低4位采用二进制数0000~1001分别表示十进制数中的0~9。

亦即用0000 0000~0000 1001分别表示十进制数中的0~9。

而其余组合则不允许出现。

表1列出了十进制数与BCD编码的对应关系。

1.按如下步骤操作,了解DEBUG 命令及其使用方法。

(1)打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。

(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命令检查下列各组16进制数加减结果并和你的手算结果比较:①34H,22H ②56H,78H ③A5,79H ④1284H,5678H ⑤A758,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命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。

并注意标志位有无变化。

标志位显示 1 0CF CY NCZF ZR NZSF NG PLAF AC NAOF OV NVPF PE PODF DN UPIF EI DI(1)对照书本中关于 debug操作的介绍对以上实验内容进行总结。

(2)G命令的功能是什么?有那几种格式?(3)D命令的功能是什么?有那几种格式?(4)用P命令逐条运行上述指令,与T命令进行比较,阅看书本中关于这二个命令的说明,它们之间有什么不同,在本实验中为什么没有体现?本试验未体现2.在编译与连接生成执行程序之后利用DEBUG调试该程序,了解不同变量数据存储情况,了解变量的三种含义及用法,了解加法、乘法运算方法及对标志位的影响。

(在某些句后给出了单步执行该句后需要思考与记录的问题)。

DATA SEGMENTA DW 35H,9AC9HDB 34HB DW 4CBEH,8872HDB 34HC DD 8A607HDB 34HD DD 98AB457HDB 34HE DB -48HDATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA ;数据段在那里?怎样看数据段中的内容?MOV DS,AX;在执行一次单步后查看数据区,记录数据是怎样存放的。

;对以下每句运行后分析:这一句的意义是什么?; 如果是加法,相加的数据是什么?在存储区什么位置?; 处理的结果在那里?; 对标志位的影响如何?; 观察一下,如果去掉“WORD PTR ”编译时会如何?MOV AX,OFFSET A+2 ;AX中值是多少?意义是什么?LEA AX,A+2 ; AX中值是多少?意义是什么?MOV AX,A+2ADD AX,B+2 ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV BX,AADC BX,B ;多少加多少,结果在那里?等于多少?有没有标志改变? MOV AX,WORD PTR CADD AX,WORD PTR D ;多少加多少MOV AX,WORD PTR C+2ADC AX,WORD PTR D+2 ;多少加多少;对以下每句分析:数据是如何存放的?; 相乘结果在那里?; 对CF与OF的影响如何?特别注意进位与符号扩展并不完全对应MOV AL,EMOV BL,-3MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,3MUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,-3IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,-1IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV AL,EMOV BL,3IMUL BL ;多少乘多少,结果在那里?等于多少?有没有标志改变?为什么? MOV BL,-1MUL BL ;-1=ffh,cf=1。

为什么?MOV AL,58hMOV BL,-1iMUL BL ;-1,cf=0,高位全1。

为什么?MOV AL,90hMOV BL,-1MUL BL ;-1=ffh,cf=1。

为什么?MOV AL,90hMOV BL,-1IMUL BL ;-1,cf=0,高位全0。

为什么?MOV AL,58hMOV BL,1MUL BL ;*1,cf=0,高位全0。

为什么?MOV AL,58hMOV BL,1iMUL BL ;*1,cf=0,高位全0。

为什么?MOV AL,90hMOV BL,1MUL BL ;*1,cf=0,高位全0。

为什么?MOV AL,90hMOV BL,1IMUL BL ;*1,cf=0,高位全1。

为什么?MOV AH,4CHINT 21HCODE ENDSEND START(1)乘法运算时使CF与OF为0的情况其实不多见,你能否总结一下大致在什么情况下会出现它们为0的情况?(2)如果要看到数据中数据的存放情况,一种方法是用D<段地址> <偏移地址>,另一种方法是用DDS:< 偏移地址>。

你用什么方法得到段地址?试用这二种方法观察数据区中数据存放情况,A、B、C、D、E的地址各是多少,为什么?3.检查下面那些指令是错误的,说明原因并改正。

(用MASM对该程序进行编译,观察那些语句报错,报的是什么错?再看语句,根据语法与句法分析实际是什么错,在语句后加简单注释,说明错误原因,尝试进行修改,要求尽量使修改结果符合原设计意图。

最终要求全部修改后能通过编译。

)DATA SEGMENTBUF DB 3DA1 DB ?C DB 'B',0DH,0AH,'$'COUNT EQU $-CDATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DL,255HINC COUNTMOV CS,DXCMP 280,BLPUSH DXLEA AL,CMOV BX,DA1[DX]SUB [DI],[SI]ADD [DX],BXMOV 80H,AXMOV DA1,AXADD [DI],10HMOV BX,OFFSET DA1MOV [SI+DI],BXINC CSMOV ES,DSPOP AHROL AX,2MOV BX,DA1[DI]MOV AH,4CHINT 21HCODE ENDSEND STARTASCII码与压缩型BCD码的相互转换4.十进制数的ASCII码转换为压缩型BCD码令数据段中自ASC_BUF开始的缓冲区内存放着若干个ASCII码表示的十进制数(每个单元存放一位十进制数),要求将这些ASCII码表示的十进制数转换为BCD码,并把两个相邻单元的BCD码合并在一个存储单元(若ASCII码的个数为奇数,则将首地址单元的十进制数对应的BCD码单独存放一个单元,其余的按统一的方法处理)。

应用DEBUG跟踪执行程序,当程序执行到语句MOV AH,4CH 时,查看数据区的内容,分析运行结果。

通过执行过程深入理解内存储器分段的概念。

本程序中因有的位置使用了中文符号,在编译时会报错,观察是如何报错的?检查问题出现在什么地方,将之改正后重新编译直到通过。

DATA SEGMENTASC_BUF DB ‘71542185’COUNT EQU $-ASC_BUFBCDBUF DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET ASC_BUFMOV DI,OFFSET BCDBUFMOV CX,COUNTMOV BX,CXSHR BX,1 ;BX右移一位,等效于除2JNC EVEN1 ;(CF)=0,则CX为偶数MOV BL,[SI] ;对首位单独进行处理AND BL,0FHMOV [DI],BLDEC CXINC SIINC DIEVEN1: MOV AL,[SI]AND AL,0FH ;清高4位为0MOV BL,[SI+1]AND BL,0FH ;清高4位为0MOV DL,16MUL DLADD AL,BLMOV [DI],ALADD SI,2INC DIDEC CXJNZ EVEN1MOV AH,4CHINT 21HCODE ENDSEND START(1)画出本程序程序流程图。

相关文档
最新文档